Създайте уеб приложение, което представлява личен журнал на един студент във ФМИ.
Система за потребители с логин/регистрация и поне 3 ранга - администратор, модератор и студент.
Администраторите имат възможност да управляват всички данни в приложението:
- Могат да променят всички данни, въведени от останалите потребители
- Управляват потребители, включително да правят други потребители администратори
Основната им функция е да въвеждат данни:
- Специалности
- Катедри
- Дисциплини (задължителни и избираеми)
- Група на избираемите дисциплини (напр. ЯКН, ПМ)
- Учебни планове и разписания
- Кредити
- Изпити (редовна/поправителна сесия)
Бележки:
- Източник на данните може да бъде сайтът на ФМИ. Там има обща информация за ФМИ - учебни планове, дисциплини (задължителни и избираеми), кредити, разписания, изпити и др.
- Ще ви гледаме с възхищение, ако за въвеждането на някои от данните направите парсер/crawler и автоматизирате процеса.
- За всеки изпит може да си въвежда получената оценка
- Среден успех по години или общо (на базата на въведените оценки)
- Дават оценка и мнение за дадена дисциплина, която са записали
- Получава следната информация наготово:
- Разписание за семестъра
- За всички дисциплини, за които е записан (изборни и задължителни)
- Информация за дисциплина, ден, час, зала (може и преподавател)
- Учебната си програма
- График с изпити (ако са въведени от модераторите)
- Записани дисциплини
- Задължителни по учебен план
- Избираеми (записани от него)
- Кредити
- Текущ брой
- Необходим брой по учебен план
- Списък от всички избираеми дисциплини и съответно може да ги записва
- Достъп до мненията за всяка дисциплина
- Филтриране по оценка, катедра, група на ИД
- Разписание за семестъра
- Всеки студент може да качва записки към дадена дисциплина под формата на файл
- Могат да бъдат публични или лични
- Публичните записки могат да бъдат виждани от останалите студенти
- Чувствайте се свободни да разширите функционалността с ваши идеи.
- Напишете сами системата за регистрация/вход. Без gem-ове като devise или warden. Разбира се, може да използвате библиотеки за сесии и cookie-та (например тези, които са пакетирани в Sinatra). Паролите не трябва да се съхраняват в чист вид. Трябва да са поне хеширани - прочетете за добрите практики по темата.
- Валидирайте максимално много неща и показвайте смислени съобщения за грешки.
- Използвайте релационна база от данни. Например SQLite3. За целта ще ви трябва sqlite3 gem-а, или пък може да ползвате направо някакъв ORM, например ActiveRecord - вижте ръководството ни за уеб проекти
- Постарайте се да покриете максимална част от кода си с автоматизирани тестове и да направите добро разделение между "логика" и "интерфейс". Това индиректно означава, че не трябва да има много код директно в Sinatra DSL-а. Не се притеснявайте да правите допълнителни класове. Задачите на един подобен клас може да е дори изпълнение на някакво действие (например, записване на избираема дисциплина).
Места, от които да черпите вдъхновение:
- СУСИ - Лична информация за всеки студент от ФМИ (взети/невзети изпити, оценки, присъствие в протоколи и др.)
- Сайтът на ФМИ - Обща информация за ФМИ (учебни планове, дисциплини (задължителни и избираеми), кредити, разписания, изпити и др.)