Skip to content

Repository files navigation

CongratsInator

Java Spring Boot Gradle Docker PostgreSQL MinIO

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 используется как основной способ запуска приложения

Быстрый старт (Docker)

1. Клонировать репозиторий

git clone <URL_репозитория>
cd congratsinator

2. Запуск через Docker Compose

Проект полностью запускается через Docker:

docker-compose up --build

Docker Compose поднимает:

  • PostgreSQL
  • MinIO
  • само приложение CongratsInator

3. Доступ к приложению

  • Backend API и UI: http://localhost:8080

  • MinIO Console (если нужно): http://localhost:9001


Конфигурация

Основные настройки находятся в application.yaml. Для Docker-запуска используются значения по умолчанию из compose-окружения.

PostgreSQL

  • Используется как основное хранилище данных
  • Инициализируется автоматически

MinIO

  • Используется для хранения фотографий
  • Bucket создаётся автоматически при старте приложения

Email-уведомления

  • Поддерживаются, но являются опциональными
  • Если SMTP не настроен — приложение продолжит работать без ошибок

Планировщик задач (Scheduler)

В приложении используется планировщик Spring (@Scheduled) для автоматической отправки уведомлений о предстоящих днях рождения.

Шедулер реализован в отдельном компоненте BirthdayNotificationScheduler и отвечает исключительно за запуск фоновой задачи по расписанию, не содержа бизнес-логики.

При срабатывании задачи:

  • вызывается сервис уведомлений,
  • формируется список ближайших дней рождения,
  • отправляются email-уведомления всем настроенным получателям.

Расписание выполнения задаётся через cron-выражение в конфигурации приложения и поддерживает указание временной зоны (Europe/Moscow).


Web-интерфейс

Проект содержит простой UI на чистом HTML:

  • index.html — главная страница
  • persons.html — работа со списком людей

UI использует REST API backend’а и не содержит серверной логики шаблонов.


Тестирование

Проект содержит:

  • unit-тесты сервисов
  • тесты контроллеров (@WebMvcTest)
  • изолированные тестовые данные (testdata)

Тесты написаны с акцентом на читаемость и поддержку.


Статус проекта

  • 📌 Изначально выполнен как тестовое задание
  • 📌 Поддерживается и дорабатывается как pet-project
  • 📌 Используется как пример моего подхода к backend-разработке

Автор

PeatroXD / Алексей Бобров

Java Backend Developer

About

CongratsInator is a Java 21 backend application for storing and displaying birthdays. Originally developed as a test assignment, it has been implemented and structured as a full-fledged application, serving as an example of my approach to architecture, testing, and infrastructure management.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages