CongratsInator — Java 21 backend-приложение для хранения и отображения дней рождения. Проект был выполнен как тестовое задание, но оформлен и реализован как полноценное приложение и может использоваться как пример моего подхода к архитектуре, тестированию и работе с инфраструктурой.
Приложение предоставляет REST API и простой веб-интерфейс для работы с данными о днях рождения.
- Хранение информации о людях и их днях рождения
- Просмотр:
- всех записей
- сегодняшних дней рождения
- ближайших дней рождения (на N дней вперёд)
- Добавление, редактирование и удаление записей
- Загрузка и отображение фотографий именинников
- Хранение изображений в MinIO
- Отправка email-уведомлений о предстоящих днях рождения (опционально)
- Java 21
- Spring Boot 4
- Spring Web (REST API)
- Spring Data JPA
- PostgreSQL
- MinIO (объектное хранилище для фотографий)
- Gradle 9 (Groovy DSL)
- Docker / Docker Compose
- JUnit 5, Mockito, MockMvc (тестирование)
- REST API используется как основной способ взаимодействия с backend
- Простые HTML-страницы (
index.html,persons.html) используются как UI
(без Thymeleaf и серверного шаблонизатора) - Бизнес-логика отделена от контроллеров
- Для тестов используется собственный слой
testdataдля читаемости и поддержки - Docker используется как основной способ запуска приложения
git clone <URL_репозитория>
cd congratsinatorПроект полностью запускается через Docker:
docker-compose up --buildDocker Compose поднимает:
- PostgreSQL
- MinIO
- само приложение CongratsInator
-
Backend API и UI:
http://localhost:8080 -
MinIO Console (если нужно):
http://localhost:9001
Основные настройки находятся в application.yaml.
Для Docker-запуска используются значения по умолчанию из compose-окружения.
- Используется как основное хранилище данных
- Инициализируется автоматически
- Используется для хранения фотографий
- Bucket создаётся автоматически при старте приложения
- Поддерживаются, но являются опциональными
- Если SMTP не настроен — приложение продолжит работать без ошибок
В приложении используется планировщик Spring (@Scheduled) для автоматической отправки уведомлений о предстоящих днях рождения.
Шедулер реализован в отдельном компоненте BirthdayNotificationScheduler и отвечает исключительно за запуск фоновой задачи по расписанию, не содержа бизнес-логики.
При срабатывании задачи:
- вызывается сервис уведомлений,
- формируется список ближайших дней рождения,
- отправляются email-уведомления всем настроенным получателям.
Расписание выполнения задаётся через cron-выражение в конфигурации приложения и поддерживает указание временной зоны (Europe/Moscow).
Проект содержит простой UI на чистом HTML:
index.html— главная страницаpersons.html— работа со списком людей
UI использует REST API backend’а и не содержит серверной логики шаблонов.
Проект содержит:
- unit-тесты сервисов
- тесты контроллеров (
@WebMvcTest) - изолированные тестовые данные (
testdata)
Тесты написаны с акцентом на читаемость и поддержку.
- 📌 Изначально выполнен как тестовое задание
- 📌 Поддерживается и дорабатывается как pet-project
- 📌 Используется как пример моего подхода к backend-разработке
PeatroXD / Алексей Бобров
Java Backend Developer