Вариант сквозного задания на проектирование и разработку с использованием фреймворка Flexberry Ember

Задание

В рамках выполнения практической части курса вами будет разработан сквозной пример: приложение «Платные парковки» (ИС для автоматизации учета припаркованных машин).

Первая часть практического задания будет посвящена освоению базовых технологий, таких как C#, базы данных, клиентские технологии и т.п., вторая часть будет включать изучение возможностей платформы Flexberry для эффективного создания приложений.

Общее описание предметной области

На территории города располагаются платные парковочные зоны общей вместимостью в 1000 мест. Водителям предоставляется самостоятельно оплатить парковку через сайт. Мониторинг оплаты выполняется сверкой номера припаркованного автомобиля со списком оплаченных парковок. Требуется разработать приложение, в котором будет учитываться факт оплаты парковки либо факт эвакуации автомобиля (водитель, нарушивший правила парковки через это приложение сможет узнать о факте эвакуации, а также стоимости штрафа и адресе пункта эвакуации). Для водителей предлагается оплата по тарифу, привязанному к часу парковки. Один час - 10 рублей. Оплату можно производить за один час, за рабочий день (тариф равен 8 часам) или календарный месяц (150 часов). Штрафы за неуплату парковки зависят от количества нарушений: первое нарушение - 100 часов, второе - 200 часов, третье - 300 часов и так далее. К оплате выставляется счёт за парковку с момента обнаружения до момента эвакуации и штраф.

Технические требования:

  • Приложение реализуется в виде SPA-приложения с бакендом на C# и фронтендом на EmberJS.
  • Данные хранятся в БД Postgres.

Практическое задание №1 - Серверная разработка (C#, .NET, ASP.NET)

Для реализации потребуется:

  • Microsoft Visual Studio 2017
  • Git for Windows

Задание

Требуется реализовать алгоритм расчёта суммы сборов с платных парковок в течение месяца на основании указанных параметров:

  • Стоимость одного часа парковки
  • Среднемесячный процент заполненности парковочных мест
  • Количество нарушений (первый, второй, третий раз)

На выходе должна быть представлена сумма сборов с платных парковок.
Реализацию следует сделать в виде .net-библиотеки и подготовить модульные тесты для неё (xUnit), продемонстрировать процент покрытия кода модульными тестами (чем больше, тем лучше).

Предоставление результатов выполнения работы на проверку

Реализованное решение (Visual Studio Solution) полностью разместить в репозитории на GitHub (решение должно компилироваться и запускаться). Ссылку на репозиторий предоставить преподавателям курса.

Практическое задание №2 - Клиентская разработка (HTML, CSS, JS, jQuery)

Для реализации потребуется:

  • Редактор кода для клиентской разработки: Visual Studio Code
  • Git for Windows

Задание

С использованием возможностей HTML, CSS, JS, jQuery сверстать форму, на которой пользователь может ввести данные о своём автомобиле (госномер) и перейти на форму оплаты парковки или форму с результатами поиска автомобиля среди эвакуированных. Форма оплаты парковки должна предоставлять интерфейс для указания периода оплаты (сколько часов, суток, месяцев) и предоставлять информацию о стоимости в соответствии с выбранным количеством. Форма результатов поиска автомобиля среди эвакуированных должна сначала 5 секунд показывать элемент отображающий загрузку данных, затем в зависимости от вероятности 0,3 показывать сообщение с информацией об эвакуированном автомобиле или сообщение с информацией о том, что “автомобиль не найден, обращайтесь в 112 по поводу угона”.

Предоставление результатов

Реализованный проект разместить в репозитории на GitHub в виде встроенных страниц GitHub Pages, позволяющих просматривать готовый результат. Ссылку на репозиторий и опубликованный таким образом проект предоставить преподавателям курса.

Практическое задание №3 - Клиентская разработка с использованием SPA-фреймфорка (EmberJS)

Для реализации потребуется:

  • Редактор кода для клиентской разработки: Visual Studio Code
  • Git for Windows

Задание

Требуется реализовать EmberJS приложение, в котором будет реализована форма, на которой пользователь может ввести данные о своём автомобиле (госномер) и перейти на форму оплаты парковки или форму с результатами поиска автомобиля среди эвакуированных. Форма оплаты парковки должна предоставлять интерфейс для указания периода оплаты (сколько часов, суток, месяцев) и предоставлять информацию о стоимости в соответствии с выбранным количеством. Форма результатов поиска автомобиля среди эвакуированных должна сначала 5 секунд показывать элемент отображающий загрузку данных, затем в зависимости от вероятности 0,3 показывать сообщение с информацией об эвакуированном автомобиле или сообщение с информацией о том, что “автомобиль не найден, обращайтесь в 112 по поводу угона” (привязывать к бакенду в этом задании не нужно).

В виде EmberJS-утилиты требуется реализовать алгоритм расчёта стоимости парковки на основе входных данных:

  • Количество
  • Единица измерения

На выходе должна быть представлена стоимость парковки.

Использовать в компоненте данную EmberJS-утилиту, при изменении какого-либо параметра пересчитывать и отображать стоимость парковки пользователю.

Предоставление результатов

Реализованный проект разместить в репозитории на GitHub в виде проекта EmberJS и опубликованного приложения в GitHub Pages, которые позволяют просматривать готовый результат. Ссылку на репозиторий и опубликованный таким образом проект предоставить преподавателям курса.

Практическое задание №4 - Базы данных

Для реализации потребуется:

  • Postgres
  • pgAdmin
  • Git for Windows

Задание

Для указанной предметной области реализовать базу данных, заполнить базу скриптами (минимум по 5 записей на таблицу). Реализовать скрипты по созданию ограничений, индексов.

Подготовить SQL-скрипты для получения следующей информации:

  1. На какую зону эвакуации приходится больше всего штрафов по суммам?
  2. Вывести топ-5 автомобилей, которые проводят больше всего времени на платных стоянках
  3. Вывести топ-5 автовладельцев, у которых больше всего автомобилей
  4. Вывести список припаркованных автомобилей на указанную дату и время
  5. Вывести список автомобилей, которые были эвакуированы дважды за один и тот же день

Предоставление результатов

Реализованные скрипты создания БД и заполнения, бекап БД закоммитить в GitHub-репозиторий. Ссылку на репозиторий предоставить преподавателям курса.

Практическое задание №5 - Проектирование ИС

Для реализации потребуется:

  • Flexberry Designer

Задание

Нарисовать UML-диаграммы для обозначенной предметной области. Состав диаграмм определяется самим слушателем курсов, но должен обеспечивать полноценное описание предметной области.

Предоставление результатов

Результатом работы является выгруженная в формате CRP стадия из Flexberry Designer. Стадию (файл с расширением *.CRP) следует закоммитить в репозиторий на GitHub, ссылку предоставить преподавателям курса.

Практическое задание №6 - Объектный дизайн и генерация приложений

Для реализации потребуется:

  • Flexberry Designer
  • Microsoft Visual Studio 2017
  • Postgres
  • Git for Windows

Задание

Выполнить объектный дизайн и генерацию Ember-приложения для описанной предметной области. В качестве основы использовать реализованные ранее UML-модели. Генерация приложения и БД должна быть выполнена средствами Flexberry Designer приложение должно соответствовать требованиям и быть полностью работоспособным. Представления должны быть качественно настроены, подписи к классам и атрибутам на формах должны быть адекватными. Перечень форм и атрибутивный состав должны соответствовать предметной области и покрывать все требуемые бизнес-функции.

Предоставление результатов

Сгенерированное приложение и скрипты создания БД следует выложить в репозиторий на GitHub. Предоставить преподавателям ссылку на репозиторий.

Практическое задание №7 - Разработка бизнес-логики приложений

Для реализации потребуется:

  • Flexberry Designer
  • Microsoft Visual Studio 2017
  • Postgres
  • Git for Windows

Задание

В сгенерированном при помощи Flexberry Designer приложении требуется реализовать следующую бизнес-логику.

  1. Реализовать бизнес-сервер, который будет контролировать, что за один и тот же автомобиль не будет создан объект оплаты на то же самое время, что уже оплачено. Бизнес-сервер должен в этом случае передвинуть дату начала оплаченного времени на конец предыдущего оплаченного периода.
  2. Реализовать бизнес-сервер, который будет запрещать удаление объектов эвакуации автомобиля (чтобы нельзя было сбросить счётчик). В этом же бизнес-сервере должен контролироваться размер штрафа на основе информации о количестве штрафов, выписанных ранее.
  3. Реализовать бизнес-сервер, который будет контролировать оплату штрафа - пользоатель не должен иметь возможность дважды оплатить штраф.
  4. Добавить не хранимое поле в класс Владелец, которое будет представлять ФИО одной строкой из Фамилии Имени и Отчества.
  5. Добавить не хранимое поле Припаркован в класс Автомобиль, которое будет вычисляться по наличию активной записи оплаченной парковки.

Предоставление результатов

Доработанная бизнес-логика должна быть включена в разрабатываемое приложение и закоммичена в соответствующий репозиторий. Ссылка на репозиторий предоставляется для проверки преподавателям курса.

Практическое задание №8 - Разработка UI-логики приложения

Для реализации потребуется:

  • Microsoft Visual Studio 2017
  • Postgres
  • Редактор кода для клиентской разработки: Visual Studio Code
  • Git for Windows

Задание

Привязать реализованные ранее EmberJS дополнительные формы и компоненты к данным из БД.
Перенести в сгенерированное приложение и реализовать интеграцию формы для создания оплаты с бизнес-логикой приложения. На форме для элементов управления с выбором - данные должны браться из БД (через ORM и Lookup). Заполнение данных также должно работать с сохранением в БД.
Требуется настроить красивый внешний вид для всех форм приложения. Улучшить визуальную тему оформления. Реализовать ярлыки на рабочем столе приложения для быстрого доступа к часто используемым функциям.
Реализовать дополнительные формы, которые будут выводить результаты выполнения запросов из задания по БД.

Предоставление результатов

Доработанная UI-логика должна быть включена в разрабатываемое приложение и закоммичена в соответствующий репозиторий. Ссылка на репозиторий предоставляется для проверки преподавателям курса.

Практическое задание №9 - Функциональные подсистемы Flexberry

Для реализации потребуется:

  • Flexberry Designer
  • Microsoft Visual Studio 2017
  • Редактор кода для клиентской разработки: Visual Studio Code
  • Postgres
  • Git for Windows

Задание

Для реализованного приложения настроить подсистему полномочий. Пользователи оператора платных парковок должны заводиться администратором приложения, водители регистрируются самостоятельно (упрощённая схема). Авторизация на основе форм. Создать иерархию ролей, добавить операции на просмотр сведений об эвакуации и выдать права только администраторам. Настроить несколько ролей и назначить эти роли пользователям.
Настроить подсистему аудита. В разрабатываемом приложении все изменения объектов данных должно фиксироваться в подсистеме аудита. В навигационное меню следует добавить формы аудита, которые должны показываться только администраторам.

Предоставление результатов

Доработанное приложение должно быть закоммичено в соответствующий репозиторий. Дополнительно в репозиторий должны быть добавлены SQL-скрипты, которые нужно выполнить для функционирования приложения с подсистемой полномочий и аудита. Ссылка на репозиторий предоставляется для проверки преподавателям курса.