Задача реализовать rest api сервис который позволяет вести календарь рабочих дней врачей (сотрудников). Реализация интерфейса пользователя не требуется.
Описание предметной области
Для каждого сотрудника (табельный номер, ФИО, примечание) можно указать период, статус, долю рабочего дня и примечание.
Табельный номер врача уникальное поле, не может быть изменено.
Статус может принимать одно из следующих значений:
• дежурство в приемном отделении
• работа в операционной
• больничный
• отпуск
Например сотрудник:
• брал больничный с 13.01.2018 - 22.01.2018 (10 полных рабочих дней)
• работал в приемном отделении пол дня 11.01.2018 (пол рабочего дня)
• Работал в операционной 1 день
Примечание: подразумевается, что выходные и праздничные дни никак не отличаются от рабочих дней.
Задания
Необходимо реализовать сервис, который предоставляет api с функционалом, описанным в заданиях ниже.
Задание 1
CRUD операции для сотрудников.
Для списка записей должна быть возможность осуществлять поиск по ФИО, табельному номеру.
Задание 2
CRUD операции для записей календаря (кто, когда, в каком статусе).
Задание 4 (по желанию)
Импорт базы сотрудников из внешнего excel файла. (test_data.xlsx)
Подразумевается, что импорт будет производиться периодически и файл в перспективе будет содержать больше 1000 записей.
Предполагается что в файле находится актуальная информация по действующим сотрудникам и должна быть синхронизирована при импорте с базой данных сервиса.
Использование DTO будет плюсом.
Технические требования
• Формат api: json на входе и выходе • Наличие минимально необходимых тестов будет плюсом. • Скрипт для деплоя будет плюсом.
Технологии • PHP текущей стабильной версии (7.x и т.д.). • Mysql текущей стабильной версии (5.7 и т.д.). • Symphony 3.4 • ORM Doctrine 2.x • Документирование кода - PHPDoc
- git clone https://github.com/aristova/atlas-test-task.git
- В корне проекта выполнить composer install
- Создать базу данных php bin/console doctrine:database:create
- Обновить структуру базы данных php bin/console doctrine:schema:update --force
- Запустить локальный веб-сервер php bin/console server:run
Сотрудники Создание: curl -d '{"name":"Ivanov", "number":666, "note":"The best doctor"}' -H "Content-Type: application/json" -X POST http://127.0.0.1:8000/employee/new
Информация об одном сотруднике: curl -H "Content-Type: application/json" -X GET http://127.0.0.1:8000/employee/1
Информация о всех сотрудниках: curl -H "Content-Type: application/json" -X GET http://127.0.0.1:8000/employee/
Информация, отфильтрованная по табельному номеру сотрудника: curl -d '{"number":666}' -H "Content-Type: application/json" -X POST http://127.0.0.1:8000/employee/
Информация, отфильтрованная по фамилии сотрудника: curl -d '{"name":"Ivanov"}' -H "Content-Type: application/json" -X POST http://127.0.0.1:8000/employee/
Редактирование: curl -d '{"name":"Petrov", "note":"The best doctor"}' -H "Content-Type: application/json" -X PUT http://127.0.0.1:8000/employee/1/edit
Удаление: curl -H "Content-Type: application/json" -X DELETE http://127.0.0.1:8000/employee/1
Записи в календаре
number - это табельный номер врача
Создание: curl -d '{"number":666, "status":"holiday", "from":"925574552", "to":"971193752"}' -H "Content-Type: application/json" -X POST http://127.0.0.1:8000/entry/new
Информация об одной записи: curl -H "Content-Type: application/json" -X GET http://127.0.0.1:8000/entry/1
Информация о всех записях: curl -H "Content-Type: application/json" -X GET http://127.0.0.1:8000/entry/
Редактирование: curl -d '{"number":666, "status":"sick", "from":"1528029333", "to":"1537943333"}' -H "Content-Type: application/json" -X PUT http://127.0.0.1:8000/entry/1/edit
Удаление: curl -H "Content-Type: application/json" -X DELETE http://127.0.0.1:8000/entry/1