REST-сервис для управления заявками на выплату средств. Реализован на Django + DRF с использованием Celery для фоновой обработки задач.
- Язык: Python 3.13
- Фреймворк: Django 5.2, Django REST Framework
- Асинхронность: Celery, Redis
- База данных: PostgreSQL
- Инфраструктура: Docker, Docker Compose
- Пакетный менеджер: Poetry
- Тесты: Pytest
- Линтеры: Ruff
Для удобства все команды обернуты в Makefile. Можете с ними ознакомиться введя make help
Создайте файл .env в корне проекта:
cp .env.example .envСборка и запуск контейнеров (Web, Database, Redis, Celery Worker, Celery Beat):
make buildЗарегистрируйте аккаунт.
Откройте Hosts -> Proxy Host -> Add proxy host.
Укажите доменное имя, например, localhost, после чего установите:
Forward Hostname - app
Forward Port - 8000
(Либо можно на nginx:80, но тогда надо указывать custom locations на статику)
В проекте реализованы тесты (Pytest) с использованием моков для Celery.
Для проверки качества кода используется Ruff.
Запуск тестов
make testЗапуск линтера
make lintПосле запуска сервиса интерактивная документация доступна по адресам:
- Swagger UI: http://localhost/api/v1/swagger
Основные эндпоинты:
- GET /api/v1/payouts/ — Список выплат (поддерживает фильтрацию, поиск, сортировку).
- POST /api/v1/payouts/ — Создание выплаты (запускает асинхронную задачу).
- GET /api/v1/payouts/{id}/ — Детали выплаты.
Для развертывания проекта в Production-среде предполагается следующая архитектура:
- CI/CD Pipeline (GitHub Actions / GitLab CI):
- Автоматический запуск тестов (pytest) и линтеров (ruff) при каждом пуше.
- Сборка Docker-образа и отправка его в Container Registry.
- Инфраструктура:
- Оркестрация: Kubernetes или Docker Swarm для управления контейнерами.
- Web-сервер: Gunicorn (запущенный внутри контейнера) за обратным прокси Nginx (для статики и SSL).
- Database: PostgreSQL.
- Broker: Managed Redis (AWS ElastiCache) для очередей задач.
- Безопасность:
- Секретные данные (ключи, пароли) передаются через переменные окружения (Vault или Kubernetes Secrets). DEBUG=False обязательно.
- Мониторинг и Логирование:
- Sentry: Для отслеживания ошибок в реальном времени.
- Prometheus + Grafana: Для сбора метрик производительности.
- ELK/Loki+Promtail: Для централизованного анализа логов
- Jaeger: Для трейсинга запросов между сервисами
SmartCollectTest
├── deploy/ # Dockerfiles и скрипты запуска
├── src/
│ ├── server/ # Основной код бэкенда
│ ├── apps/ # Приложения Django (payouts и периодические задачи)
│ ├── api/ # API проекта
│ ├── tests/ # Тесты
│ ├── celery_app.py
│ ├── settings.py
│ ├── .env
│ ├── .env.example
├ ├──manage.py
├── celery_app.py
├── docker-compose.yml
├── Makefile
├── pyproject.toml # Зависимости и конфиги (Poetry, Ruff, Pytest)
└── README.md