- FastAPI — API слой
- SQLAlchemy — работа с БД
- Alembic — миграции
- PostgreSQL — основная база данных
- RabbitMQ + FastStream — асинхронные очереди
- Docker Compose — оркестрация сервисов
Для запуска приложения выполнить команду: make up-local Она создаст необходимые переменные (.env) и список тестовых API-ключей.
Сваггер доступен по ссылке: http://127.0.0.1:8000/doc
Для создания тестового платяжа:
-
в заголовок "X-API-Key" вписать один из тестовых ключей, например, 12355;
-
в заголовоке "Idempotency-Key" заполнить ключ-идемпотентности, например, qwerty;
-
в тело запроса вставить:
{ "amount": 100, "currency": "RUB", "description": "Оплата подписки", "webhook_url": "http://backend:8000/api/v1/notifications" }
Для проверки в логах (docker logs luna_api) должна появится запись: "Notification received: ... "
Графический интерфейс RabbitMQ доступен по ссылке: http://127.0.0.1:15672
💰 Платежи Повторы реализованы через отдельную очередь RabbitMQ с TTL Используется retry-механизм через DLQ
🔔 Уведомления Повторы реализованы с использованием библиотеки backoff Обрабатываются временные ошибки (timeouts, сетевые сбои)
- Используется подход с очередями (payments.new);
- Отправка событий реализована через asyncio.Task внутри FastAPI;
- Consumer можно масштабировать независимо;
- Предполагается что платежный шлюз поддерживает идемпотентность Idempotency-Key.
Добавлен тестовый endpoint для приёма webhook'ов: POST /api/v1/notifications
В RabbitMQ две DLQ: для непроведенных платяжей и для неотправленных уведомлений.