@TODO Добавить
- JWT авторизацию и аутентификацию.(Подтверждение почты,Восстановление пароля)
- RabbitMQ/systemd worker для очередей.
- Unit-тесты.
- Swagger OpenApi документацию API.
- PHPStan, Psalm
- CI/CD workflows + tests + static analyzer
Заказчик владеет ИТ бизнесом и просит разработать систему управления проектов. Со слов заказчика получены требования: IT-компания ведет разработку нескольких проектов. В каждом проекте своя команда разработчиков, но некоторые разработчики могут участвовать в нескольких проектах.
Разработать сущности «Разработчик» и «Проект».
Минимально необходимыми полями для «Разработчика» являются:
ФИО разработчика *; должность *; (возможные должности программист, администратор, devops, дизайнер) email ; контактный телефон; проект, над которым он работает.
Для «Проекта»:
название проекта; команда разработчиков; заказчик.
Добавить валидацию заполненности полей со стороны сервера, проверять, что проект, добавляемый разработчику существует.
Создать миграцию сущностей для БД
Реализовать возможность нанимать/увольнять/переводить (на проект, новую должность) разработчиков, создавать/закрывать проекты.
Сформировать запросы в SQL по сбору статистики (количество проектов, сотрудников, средний возраст сотрудников и т.д.)
Запросы.
- Количество проектов
select count(*) as project_count from project p;
- Количество сотрудников
select count(*) as employees_count from employee e;
- средний возраст сотрудников
select avg(e.age) as avg_employees_age from employee e;
- средний возраст работников на каждом проекте и среднее кол-во работников на каждом проекте
with emp_pro as ( select ep.employee_id, ep.project_id from project p JOIN employees_projects ep ON p.id = ep.project_id ) select emp_pro.project_id, avg(e.age) as avg_project_emplpyees_age, count(e.*) as project_employees_count from emp_pro JOIN employee e ON emp_pro.employee_id = e.id GROUP BY emp_pro.project_id ORDER BY emp_pro.project_id