Сдача предмета экстерном

Сдача предмета экстерном #

Общие положения #

  • Запросить сдачу экстерном можно до сдачи первой лабораторной работы.
  • Защитить свою работу необходимо до сдачи второй лабораторной работы.

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

  • Знание основ языка 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-токены, которые необходимо сохранять в сессионном токене.
  • Запрещено использовать сессионные токены для решения любых задач кроме хранения аутентификационного токена.

Общая формулировка задачи #

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

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

Пример детальной формулировки задачи #

Разработать веб-приложение для ведения инвентаризации в организации.

Сущности #

Работник #

  • Псевдоним, строка.
  • Фамилия имя и отчество работника, строка.
  • Телефонный номер, строка.

Организация-владелец #

  • Название организации

Оборудование #

  • Название, строка.
  • Уникальный номер, строка.
  • Владелец, организация-владелец.

Журнал передачи оборудования #

  • Оборудование.
  • Работник.
  • Дата передачи, дата.
  • Направление передачи, перечисление: принятие организацией, выдача работнику, получение от работника.

Роли #

Гость #

  • Может авторизоваться в системе.

Администратор пользователей #

  • Может создать нового пользователя.
  • Может изменить роль у зарегистрированного пользователя.

Работник #

  • На стартовой странице может видеть информацию о
  • Может просматривать список выданного оборудования.
  • Может просматривать текущий статус у конкретного оборудования.
  • Не может видеть историю перемещения оборудования.

Ответственный работник #

  • Может просматривать список текущего оборудования.
  • Может сортировать список оборудования по следующим критериям:
    • Дата последнего обновления оборудования.
    • Название оборудования.
  • Может добавить новое оборудование, заполнив также первую запись о передаче оборудования.
  • Может просматривать список возвращённого оборудования.
  • Может просматривать список работников. В списке должна выводиться информация о пользователе и количестве выданных устройств.
  • На странице работника может просматривать список оборудования, выданного работнику.
  • На странице оборудования может просматривать историю перемещения оборудования.
  • Может добавить запись о перемещении оборудования между работниками.

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