К вам пришел заказчик – владелец завода по производству свеч от геморроя “Здоровая
норка”. У него есть подозрения что работники постоянно опаздывают на работу или
уходят раньше. Он просит вас создать систему, которая могла бы отслеживать приход и
уход на работу каждого сотрудника.
Каждый сотрудник на проходной будет прикладывать карточку к считывателю, который
будет отправлять информацию о сотруднике в данную систему. От вас потребуется
получить номер пропуска сотрудника, найти его в базе и записать его время прохождения
КПП на вход или на выход.
Детали реализации:
-
Проект должен быть в формате
ASP.NET Web API
, без авторизации, визуальное оформление (razor pages) не нужно, просто контроллеры api, принимающие данные и (если нужно) возвращающие результат в форматеJSON
. -
Необходимо создать базу сотрудников предприятия с возможностью добавления, удаления и изменения данных сотрудников, а так же вывода списка всех имеющихся работников. (т.е. простейший CRUD - интерфейс). Для простоты, формат БД –
Sqlite
. Для создания базы понадобитсяEntityFramework Core 5.0
и провайдер дляSqlite
, доступный вNuGet
под названиемMicrosoft.EntityFrameworkCore.Sqlite
. -
Сотрудники должны иметь следующие данные: a. номер пропуска (ID), b. Фамилия, c. Имя, d. Отчество, e. Должность, f. Cписок всех входов/выходов с завода (назовем их смены).
-
Должности у сотрудников будут трех видов: a. Менеджер, b. Инженер, c. Тестировщик свечей 5. Смены содержат: a. id смены (поле для БД) b. время начала смены (когда человек пришел на завод “Здоровая норка“), c. конца смены (когда ушел) d. количество отработанных часов (заполняется в конце смены) e. ссылку на работника.
-
По итогу, должен получиться проект WebApi с двумя контроллерами: a. Контроллер “отдела кадров”, с возможностью создать, удалить или изменить данные работников. b. контроллер “КПП”, в который можно отправить номер пропуска сотрудника и дату/время входа/выхода. c. (бонус, если все вышеперечисленное было слишком просто) в контроллере “отдела кадров” сделать вывод статистики нарушений работников за месяц (данные необязательно заполнять в базу самим, можно использовать генератор). Если сотрудник приходит на работу позже 9:00 и уходит раньше 18:00, проставлять ему замечание и выводить кол-во этих замечаний за месяц. Тестировщики свечей от геморроя работают по 12 часов, их время ухода со смены должно быть не раньше 21:00, иначе проставляется замечание.
Все контроллеры должны возвращать либо Ok (200) и, если требуется, результат запроса в JSON, либо BadRequest (400) и сообщение об ошибке.
- Содержит 2 метода (экшена) StartShift и EndShift, оба принимают Id сотрудника (он же номер пропуска) и время начала (StartShift) / конца (EndShift) смены.
- Если сотрудника с заданным номером пропуска нет в базе – возвращается ошибка.
- Если сотрудник зашел на завод и вышел не отметившись, он не может пройти кпп на вход пока не закроет предыдущую смену – возвращается ошибка.
- Если сотрудник каким-то образом попал на завод не пробив пропуск, он не может выйти пока не отметит начало своей смены – возвращается ошибка.
- Методы контроллера: a. Добавить сотрудника: обязательные поля – Фамилия, Имя, Должность, если отсутствует одно из них – возвращается ошибка. После добавления сотрудника в базу, вернуть объект нового сотрудника в формате JSON. b. Изменить сотрудника: обязательные поля – Id сотрудника, которого мы меняем, если Id сотрудника не указан или сотрудник не найден в базе – возвращается ошибка. При успешном изменении, вернуть сотрудника в формате JSON. c. Удалить сотрудника: обязательные поля – Id сотрудника, которого мы меняем, если Id сотрудника не указан или сотрудник не найден в базе – возвращается ошибка. d. Получить список всех сотрудников: возвращает список всех сотрудников в формате JSON. Опциональный аргумент – должность, если он передан, возвращаются только сотрудники с указанной должностью. Если передается несуществующая должность – вернуть ошибку e. Получить список всех должностей.
- (Бонус) если все-таки решили делать статистику нарушений, метод из пункта d должен показывать её в списке сотрудников.