Skip to content

Repository files navigation

Project Management API

REST API для системы управления проектами и задачами на Laravel 11.

Требования

  • Docker
  • Docker compose

Запуск

  • docker compose -f compose.dev.yaml up -d
  • docker 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

API ENDPOINTS

Аутентификация

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
  • Инвалидация Кеша происходит в моделе при удалении/сохранении записей

About

Тестовое задание

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages