/avito-shop

Avito test task for a Backend (winter 2025)

Primary LanguageGo

Avito Shop Service

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
  • Управление балансом монет
  • Покупка мерча
  • Передача монет между пользователями
  • История транзакций
  • Просмотр инвентаря

Установка и запуск

  1. Клонировать репозиторий
git clone https://github.com/icoder-new/avito-shop.git
  1. Настроить конфигурацию
cp .env.example .env
  1. Запустить сервис
docker compose up --build -d

Тестирование

Проект покрыт тремя уровнями тестов:

  1. Юнит-тесты
go test ./...
  1. Интеграционные тесты
go test ./tests/integration/...
  1. Нагрузочное тестирование
k6 run tests/load/k6script.js

API

Основные эндпоинты:

  • 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