REST API для системы управления проектами и задачами на Laravel 11.
- Docker
- Docker compose
docker compose -f compose.dev.yaml up -ddocker compose -f compose.dev.yaml exec workspace php artisan migrate- миграцииdocker compose -f compose.dev.yaml exec workspace php artisan db:seed- для заполнения базы данных
docker compose -f compose.dev.yaml exec workspace bash
composer install
npm install
npm run dev
docker compose -f compose.dev.yaml exec workspace php artisan test
docker compose -f compose.dev.yaml exec workspace php artisan create:user
POST /api/login
POST /api/logout
GET /api/projects # Список проектов с пагинацией
POST /api/projects # Создание проекта
GET /api/projects/{id} # Получение проекта
PUT /api/projects/{id} # Обновление проекта
DELETE /api/projects/{id} # Удаление проекта
GET /api/tasks # Список задач с фильтрацией и сортировкой
POST /api/tasks # Создание задачи
GET /api/tasks/{id} # Получение задачи
PUT /api/tasks/{id} # Обновление задачи
DELETE /api/tasks/{id} # Удаление задачи
status - статус задачи
priority - приоритет
project_id - ID проекта
assigned_user_id - ID исполнителя
deadline_from - дедлайн от
deadline_to - дедлайн до
sort_by - поле сортировки (created_at, priority, deadline)
sort_direction - направление (asc, desc)
GET /api/tasks/{task}/comments # Список комментариев задачи
POST /api/tasks/{task}/comments # Создание комментария
DELETE /api/comments/{id} # Удаление комментария
- Бизнес логика вынесена в отдельные Сервисы
- Жадная подгрузка для решения проблемы N+1
- Resource для трансформации данных
- Есть event по требованию ТЗ, все что он делает -
echo "Task created" - Middleware для логирования и для RBAC
- Кеширование /api/projects и инвалидация кеша при изменениях в таблице
- Для кеширования используется Redis
- Использование тегов для управления кешем
- Докеризация всех контейнеров для более удобного разворачивания проекта
- Пагинация списков
- Использование реквестов для валидации данных
- Для Status используются enum'ы для более удобного чтения
- Приоритет - целочисленное значение. Чем выше значение, тем выше приоритет
- Для некоторых методов контроллеров используются свои собственные Реквесты (для более гибкой обработки)
- Использование Policy и Gate для доступов
- Гораздо удобнее запускать проект через докер, чем отдельно настраивать каждую программу. Файлы для запуска Ларавела на Nginx брал здесь - https://github.com/dockersamples/laravel-docker-examples/tree/main
- Инвалидация Кеша происходит в моделе при удалении/сохранении записей