Skip to content

BenderEg/luna

Repository files navigation

🚀 Luna Payment Service

🧰 Технологии

  • 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

☠️ Dead Letter Queues (DLQ)

В RabbitMQ две DLQ: для непроведенных платяжей и для неотправленных уведомлений.

About

Mock payment processing via RabbitMQ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors