Создайте простое RESTful API веб-сервиса с использованием Spring Boot. Нужно реализовать приложение для управления списком дел (TODO).
- База данных: Использовать
PostgreSQL. - Миграции: Настроить миграции с помощью
LiquibaseилиFlyway. Миграции должны автоматически применяться при старте приложения и в тестах. - Работа с БД: Не использовать
Hibernate/JPA, вместо этого использоватьJdbcTemplate. - Тестирование:
- Покрыть приложение юнит и интеграционными тестами.
- Интеграционные тесты для всех контроллеров через
JSON Assert. - Настроить тестовую БД через
Testcontainers. - Использовать
@DataJpaTestдля грязного контекста БД. - Применять
@Sqlдля подготовки данных. - Все тесты снабдить
@DisplayNameдля читаемости логов.
- Кеширование: Использовать
Spring CacheиRedis. - Документация: Описать API с помощью
OpenAPI/Swaggerи вынести описание эндпоинтов в отдельный интерфейс. - Валидация: Обеспечить валидацию всех входящих
DTO. - Пагинация: Реализовать limit-offset пагинацию для списка дел.
- Обработка ошибок:
- Добавить глобальный
ExceptionHandlerдля обработки ошибок. - Написать тесты на обработку ошибок.
- Добавить глобальный
- Ответы API: Не использовать
ResponseEntityнапрямую. - Маппинг: Использовать
MapStructдля преобразования Entity в DTO. - Мониторинг:
- Подключить
Spring Boot Actuator. - Открыть доступ к эндпоинтам `/actuator/health`, `/actuator/metrics`, `/actuator/info`.
- Создать минимум одну кастомную метрику с использованием
Micrometer(например, количество выполненных задач).
- Подключить
- Сделать fork данного проекта.
- Создать ветку
devв своём репозитории и работать в ней. - После завершения работы открыть Pull Request в
masterсвоего репозитория. - Назначить ментора ревьювером на PR.
- Отправить ссылку на PR в Telegram-чат ментору.
| Технология | Описание |
|---|---|
| Java | 17+ |
| Spring Boot | 3.x |
| PostgreSQL | Latest |
| Liquibase/Flyway | Latest |
| Redis | Latest |
| Testcontainers | Latest |
| MapStruct | Latest |
| Swagger / OpenAPI | Latest |
| Spring Actuator | Latest |
- Код должен быть чистым и структурированным.
- Пакеты следует логически организовать:
controller,service,repository,dto,config,exceptionи т.д. - Бизнес-ошибки должны обрабатываться централизованно через единый ExceptionHandler.