
Техническое задание
Цель проекта: создание веб-портала с тестами для пользователей разного уровня.
Функциональные требования:
Регистрация и авторизация пользователей.
Возможность прохождения тестов различной тематики.
Возможность просмотра результатов тестов и сохранения их в профиле пользователя.
Возможность добавления новых тестов администратором системы.
Отображение результатов прохождения тестов.
Разграничение прав доступа и отдельные меню для пользователя и администратора.
Технические требования:
Использование современных технологий для разработки веб-портала.
Адаптивный дизайн для удобного использования портала на различных устройствах.
Безопасность данных пользователей (защита от SQL-инъекций, XSS-атак и др.).
Высокая скорость работы портала и отзывчивость интерфейса.
Дополнительные требования:
Ограничение на количество попыток прохождения теста отдельных пользователем.
Фиксация состояния теста и результатов его прохождения на стороне пользователя на случай его изменения.
Проведение регулярных технических обновлений и поддержка портала после его запуска.
Сроки разработки: до 3 месяцев.
Бюджет проекта: 5 рублей.
6. Схема базы данных
Схема базы данных представлена на рисунке 1.
Рисунок 1 – Схема Базы данных.
Начнем с описания таблицы flyway_schema_history. Как ранее упомяналось, в проекте используется фреймворк flyway, который использует упомянутую таблицу для отслеживания версии каждой базы данных. В ней фиксируется каждый файл миграции, применённый для создания этой версии.
Чтобы приспособиться к изменяющимся схемам баз данных, Flyway:
Сканирует путь класса приложения (текущий рабочий каталог) и местоположения доступных файлов миграции.
Сравнивает файлы миграции с таблицей истории. Если номер версии в имени файла ниже или равен версии, отмеченной как текущая, он игнорируется.
Ставит оставшиеся файлы миграции в очередь. Они сортируются по номеру версии.
Выполняет каждый файл миграции с номером версии в порядке версий между текущей версией и версией, указанной в качестве целевой. Если не указана целевая версия, выполняются все файлы.
Обновляет таблицу метаданных по мере применения каждой миграции.
Таблица flyway_schema_history предназначена исключительно для использования Flyway. Не рекомендуется редактировать или обновлять её напрямую.
Таблица categories – содержит лишь три поля. Id – эта колонка хранит информацию по первичным ключам для каждой отдельной записи. В качестве типа используется UUID. UUID (англ. universally unique identifier — «всемирно уникальный идентификатор») — стандарт идентификации, используемый в создании программного обеспечения. Он стандартизирован Open Software Foundation (OSF) как часть DCE — среды распределённых вычислений. Title – хранит значение заголовка категории, а description – ее описание.
Таблица users – хранит информацию о каждом зарегистрированном пользователе в системе. Большую часть полей пользователь может задать и изменить самостоятельно, за исключением полей с ролью и активностью, которые может изменить лишь администратор БД. Пароли пользователей не хранятся в открытом виде, а хешируются с использованием BCryptPasswordEncoder (это реализация интерфейса PasswordEncoder, которая использует функцию сильного хеширования BCrypt.) на уровне приложения и только потом попадают в БД.
Таблица results хранит результаты прохождения тестов пользователями. За счет наличия внешних ключей поддерживается целостность данных. Также, для хранения состояния теста на момент просмотра результатов по нему – в results включены поля, которые рассчитываются после завершения прохождения теста. То есть при редактировании теста администратором, перерасчет и обновление ответов/вопросов – не будет происходить. Ответа пользователя хранятся в виде json в колонке exam_answers.