Тестовое задание (API доски объявлений) в компанию Тапир.
PHP 8
Laravel 8 - докеризированный через Sail с небольшими допилами (XDebug из коробки в контейнере, автоматический запуск воркеров для очередей)
Верстка - Bootstrap
Очереди - Redis
Дополнительно библиотеки - intervention/image для обработки изображений, laravel/telescope для отслеживания статуса джоб, mavinoo/laravel-batch - батч insert'ы и update'ы
- API - создание и просмотр объявлений, все данные в запросах валидируются.
- Создание объявлений - отложенная загрузка изображений в очередях, наличие статусов:
- Ready - успешно загружено
- Pending - в процессе загрузки
- Failed - произошла ошибка записи, по ссылке находится не картинка или иная ошибка
- Просмотр объявлений - через API или через интерфейс на сайте (в корне)
- Артизан для просмотра всех объявлений или одного выбранного
Спулить репозиторий
Из корня проекта:
./bin/sail up
Проверим:
docker-compose ps
Должны увидеть примерно такую картину:
Name Command State Ports
-----------------------------------------------------------------------------------------------------------------
tapirapi_laravel.test_1 start-container Up 0.0.0.0:80->80/tcp, 8000/tcp
tapirapi_mailhog_1 MailHog Up 0.0.0.0:1025->1025/tcp, 0.0.0.0:8025->8025/tcp
tapirapi_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
tapirapi_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
Заходим в контейнер, инсталлим все зависимости:
docker-compose exec laravel.test bash
composer install
Копируем .env, генерим ключ, запускаем миграции:
cp .env.example .env
php artisan key:generate
php artisan migrate
После:
sudo chmod -R 777 ./
На этом этапе проект должен быть полностью работоспособным - http://0.0.0.0 покажет список всех объявлений
Для проверка статуса воркеров из контейнера прописываем:
supervisorctl status
Артизан (аналогично, из под контейнера):
php artisan adverts:show
// or
php artisan adverts:show {id}
Swagger - http://0.0.0.0/api/swagger
Список объявлений - http://0.0.0.0
API - http://0.0.0.0/api
Telescope - http://0.0.0.0/telescope