Сдача предмета экстерном #
Общие положения #
- Запросить сдачу экстерном можно до сдачи первой лабораторной работы.
- Защитить свою работу необходимо до сдачи второй лабораторной работы.
Проверяемые знания #
- Знание основ языка HTML.
- Умение структурировать HTML-документы.
- Знание основ языка CSS.
- Умение применять классы CSS к HTML-элементам.
- Умение подключать внешние CSS-файлы к HTML-документу.
- Умение использовать CSS-стили фреймворка Foundation.
- Знание основ маршрутизации HTTP-запросов с помощью библиотеки http4k.
- Умение обрабатывать GET и POST-запросы с помощью библиотеки http4k.
- Умение формировать динамические HTML-страницы с помощью шаблонов Pebble.
- Умение корректно обрабатывать параметры, приходящие от пользователя:
- Через маршруты к документам.
- Через параметры маршрута.
- Через поля интерактивных HTML-форм.
- Умение применять средства статического анализа кода на языке Kotlin: ktlint и detekt.
- Умение сохранять данные приложения и извлекать их из хранилища. Данные в хранилище должны сохраняться между перезапусками приложения.
- Умение оперировать связями между объектами из разных списков объектного хранилища.
- Знание об слоистой архитектуре веб-приложения. Умение выделять слои по задачам веб-приложения.
- Умение формировать безопасное сохранение паролей пользователей в хранилище.
- Умение работать с сессионными токенами для аутентификации пользователей.
- Знание о структуре JWT-токенов.
- Умение выполнять авторизацию действий пользователя.
Требования к лабораторной работе #
- Результат работы — исходные коды приложения без артефактов сборки приложения (без каталогов build, .gradle, .idea).
- Приложение должно быть разработано с использованием языка программирования Kotlin.
- Запрещено написание любой логики приложения на стороне клиента, т.е. написание кода на JavaScript (и компиляции логики в него) и использование модулей WebAssembly.
- Приложение должно использовать актуальную версию библиотеки http4k.
- Просмотр документов должен осуществляться через обработку и отправку GET-запросов.
- Операции по редактированию данных, в том числе по добавлению, должны осуществляться с помощью POST-запросов.
- Операции по фильтрации данных, включая постраничный вывод, должны осуществляться с помощью GET-запросов.
- Для стилизации элементов на странице необходимо использовать классы CSS-фреймворков, следует избегать ручного указания CSS-свойств внутри HTML-документов с помощью атрибута
style
и тегаstyle
. Вместо этого необходимо описывать собственные CSS-классы во внешних по отношению к приложению файлах. - Для формирования динамических HTML-документов необходимо использовать шаблонизатор Pebble.
- Приложение должно корректно обрабатывать неправильные данные от пользователя:
- Всегда должны формироваться HTML-документы с корректным содержимым.
- Приложение не должно показывать исключительные ситуации, стеки вызова и прочее пользователю.
- Приложение должно явно обрабатывать краевые случаи.
- В случае отсутствия искомого документа должна отображаться соответствующая страница.
- Для проверки параметров от пользователя рекомендуется использовать механизм линз библиотеки http4k. Также допускается ручная проверка параметров или привлечение других библиотек.
- Страницы со списками данных должны корректно обрабатывать ситуацию отсутствия данных. Вместо пустой страницы должно присутствовать информационное сообщение о том, что соответствующих данных нет.
- Для хранения данных необходимо использовать подход с выделением слоя хранения данных.
- Можно использовать специализированные решения, базы данных, для хранения данных.
- Для уникальной идентификации объекта в хранилище рекомендуется использовать уникальные идентификаторы, например UUID.
- Запрещено использовать атрибут
required
для полей ввода HTML-форм. Проверка полей формы должна осуществляться на стороне сервера. - Исходный код должен соответствовать большинству требований статических анализаторов кода. Максимальное количество нарушений — 10 на всё приложение.
- Для аутентификации пользователей необходимо использовать JWT-токены, которые необходимо сохранять в сессионном токене.
- Запрещено использовать сессионные токены для решения любых задач кроме хранения аутентификационного токена.
Общая формулировка задачи #
Разработать веб-приложение, решающее задачу по управлению данными в указанной предметной области. Приложение должно:
- Отображать стартовую страницу с описанием предметной области.
- Обеспечить управление несколькими (3 и более) связными списками данных. Для каждого отдельного списка необходимо:
- Отображать список на отдельной странице.
- Список должен быть отсортирован по дате добавления элемента, если не указано иначе.
- Элементы списка на данной странице должны показывать минимальный объём информации.
- На странице со списком реализовать постраничный вывод информации.
- На странице со списком обеспечить фильтрацию данных минимум по двум параметрам.
- Реализовать переход к странице с детальной информацией об элементе.
- Отображать список на отдельной странице.
- На странице с детальной информацией об элементе необходимо.
- Отображать все поля элемента в удобном для восприятия виде.
- Реализовать переход к странице информации о связном элементе или списке элементов.
- Приложение должно позволять добавлять новые элементы в каждый отображаемый список. Необходимо обеспечить:
- Проверку данных во всех полях ввода.
- Указание связных объектов необходимо обеспечить с помощью выбора из выпадающего списка.
- Приложение должно предоставлять страницу со статистической информацией, подсчитанной относительно двух списков.
- На всех страницах должен присутствовать блок навигации, позволяющий переходить между стартовой страницей и страницами списков.
- Обеспечить различное поведение приложения в зависимости от указанной роли пользователя.
- Приложение должно реализовывать все задачи, которые были поставлены перед приложением во второй лабораторной работе.
Пример детальной формулировки задачи #
Разработать веб-приложение для ведения инвентаризации в организации.
Сущности #
Работник #
- Псевдоним, строка.
- Фамилия имя и отчество работника, строка.
- Телефонный номер, строка.
Организация-владелец #
- Название организации
Оборудование #
- Название, строка.
- Уникальный номер, строка.
- Владелец, организация-владелец.
Журнал передачи оборудования #
- Оборудование.
- Работник.
- Дата передачи, дата.
- Направление передачи, перечисление: принятие организацией, выдача работнику, получение от работника.
Роли #
Гость #
- Может авторизоваться в системе.
Администратор пользователей #
- Может создать нового пользователя.
- Может изменить роль у зарегистрированного пользователя.
Работник #
- На стартовой странице может видеть информацию о
- Может просматривать список выданного оборудования.
- Может просматривать текущий статус у конкретного оборудования.
- Не может видеть историю перемещения оборудования.
Ответственный работник #
- Может просматривать список текущего оборудования.
- Может сортировать список оборудования по следующим критериям:
- Дата последнего обновления оборудования.
- Название оборудования.
- Может добавить новое оборудование, заполнив также первую запись о передаче оборудования.
- Может просматривать список возвращённого оборудования.
- Может просматривать список работников. В списке должна выводиться информация о пользователе и количестве выданных устройств.
- На странице работника может просматривать список оборудования, выданного работнику.
- На странице оборудования может просматривать историю перемещения оборудования.
- Может добавить запись о перемещении оборудования между работниками.