● 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