Спроектировать и реализовать REST‑сервис для агрегации данных об онлайн‑подписках пользователей.
- Выставить HTTP‑ручки для CRUDL‑операций над записями о подписках. Каждая запись содержит:
- Название сервиса, предоставляющего подписку.
- Стоимость месячной подписки в рублях.
- ID пользователя в формате UUID.
- Дата начала подписки (месяц и год).
- Опционально дата окончания подписки.
- Выставить HTTP‑ручку для подсчёта суммарной стоимости всех подписок за выбранный период с фильтрацией по ID пользователя и названию подписки.
- СУБД — PostgreSQL. Должны быть миграции для инициализации базы данных.
- Покрыть код логами.
- Вынести конфигурационные данные в
.env/.yaml‑файл. - Предоставить Swagger‑документацию к реализованному API.
- Запуск сервиса с помощью
docker compose.
- Проверка существования пользователя не требуется. Управление пользователями вне зоны ответственности вашего сервиса.
- Стоимость любой подписки — целое число рублей, копейки не учитываются.
{
"service_name": "Yandex Plus",
"price": 400,
"user_id": "60601fee-2bf1-4721-ae6f-7636e79a0cba",
"start_date": "07-2025"
}-
С Docker Compose:
- Скопируйте файл с паролями:
cp docker.env.example docker.env - Отредактируйте
docker.envи установите безопасные пароли - Соберите и запустите сервисы:
docker compose up --build
- Миграции применяются контейнером
migrateиз папкиschema(up/down SQL). - Swagger:
http://localhost:8000/swagger(либо используйте любой Swagger Viewer). API —/api/v1.
- Скопируйте файл с паролями:
-
Локально:
- Настройте переменную окружения
APP_DATABASE_URL(илиDATABASE_URL). Пример:postgres://app:app@localhost:5432/subscriptions?sslmode=disable. - Примените миграции из папки
schema(*.up.sql/*.down.sql) любым инструментом (например, migrate). - Запустите сервер:
go run ./cmd/subscriptionservice
- Настройте переменную окружения