Высокопроизводительный REST API на Go для управления подписками пользователей с полной документацией и тестированием.
Это проект демонстрирует лучшие практики Go-разработки включая чистую архитектуру, полное тестирование, Docker контейнеризацию и Swagger документацию.
- 🏗️ Чистая архитектура с разделением ответственности
- 🧪 Полное тестовое покрытие (unit, integration, load tests)
- ⚡ Высокая производительность - 2689 запросов/сек
- 🐳 Docker готовность с многоэтапной сборкой
- 📚 Swagger документация с интерактивным UI
- 🔒 Типизированная обработка ошибок и валидация
- 📊 Подробное логирование запросов
- 🎯 PostgreSQL с миграциями
cmd/
├── api/ # Главный вход приложения
└── migrate/ # Утилита миграций
internal/
├── config/ # Управление конфигурацией
├── database/ # Подключение к БД
├── errors/ # Типизированные ошибки
├── handler/ # HTTP обработчики
├── middleware/ # Middleware (логирование, CORS)
├── model/ # Модели данных
├── repository/ # Слой доступа к данным
├── response/ # Стандартизация API ответов
├── service/ # Бизнес-логика
└── validation/ # Валидация входных данных
tests/ # Интеграционные и нагрузочные тесты
docs/ # Swagger документация
migrations/ # SQL миграции
- Go 1.25+
- PostgreSQL 15+
- Docker & Docker Compose
- Клонирование репозитория
git clone <repository-url>
cd Effective_Mobile_GO- Настройка окружения
cp .env.example .env
# Настройте параметры подключения к БД в .env- Запуск с Docker Compose
docker-compose up -d- Запуск миграций
go run ./cmd/migrate- Запуск приложения
go run ./cmd/apiСервис будет доступен по адресу: http://localhost:8080
Откройте в браузере: http://localhost:8080/swagger/
| Метод | Эндпоинт | Описание |
|---|---|---|
| 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": "Netflix",
"price": 899,
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"start_date": "01-2026",
"end_date": "12-2026"
}'Расчет общей стоимости:
curl "http://localhost:8080/subscriptions/total?user_id=550e8400-e29b-41d4-a716-446655440000&period_start=01-2026&period_end=12-2026"go test ./... -vgo test ./internal/validation -v
go test ./internal/handler -vgo test ./tests -vgo test ./tests -v -run TestConcurrentSubscriptions- Валидация: 25 тестов - 100% пройдено
- Обработчики: 3 теста - 100% пройдено
- Все CRUD операции - 100% пройдено
- Расчет стоимости - 100% пройдено
- 50 одновременных запросов: 100% успех
- Производительность: 2689 запросов/сек
- Время ответа: ~18мс
# База данных
DB_HOST=localhost
DB_PORT=5432
DB_USER=admin
DB_PASSWORD=superpassword
DB_NAME=auth_system
DB_SSLMODE=disable
# Сервер
SERVER_PORT=8080
SERVER_READ_TIMEOUT=30s
SERVER_WRITE_TIMEOUT=30sCREATE TABLE subscriptions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
service_name VARCHAR(100) NOT NULL,
price INTEGER NOT NULL CHECK (price > 0),
user_id UUID NOT NULL,
start_date DATE NOT NULL,
end_date DATE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);idx_subscriptions_user_id- для фильтрации по пользователямidx_subscriptions_service_name- для поиска по названиюidx_subscriptions_start_date- для фильтрации по датам
go build -o main ./cmd/api
./maindocker build -t effective-mobile-go .
docker run -p 8080:8080 effective-mobile-godocker-compose up --build{
"level": "info",
"msg": "Request completed: GET /subscriptions - Status: 200 - Duration: 1.2ms - ID: uuid"
}- Время ответа каждого запроса
- HTTP статус коды
- Уникальные ID запросов для трассировки
Проект следует принципам чистой архитектуры:
- Handler - обработка HTTP запросов
- Service - бизнес-логика
- Repository - доступ к данным
- Model - модели данных
- Validation - валидация входных данных
- Создать модель в
internal/model/ - Добавить валидацию в
internal/validation/ - Реализовать бизнес-логику в
internal/service/ - Добавить репозиторий в
internal/repository/ - Создать обработчик в
internal/handler/ - Зарегистрировать роут в
cmd/api/main.go
- Fork репозитория
- Создать feature ветку
- Внести изменения
- Написать тесты
- Запустить все тесты
- Создать Pull Request
MIT License
Разработано с любовью к Go и чистому коду.
✅ Все требования выполнены:
- CRUD операции для подписок
- Расчет суммарной стоимости
- PostgreSQL с миграциями
- Покрытие логами
- Конфигурация в .env
- Swagger документация
- Docker Compose
✅ Дополнительные улучшения:
- Чистая архитектура
- Полное тестирование
- Высочайшая производительность
- Типизированные ошибки
- Middleware для логирования и CORS
- Нагрузочные тесты