Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/pomxark/example-app

Успешно выполненное тестовое задание. Кэширование, очередь, обработка дат, тестирование
https://github.com/pomxark/example-app

assets cors csrf docker docker-compose https laravel laravel-cors nginx node20 postgres tdd test-automation vite

Last synced: 15 days ago
JSON representation

Успешно выполненное тестовое задание. Кэширование, очередь, обработка дат, тестирование

Awesome Lists containing this project

README

        

Подробнее о проекте: 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
Необходимо описать роутер и контроллер который:

1. принимает только поля first_name, last_name и birthdate
2. Создает сущность "Пациент" через модель Patient
4. поля age(int возраст) и age_type(char день/месяц/год) заполняются в зависимости от пришеднего в контроллер birthdate(date дата рождения). Если возраст меньше месяца, то это дни. Если меньше года, то месяцы
5. созданную и сохраненную сущность отправить в 5ти минутный кеш и в очередь

Обработчик очереди и делать не надо. БД создавать и подключать тоже. Работоспособность кода не важна, главное - способ реализации

5. запросом из роута нужно выгрузить список сущностей и также задействовать кеш (если есть и не просрочился). Выгружается полями name (конкатенация first_name + last_name), дата рождения в формате (d.m.Y) и возвраст в формате "4 день" (склонять не надо)

P.S. В лоб пилить логику в контроллере - не интересно. Необходимо учесть, что контроллер должен быть максимально "тонким" и с минимальным вызовом вспомогательных сервисов вида $this->userService->age()

1. age содержит цифру согласно указанному age_type - кол-во дней, месяцев или лет
2. age_type поле в любом формате, главное показать логику вычисления
3. если дата рождения меньше месяца назад - указываем в 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

### demo-deploy (all in one)
- sudo rm -r docker
- docker build -t example-app .
- docker run -d -p 8000:80 --name example-app example-app