Подробнее о проекте: https://github.com/POMXARK/example-app/blob/master/DOCS.md
Laravel Framework 9.52.15 (PHP 8.1.2-1ubuntu2.11) node 20
На вакансию: https://khabarovsk.hh.ru/vacancy/81007713?hhtmFrom=chat
Необходимо попробовать максимально задействовать возможности фреймворка по канонам паттерна MVC. Есть сущность "Пациент" с полями first_name, last_name, birthdate, age, age_type Необходимо описать роутер и контроллер который:
- принимает только поля first_name, last_name и birthdate
- Создает сущность "Пациент" через модель Patient
- поля age(int возраст) и age_type(char день/месяц/год) заполняются в зависимости от пришеднего в контроллер birthdate(date дата рождения). Если возраст меньше месяца, то это дни. Если меньше года, то месяцы
- созданную и сохраненную сущность отправить в 5ти минутный кеш и в очередь
Обработчик очереди и делать не надо. БД создавать и подключать тоже. Работоспособность кода не важна, главное - способ реализации
- запросом из роута нужно выгрузить список сущностей и также задействовать кеш (если есть и не просрочился). Выгружается полями name (конкатенация first_name + last_name), дата рождения в формате (d.m.Y) и возвраст в формате "4 день" (склонять не надо)
P.S. В лоб пилить логику в контроллере - не интересно. Необходимо учесть, что контроллер должен быть максимально "тонким" и с минимальным вызовом вспомогательных сервисов вида $this->userService->age()
- age содержит цифру согласно указанному age_type - кол-во дней, месяцев или лет
- age_type поле в любом формате, главное показать логику вычисления
- если дата рождения меньше месяца назад - указываем в age кол-во дней, а в age_type - дни (21 день) если дата рождения меньше года (очевидно что более 1 месяца) - указываем age кол-во целых месяцев, а в age_type - месяцы (1 месяц) в остальных случаях - указываем age кол-во целых лет, а в age_type - год (21 год)
- cp .env.example .env
- php artisan optimize
- chmod -R 777 storage/logs
- docker-compose up -d --build
- sudo rm -r docker
- docker build -t example-app .
- docker run -d -p 8000:80 --name example-app example-app