{"id":22614472,"url":"https://github.com/pomxark/example-app","last_synced_at":"2026-04-04T21:32:55.790Z","repository":{"id":172941011,"uuid":"649137125","full_name":"POMXARK/example-app","owner":"POMXARK","description":"Успешно выполненное тестовое задание. Кэширование, очередь, обработка дат, тестирование","archived":false,"fork":false,"pushed_at":"2023-10-03T17:30:49.000Z","size":813,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-03T16:22:30.276Z","etag":null,"topics":["assets","cors","csrf","docker","docker-compose","https","laravel","laravel-cors","nginx","node20","postgres","swagger-ui","tdd","test-automation","vite"],"latest_commit_sha":null,"homepage":"https://example-app-auxb.onrender.com/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/POMXARK.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-03T22:38:46.000Z","updated_at":"2024-06-10T07:21:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"5aad03c4-4dda-46c9-a59e-66340c82d098","html_url":"https://github.com/POMXARK/example-app","commit_stats":null,"previous_names":["pomxark/example-app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/POMXARK/example-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/POMXARK%2Fexample-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/POMXARK%2Fexample-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/POMXARK%2Fexample-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/POMXARK%2Fexample-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/POMXARK","download_url":"https://codeload.github.com/POMXARK/example-app/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/POMXARK%2Fexample-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31415110,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["assets","cors","csrf","docker","docker-compose","https","laravel","laravel-cors","nginx","node20","postgres","swagger-ui","tdd","test-automation","vite"],"created_at":"2024-12-08T18:10:07.928Z","updated_at":"2026-04-04T21:32:55.681Z","avatar_url":"https://github.com/POMXARK.png","language":"PHP","readme":"Подробнее о проекте: https://github.com/POMXARK/example-app/blob/master/DOCS.md\n\nLaravel Framework 9.52.15 (PHP 8.1.2-1ubuntu2.11) node 20\n\n### Тестовое задание\n\nНа вакансию: https://khabarovsk.hh.ru/vacancy/81007713?hhtmFrom=chat\n\n\nНеобходимо попробовать максимально задействовать возможности фреймворка по канонам паттерна MVC.\nЕсть сущность \"Пациент\" с полями first_name, last_name, birthdate, age, age_type\nНеобходимо описать роутер и контроллер который:\n\n1. принимает только поля first_name, last_name и birthdate\n2. Создает сущность \"Пациент\" через модель Patient\n4. поля age(int возраст) и age_type(char день/месяц/год) заполняются в зависимости от пришеднего в контроллер birthdate(date дата рождения). Если возраст меньше месяца, то это дни. Если меньше года, то месяцы\n5. созданную и сохраненную сущность отправить в 5ти минутный кеш и в очередь\n\nОбработчик очереди и делать не надо. БД создавать и подключать тоже. Работоспособность кода не важна, главное - способ реализации\n\n5. запросом из роута нужно выгрузить список сущностей и также задействовать кеш (если есть и не просрочился). Выгружается полями name (конкатенация first_name + last_name), дата рождения в формате (d.m.Y) и возвраст в формате \"4 день\" (склонять не надо)\n\nP.S. В лоб пилить логику в контроллере - не интересно. Необходимо учесть, что контроллер должен быть максимально \"тонким\" и с минимальным вызовом вспомогательных сервисов вида $this-\u003euserService-\u003eage()\n\n1. age содержит цифру согласно указанному age_type - кол-во дней, месяцев или лет\n2. age_type поле в любом формате, главное показать логику вычисления\n3. если дата рождения меньше месяца назад - указываем в age кол-во дней, а в age_type - дни (21 день)\n   если дата рождения меньше года (очевидно что более 1 месяца) - указываем age кол-во целых месяцев, а в age_type - месяцы (1 месяц)\n   в остальных случаях - указываем age кол-во целых лет, а в age_type - год (21 год)\n\n\n### Запуск\n- cp .env.example .env\n- php artisan optimize\n- chmod -R 777 storage/logs\n- docker-compose up -d --build\n\n### demo-deploy (all in one)\n- sudo rm -r docker\n- docker build -t example-app .\n- docker run -d -p 8000:80 --name example-app example-app\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpomxark%2Fexample-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpomxark%2Fexample-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpomxark%2Fexample-app/lists"}