● CI passingJava 21Spring Boot 3.3PostgreSQLFlywayDocker

REST API для управления проектами и задачами

Бэкенд уровня production: JWT-аутентификация, изоляция данных пользователей, динамические фильтры с пагинацией, статистика по проектам, ошибки в формате RFC 7807 и интеграционные тесты в CI.

GET/api/projects/7/tasks?status=IN_PROGRESS&sort=dueDate,asc

# Authorization: Bearer eyJhbGciOiJIUzI1NiJ9…
{
  "items": [{
    "id": 42,
    "title": "Интеграция оплаты LiqPay",
    "status": "IN_PROGRESS",
    "priority": "URGENT",
    "dueDate": "2026-11-15",
    "overdue": false
  }],
  "page": 0, "size": 20, "total": 1, "totalPages": 1
}

GET/api/projects/7/stats

{
  "total": 5,
  "byStatus": { "TODO": 2, "IN_PROGRESS": 1, "REVIEW": 1, "DONE": 1 },
  "overdue": 1,
  "completionPercent": 20
}

PATCH/api/tasks/999 · чужая задача

{
  "title": "Не найдено",
  "status": 404,
  "detail": "Задача 999 не найдена"
}
🔐 JWT + BCrypt

Stateless-сессии на OAuth2 Resource Server, токен с claim uid.

🛡 Защита от IDOR

Любой запрос к чужому id возвращает 404, данные изолированы.

🔎 Фильтры

JPA Specifications: статус, приоритет, поиск, сортировка, пагинация.

✅ 7 интеграционных тестов

MockMvc + H2, прогоняются в GitHub Actions на каждый push.

Архитектура

Controller→Service→Repository (Spring Data JPA)→PostgreSQL + Flyway·DTO records·ProblemDetail·Swagger UI