Skip to content

Repository files navigation

Subscription Management Service

Сервис управления подписками пользователей с полным жизненным циклом, историей изменений, уведомлениями и статистикой.

Возможности

Основной функционал:

  • Создание подписок с валидацией дат и стоимости
  • Управление статусом (активна, приостановлена, отменена, истекла)
  • Просмотр подписок по ID, списком, с фильтрацией
  • Отмена и приостановка с корректной обработкой переходов статусов
  • Получение активных подписок пользователя

Фильтры и поиск:

  • По пользователю (userId)
  • По сервису (serviceName)
  • По статусу (status)
  • По диапазону дат (startDate, endDate)
  • Пагинация и сортировка

Дополнительные функции:

  • Автоматический перевод истёкших подписок в статус EXPIRED (каждый час)
  • Напоминания за 7 дней до окончания подписки (ежедневно в 9:00)
  • Полная история изменений статусов
  • Статистика по статусам подписок
  • Экспорт подписок в CSV

Технический стек

  • Spring Boot 3.5.14
  • Kotlin
  • Spring Data JPA
  • PostgreSQL / H2
  • Liquibase
  • Quartz Scheduler
  • OpenAPI / Swagger
  • JUnit 5, Testcontainers
  • Docker & docker-compose

Жизненный цикл подписки

ACTIVE -> PAUSED <-> ACTIVE -> CANCELLED ACTIVE -> EXPIRED (автоматически)

Правила:

  • ACTIVE -> PAUSED, CANCELLED
  • PAUSED -> ACTIVE, CANCELLED
  • CANCELLED и EXPIRED не имеют дальнейших переходов

Установка и запуск

С использованием Docker Compose

docker-compose up --build

Приложение будет доступно на http://localhost:8080 Swagger UI: http://localhost:8080/swagger-ui.html

Локальный запуск с H2 (для разработки)

./gradlew build
./gradlew bootRun

Приложение будет доступно на http://localhost:8080 Swagger UI: http://localhost:8080/swagger-ui.html H2 Console: http://localhost:8080/h2-console

Запуск тестов

./gradlew test

REST API

Основные эндпоинты (базовый путь /api/v1/subscriptions):

  • POST / - создание подписки
  • GET /{id} - получение подписки по ID
  • GET / - список подписок с пагинацией
  • GET /filter - фильтрация подписок
  • PUT /{id}/status - обновление статуса
  • PUT /{id}/pause - приостановка
  • PUT /{id}/resume - возобновление
  • DELETE /{id} - отмена
  • GET /user/{userId}/active - активные подписки пользователя
  • GET /{id}/history - история изменений
  • GET /statistics - статистика
  • GET /export/csv - экспорт в CSV

Пример создания подписки:

POST /api/v1/subscriptions
Content-Type: application/json

{
  "userId": 1,
  "serviceName": "Netflix",
  "cost": 15.99,
  "startDate": "2026-05-24T10:00:00",
  "endDate": "2026-06-24T10:00:00"
}

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

Основные параметры в application.yaml:

  • spring.datasource.url
  • spring.jpa.hibernate.ddl-auto
  • spring.liquibase.change-log
  • spring.quartz.properties

Примечания

  • Все даты в формате ISO-8601
  • Стоимость указывается с двумя знаками после запятой
  • Поле updatedAt обновляется автоматически при изменении
  • Все изменения статусов сохраняются в истории с причиной и временем

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages