Лабораторная работа № 3

Лабораторная работа № 3 #

Проверяемые знания #

  • Знание основ языка 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.
  • Приложение должно использовать актуальную версию библиотеки http4k.
  • Просмотр документов должен осуществляться через обработку и отправку GET-запросов.
  • Операции по редактированию данных, в том числе по добавлению, должны осуществляться с помощью POST-запросов.
  • Операции по фильтрации данных, включая постраничный вывод, должны осуществляться с помощью GET-запросов.
  • Для стилизации элементов на странице необходимо использовать классы CSS-фреймворков, следует избегать ручного указания CSS-свойств внутри HTML-документов. Вместо этого необходимо описывать собственные CSS-классы.
  • Для формирования динамических HTML-документов необходимо использовать шаблонизатор Pebble.
  • Приложение должно корректно обрабатывать неправильные данные от пользователя:
    • Всегда должны формироваться HTML-документы с корректным содержимым.
    • Приложение не должно показывать исключительные ситуации, стеки вызова и прочее пользователю.
    • В случае отсутствия искомого документа должна отображаться соответствующая страница.
  • Для проверки параметров от пользователя рекомендуется использовать механизм линз библиотеки http4k. Также допускается ручная проверка параметров или привлечение других библиотек.
  • Страницы со списками данных должны корректно обрабатывать ситуацию отсутствия данных. Вместо пустой страницы должно присутствовать информационное сообщение о том, что соответствующих данных нет.
  • Приложение должно соответствовать требованиям к исходному коду, предоставляемыми актуальной версией инструмента ktlint.
  • Рекомендуется исправить все недостатки, на которые указывает инструмент detekt.
  • Для уникальной идентификации элементов в таблицах рекомендуется использовать автоматически увеличивающиеся поля.
  • Запрещено использовать аттрибут required для полей ввода HTML-форм.
  • Для аутентификации пользователей необходимо использовать JWT-токены, которые необходимо сохранять в куках.
  • В рамках JWT-токена разрешено сохранять только идентификаторы пользователя, запрещено размещать информацию по ролям в сессионных токенах.
  • Запрещено использовать сессионные токены для решения любых задач кроме хранения аутентификационного токена.

Задача #

Разработать веб-приложение, решающее задачу по управлению данными в указанной тематике. Приложение должно:

  1. Отображать стартовую страницу с описанием предметной области.
  2. Обеспечить управление несколькими (2 и более) связными списками данных. Для каждого отдельного списка необходимо:
    1. Отображать список на отдельной странице.
      • Список должен быть отсортирован по дате добавления элемента, если не указано иначе.
      • Элементы списка на данной странице должны показывать минимальный объём информации.
    2. На странице со списком реализовать постраничный вывод информации.
    3. На странице со списком обеспечить фильтрацию данных минимум по двум параметрам.
    4. Реализовать переход к странице с детальной информацией об элементе.
  3. На странице с детальной информацией об элементе необходимо.
    1. Отображать все поля элемента в удобном для восприятия виде.
    2. Реализовать переход к странице информации о связном элементе или списке элементов.
  4. Приложение должно позволять добавлять новые элементы в каждый отображаемый список. Необходимо обеспечить:
    1. Проверку данных во всех полях ввода.
    2. Указание связных объектов необходимо обеспечить с помощью выбора из выпадающего списка.
  5. Приложение должно предоставлять страницу со статистической информацией, подсчитанной относительно двух списков.
  6. На всех страницах должен присутствовать блок навигации, позволяющий переходить между стартовой страницей и страницами списков.
  7. Обеспечить различное поведение приложения в зависимости от указанной роли пользователя.
  8. Приложение должно реализовывать все задачи, которые были поставлены перед приложением во второй лабораторной работе.

Распределение задач #

Описание задач можно найти в разделе «Лабораторные работы» → «Задачи».

Тематика задач описана в лабораторной № 1.

© A. M. Васильев, 2022, CC BY-SA 4.0, andrey@crafted.su