Skip to content

iosdevsx/SubscriptionService

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Subscriptions Service

REST-сервис для агрегации данных об онлайн-подписках пользователей.

Стек

  • Go 1.26
  • PostgreSQL 17
  • chi — HTTP-роутер
  • pgx/v5 — драйвер PostgreSQL (connection pool)
  • golang-migrate — миграции БД
  • cleanenv — конфигурация через YAML + env
  • swaggo — Swagger-документация
  • Docker Compose

Функциональность

  • CRUDL-операции над подписками
  • Подсчёт суммарной стоимости подписок за период с фильтрацией по пользователю и сервису
  • Поле end_date — последний оплаченный месяц (включительно)

Запуск

Через Docker Compose (рекомендуется)

  1. Создать .env в корне проекта:
POSTGRES_DB=subscriptions
POSTGRES_USER=admin
POSTGRES_PASSWORD=your_password
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_SSLMODE=disable

HTTP_ADDRESS=0.0.0.0:8080
CONFIG_PATH=config/docker.yaml
  1. Запустить:
docker compose up --build

Сервис поднимется на http://localhost:8080. Миграции применяются автоматически при старте.

Локально

  1. Запустить PostgreSQL и создать базу данных.

  2. Заполнить config/local.yaml:

env: "local"
http_server:
  address: "localhost:8080"
  timeout: 4s
  idle_timeout: 30s
db_server:
  host: "localhost"
  port: "5432"
  user: "admin"
  password: "your_password"
  database_name: "subscriptions"
  sslmode: "disable"
  1. Запустить:
CONFIG_PATH=config/local.yaml go run ./cmd/app

API

Swagger UI доступен по адресу: http://localhost:8080/swagger/index.html

Эндпоинты

Метод Путь Описание
POST /subscriptions Создать подписку
GET /subscriptions Список всех подписок
GET /subscriptions/{id} Получить подписку по ID
PUT /subscriptions/{id} Обновить подписку
DELETE /subscriptions/{id} Удалить подписку
GET /subscriptions/total Суммарная стоимость за период

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

curl -X POST http://localhost:8080/subscriptions \
  -H "Content-Type: application/json" \
  -d '{
    "service_name": "Yandex Plus",
    "price": 400,
    "user_id": "60601fee-2bf1-4721-ae6f-7636e79a0cba",
    "start_date": "07-2025",
    "end_date": "09-2025"
  }'

Пример подсчёта стоимости

curl "http://localhost:8080/subscriptions/total?start_date=07-2025&end_date=10-2025&user_id=60601fee-2bf1-4721-ae6f-7636e79a0cba"

Параметры user_id и service_name — опциональные фильтры. Период задаётся в формате MM-YYYY, start_date включается, end_date исключается.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors