go-subscription-service — REST API на Go для управления подписками.
Проект включает:
- REST API (JSON),
- Swagger/OpenAPI документацию,
- хранение данных в PostgreSQL,
- структурированное и централизованное логирование,
- контейнеризацию с помощью Docker (готовые Dockerfile / docker-compose).
- CRUDL для сущности
Subscription - Swagger UI для интерактивной документации
- Подключение к PostgreSQL (через пул соединений)
- Централизованное логирование в файл(структурированные логи)
- Конфигурация через переменные окружения
- Собирается и запускается в Docker-контейнере
- Создайте файл
.env(пример ниже). - Запустите PostgreSQL и сервис в Docker:
# Запустить через docker-compose (пример)
docker-compose up -d --build- Проверьте логи сервиса:
docker-compose logs -f service- Откройте Swagger UI:
http://localhost:8080/swagger/index.html
Порт
8080и имена контейнеров — примеры. Замените на ваши значения.
services:
app:
build: .
container_name: subscription_service
env_file:
- .env
ports:
- "${APP_PORT}:${APP_PORT}"
depends_on:
- db
restart: unless-stopped
db:
image: postgres:16-alpine
container_name: subscription__service_db
env_file:
- .env
ports:
- "${DB_PORT}:5432"
volumes:
- db_data:/var/lib/postgresql/data
restart: unless-stopped
volumes:
db_data:APP_PORT=1111
# settings for service
DB_HOST=db
DB_PORT=5432
DB_USER=user
DB_PASS=1111
DB_NAME=user
#container settings
POSTGRES_DB=database
POSTGRES_USER=user
POSTGRES_PASSWORD=1111# Установите зависимости
go mod download
# Сборка бинарника
go build -o bin/subscription-service ./cmd/server
# Запуск (через .env или переменные окружения)
./bin/subscription-serviceНиже — примерная схема endpoint-ов. Подставьте реальные пути и схемы из Swagger.
GET /api/v1/subscriptions— список подписокGET /api/v1/subscriptions/{id}— получить подпискуPOST /api/v1/subscriptions— создать подпискуPUT /api/v1/subscriptions/{id}— обновить подпискуDELETE /api/v1/subscriptions/{id}— удалить подписку
Пример запроса: создание подписки
curl -X POST http://localhost:8080/api/v1/subscriptions \
-H "Content-Type: application/json" \
-d '{
"service_name": "Sberbank",
"price": 1099.0,
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"start_date": "2025-11-10T00:00:00Z",
"end_date": "2026-11-10T00:00:00Z"
}'