Задание
В рамках выполнения практической части курса вами будет разработан сквозной пример: приложение «Пропускная система в офисе» (ИС для автоматизации учета перемещения сотрудников офиса).
Первая часть практического задания будет посвящена освоению базовых технологий, таких как C#, базы данных, клиентские технологии и т.п., вторая часть будет включать изучение возможностей платформы Flexberry для эффективного создания приложений.
Общее описание предметной области
В офисе компании Х вводится пропускная система на основе персональных пропускных карт. При помощи карты сотрудник может попасть на любой этаж в офисе, в общественные места (кухня, переговорка и т.п.) и только в свой кабинет. Требуется разработать информационную систему, в которой будет вестись информация как о выданных персональных пропускных картах, так и информация о перемещениях сотрудников. Все двери кабинетов, в которых работают сотрудники могут находиться в 2-х состояниях: замок открыт
и замок закрыт
. Во время рабочего дня, если в кабинете находятся сотрудники, как правило дверь находится в состоянии замок открыт
. Таким образом, при перемещении между кабинетами офиса сотрудники не всегда используют карты. На входе и выходе из здания офиса все сотрудники обязаны использовать карту в индивидуальном порядке, это позволяет зафиксировать время прихода сотрудника в офис и время его ухода.
Технические требования:
- Приложение реализуется в виде SPA-приложения с бакендом на C# и фронтендом на EmberJS.
- Данные хранятся в БД Postgres.
Практическое задание №1 - Серверная разработка (C#, .NET, ASP.NET)
Для реализации потребуется:
- Microsoft Visual Studio 2017
- Git for Windows
Задание
Требуется реализовать алгоритм вычисления дружеских связей сотрудников на основе информации о совместном обеде или приходе и уходе из офиса. Если несколько сотрудников в течение недели выходили на обед с разницей не более 5 минут и возвращались с обеда с такой же небольшой разницей не менее 3-х раз, то они считаются друзьями. Если сотрудники приходят в офис утром и уходят вечером в одно и то же время с разницей не более 5-ти минут не менее 3-х раз, то тоже считаются друзьями.
На вход алгоритму подаётся массив структур, которые содержат:
- ФИО сотрудника и его id
- Массив кортежей: дата-время прихода в офис и дата-время ухода из офиса
На выходе должен быть массив кортежей, каждый из которых содержит информацию о дружеских отношениях между сотрудниками.
Реализацию следует сделать в виде .net-библиотеки и подготовить модульные тесты для неё (xUnit), продемонстрировать процент покрытия кода модульными тестами (чем больше, тем лучше).
Предоставление результатов выполнения работы на проверку
Реализованное решение (Visual Studio Solution) полностью разместить в репозитории на GitHub (решение должно компилироваться и запускаться). Ссылку на репозиторий предоставить преподавателям курса.
Практическое задание №2 - Клиентская разработка (HTML, CSS, JS, jQuery)
Для реализации потребуется:
- Редактор кода для клиентской разработки: Visual Studio Code
- Git for Windows
Задание
С использованием возможностей HTML, CSS, JS, jQuery сверстать форму, на которой пользователь может указать ФИО сотрудника, год, месяц и получить информацию о его посещениях офиса с детализацией до каждого дня. Форма должна напоминать месячный календарь, т.е. в таблице должно быть 7 столбцов (пн, вт, ср, чт, пт, сб, вс) и недели в строках. В каждой ячейке таблицы должно быть указано число и время прихода-ухода в офис (сотрудник может несколько раз посещать офис).
Предоставление результатов
Реализованный проект разместить в репозитории на GitHub в виде встроенных страниц GitHub Pages, позволяющих просматривать готовый результат. Ссылку на репозиторий и опубликованный таким образом проект предоставить преподавателям курса.
Практическое задание №3 - Клиентская разработка с использованием SPA-фреймфорка (EmberJS)
Для реализации потребуется:
- Редактор кода для клиентской разработки: Visual Studio Code
- Git for Windows
Задание
Требуется реализовать EmberJS приложение, в котором будет реализована форма, на которой пользователь может указать ФИО сотрудника, год, месяц и получить информацию о его посещениях офиса с детализацией до каждого дня. Форма должна напоминать месячный календарь, т.е. в таблице должно быть 7 столбцов (пн, вт, ср, чт, пт, сб, вс) и недели в строках. В каждой ячейке таблицы должно быть указано число и время прихода-ухода в офис (сотрудник может несколько раз посещать офис). Под календарём должен выводить список вероятных друзей данного сотрудника (EmberJS-компонент).
В виде EmberJS-утилиты требуется реализовать алгоритм вычисления дружеских связей сотрудников на основе информации о совместном обеде или приходе и уходе из офиса (см. задание №1).
Требуется реализовать компонент, в который передаётся id сотрудника, год и месяц, а он отображает список сотрудников, которые могут являться друзьями данного сотрудника. Использовать в компоненте EmberJS-утилиту с алгоритмом вычисления дружеских связей.
Предоставление результатов
Реализованный проект разместить в репозитории на GitHub в виде проекта EmberJS и опубликованного приложения в GitHub Pages, которые позволяют просматривать готовый результат. Ссылку на репозиторий и опубликованный таким образом проект предоставить преподавателям курса.
Практическое задание №4 - Базы данных
Для реализации потребуется:
- Postgres
- pgAdmin
- Git for Windows
Задание
Для указанной предметной области реализовать базу данных, заполнить базу скриптами (минимум по 5 записей на таблицу). Реализовать скрипты по созданию ограничений, индексов.
Подготовить SQL-скрипты для получения следующей информации:
- Вывести топ-5 сотрудников, которые проводят в офисе больше всего времени
- Вывести информацию о количестве открываний-закрываний двери на каждом из этажей в порядке убывания
- Вывести информацию о рабочих днях максимальном, среднем и минимальном количестве сотрудников, посетивших офис
- Вывести информацию об общем времени работы всех сотрудников в офисе по месяцам
- Вывести топ-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 приложении требуется реализовать следующую бизнес-логику.
- Реализовать бизнес-сервер, который будет контролировать, что сотрудник не выходит из здания, если он не входил в него и наоборот - не входит, если не выходил. Должно быть сгенерировано событие, которое свидетельствует о неисправности оборудования.
- Реализовать бизнес-сервер, который будет запрещать удаление объектов с информацией о проходе по карте (чтобы нельзя было скрыть преступление).
- Реализовать бизнес-сервер, который будет контролировать закрыли ли сотрудники дверь кабинета перед уходом. Если сотрудник кабинета выходит последним из здания, а дверь кабинета находится в состоянии
замок открыт
, то нужно сгенерировать событие с информацией о сотруднике и номере кабинета. - Добавить не хранимое поле в класс Сотрудник, которое будет представлять ФИО одной строкой из Фамилии Имени и Отчества.
- Добавить не хранимое поле ВОфисе в класс сотдудник, которое будет сигнализировать о том в офисе находится сотрудник или нет.
Предоставление результатов
Доработанная бизнес-логика должна быть включена в разрабатываемое приложение и закоммичена в соответствующий репозиторий. Ссылка на репозиторий предоставляется для проверки преподавателям курса.
Практическое задание №8 - Разработка UI-логики приложения
Для реализации потребуется:
- Microsoft Visual Studio 2017
- Postgres
- Редактор кода для клиентской разработки: Visual Studio Code
- Git for Windows
Задание
Привязать реализованные ранее EmberJS дополнительные формы и компоненты к данным из БД.
Перенести в сгенерированное приложение и реализовать интеграцию формы из задания №3 с бизнес-логикой приложения.
На форме для элементов управления с выбором - данные должны браться из БД (через ORM и Lookup). Заполнение данных также должно работать с сохранением в БД.
Требуется настроить красивый внешний вид для всех форм приложения. Улучшить визуальную тему оформления. Реализовать ярлыки на рабочем столе приложения для быстрого доступа к часто используемым функциям.
Реализовать дополнительные формы, которые будут выводить результаты выполнения запросов из задания по БД.
Предоставление результатов
Доработанная UI-логика должна быть включена в разрабатываемое приложение и закоммичена в соответствующий репозиторий. Ссылка на репозиторий предоставляется для проверки преподавателям курса.
Практическое задание №9 - Функциональные подсистемы Flexberry
Для реализации потребуется:
- Flexberry Designer
- Microsoft Visual Studio 2017
- Редактор кода для клиентской разработки: Visual Studio Code
- Postgres
- Git for Windows
Задание
Для реализованного приложения настроить подсистему полномочий. Сотрудники и карты должны заводиться администратором приложения. Авторизация на основе форм. Создать иерархию ролей, добавить операции на просмотр сведений и выдать права только администраторам. Настроить несколько ролей и назначить эти роли пользователям.
Настроить подсистему аудита. В разрабатываемом приложении все изменения объектов данных должно фиксироваться в подсистеме аудита. В навигационное меню следует добавить формы аудита, которые должны показываться только администраторам.
Предоставление результатов
Доработанное приложение должно быть закоммичено в соответствующий репозиторий. Дополнительно в репозиторий должны быть добавлены SQL-скрипты, которые нужно выполнить для функционирования приложения с подсистемой полномочий и аудита. Ссылка на репозиторий предоставляется для проверки преподавателям курса.