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

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

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

  • Знание основ языка HTML.
  • Умение структурировать HTML-документы.
  • Знание основ языка CSS.
  • Умение применять классы CSS к HTML-элементам.
  • Умение подключать внешние CSS-файлы к HTML-документу.
  • Знание основ маршрутизации HTTP-запросов с помощью библиотеки http4k.
  • Умение обрабатывать GET и POST-запросы с помощью библиотеки http4k.
  • Умение формировать динамические HTML-страницы с помощью шаблонизатора.
  • Умение корректно обрабатывать параметры, приходящие от пользователя:
    • Через маршруты к документам.
    • Через параметры маршрута.
    • Через содержимое интерактивной HTML-формы, приходящей в теле запроса.
  • Умение применять средства статического анализа кода Kotlin: ktlint и detekt.
  • Умение писать модульные тесты для проверки логики HTTP-обработчиков.

Требования к лабораторной работе #

  • Результат работы — исходные коды приложения и конфигурация сборочной системы Gradle без артефактов сборки приложения (без каталогов build, .gradle, .idea, bin)
  • Приложение должно быть разработано с использованием языка программирования Kotlin.
  • Приложение должно использовать актуальную версию библиотеки http4k.
  • Просмотр документов должен осуществляться через обработку и отправку GET-запросов.
  • Операции по редактированию данных (добавление, редактирование и удаление) должны осуществляться с помощью POST-запросов.
  • Операции по фильтрации данных, включая постраничный вывод, должны осуществляться с помощью GET-запросов. Параметры фильтрации данных не должны сбрасываться при переходе между страницами вывода.
  • Для стилизации элементов на странице необходимо использовать классы CSS-фреймворков, следует избегать ручного указания CSS-свойств внутри HTML-документов. Вместо этого необходимо описывать собственные CSS-классы.
  • Запрещается редактировать CSS-стили, входящие в состав скомпилированных файлов CSS-фреймворка. Если хотите внести в них изменения, то создайте свою собственную сборку из исходных кодов.
  • Для формирования динамических HTML-документов необходимо использовать шаблонизатор, рекомендуется к использованию шаблонизатор Pebble.
  • Приложение должно корректно обрабатывать некорректные данные от пользователя:
    • Всегда должны формироваться HTML-документы с корректным содержимым.
    • Приложение не должно показывать техническую информацию об исключительных ситуациях, стеках вызова и прочее пользователю. Данные ситуации должны быть явно обработаны внутри вашего кода приложения и преобразованы в сообщения, понятные для пользователя. Для решения этой задачи запрещено использовать фильтр с перехватом всех исключительных ситуаций приложения.
    • В случае отсутствия искомого документа должна отображаться соответствующая страница.
  • Логику проверки данных, поступающих от пользователя, следует выделять в отдельный слой. Можно использовать механизм линз из библиотеки http4k, другую библиотеку или элементы, созданные врунчную.
  • Страницы со списками данных должны корректно обрабатывать ситуацию отсутствия данных. Вместо пустой страницы должно присутствовать информационное сообщение о том, что в данном списке нет данных.
  • Приложение должно соответствовать требованиям к исходному коду, предоставляемыми актуальной версией инструмента ktlint. Конфигурация ktlint должна соответствовать требованиям.
  • Рекомендуется исправить все недостатки, на которые указывает инструмент detekt.
  • Необходимо подготовить тестовые данные для проверки работоспособности приложения.
    • Данных должно быть достаточно. Минимальный объём данных — 10 000 записей на один список данных.
    • Данные для проверки можно сгенерировать. Однако они должны быть репрезентативными:
      • Числа, включая даты, должны быть распределены на некотором промежутке.
      • Названия можно генерировать из базового набора частей. Например 100 фамилий, 100 имён и 100 отчеств должно быть достаточно для создания достаточно уникальных имён для всех записей.
    • Данные необходимо считывать при старте приложения из файла, который хранится на жёстком диске рядом с исходными кодами.
  • Изменённые данные приложения желательно сохранять на жёстком диске при завершении работы приложения.
  • В приложении и в используемых файлах не должны систематически дублироваться данные.
  • Модульные тесты приложения должны покрывать все сценарии работы HTTP-обработчиков.

Задача #

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

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

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

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

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