Backend сервис внутреннего магазина мерча Авито. Позволяет сотрудникам приобретать мерч за внутреннюю валюту и обмениваться монетами.
- Go 1.22
- PostgreSQL 13
- Docker & Docker Compose
- JWT для авторизации
- Gin Web Framework
- Zap Logger
- K6 для нагрузочного тестирования
Проект реализован с использованием Clean Architecture:
├── api/ # Обработка HTTP-запросов
│ ├── handler/ # Handlers и middleware
├── internal/ # Бизнес-логика и инфраструктура
│ ├── config/ # Конфигурация приложения
│ ├── service/ # Бизнес-логика
│ ├── storage/ # Работа с БД
│ ├── models/ # Бизнес-модели
│ └── dto/ # Data Transfer Objects
├── pkg/ # Общие утилиты
└── tests/ # Тестирование
- Авторизация пользователей через JWT
- Управление балансом монет
- Покупка мерча
- Передача монет между пользователями
- История транзакций
- Просмотр инвентаря
- Клонировать репозиторий
git clone https://github.com/icoder-new/avito-shop.git- Настроить конфигурацию
cp .env.example .env- Запустить сервис
docker compose up --build -dПроект покрыт тремя уровнями тестов:
- Юнит-тесты
go test ./...- Интеграционные тесты
go test ./tests/integration/...- Нагрузочное тестирование
k6 run tests/load/k6script.jsОсновные эндпоинты:
POST /api/auth- Авторизация пользователяGET /api/info- Информация о балансе и инвентареPOST /api/sendCoin- Передача монетGET /api/buy/{item}- Покупка мерча
- RPS: 1000 запросов в секунду
- Latency: p99 < 50ms
- Доступность: 99.99%
- База рассчитана на 100k пользователей
- Хеширование паролей (Argon2)
- JWT авторизация
- Защита от SQL-инъекций
- Валидация входных данных
- Структурированное логирование (Zap)
- Трейсинг запросов через request ID
Для разработки потребуется:
- Go 1.22+
- Docker и Docker Compose
- PostgreSQL 13