Skip to content

Repository files navigation

PaymentSystem Example

Простой пример сервиса, который может отвечать за работу с платежами в вашем проекте.

Используемые технологии

  • Python: 3.11.5
  • NATS
  • FastStream
  • Dishka
  • SQLAlchemy
  • PostgreSQL
  • Alembic
  • Docker

Запуск

Примечание: Для запуска используется Docker.

  1. Клонируйте репозиторий на свой компьютер, используя эту команду:
  2. git clone https://github.com/ZoRex15/PaymentSystemExample.git
  3. Создайте файл .settings.yml в папке config_dist по примеру example_settings.yml.
  4. Введите команду docker compose up.
  5. После запуска примените миграции к БД, используя команду:
  6. alembic upgrade head

Пример запросов к сервису используя NATS CLI

  • Примечание 1: Пример запросов показан на Windows в CMD.
  • Примечание 2: В запросах не используйте counteragent_id, который равен одному, так как этот пользователь зарезервирован системой как CASH_BOOK.

Запрос на пополнение баланса:

nats request payments.counteragent.balance.replenishment "{\"counteragent_id\": 2, \"amount\": 350}" -H "X-Idempotency-Key:f47ac10b-58cc-4372-a567-0e02b2c3d479"

Запрос который снимает деньги с баланса:

nats request payments.counteragent.balance.withdrawal "{\"counteragent_id\": 2, \"amount\": 50}" -H "X-Idempotency-Key:f47ac10b-58cc-4372-a567-0e02b2c3d472"

Запрос на просмотр баланса:

nats request payments.counteragent.balance "{\"counteragent_id\": 2}"

Структура проекта

📁 PaymentSystemExample/
├── 📁 app/
│   ├── __main__.py
│   ├── 📁 core/
│   │   ├── __init__.py
│   │   ├── 📁 interfaces/
│   │   │   ├── __init__.py
│   │   │   └── 📁 repository/
│   │   │       ├── __init__.py
│   │   │       ├── base.py
│   │   │       ├── posting.py
│   │   │       └── transaction_log.py
│   │   ├── 📁 models/
│   │   │   ├── __init__.py
│   │   │   ├── 📁 dto/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── posting.py
│   │   │   │   └── transaction_log.py
│   │   │   ├── 📁 enum/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── db.py
│   │   │   │   └── reply.py
│   │   │   └── 📁 messages/
│   │   │       ├── __init__.py
│   │   │       ├── incoming_messages.py
│   │   │       └── outgoing_messages.py
│   │   └── 📁 service/
│   │       ├── __init__.py
│   │       ├── payments.py
│   │       └── posting.py
│   └── 📁 infrastructure/
│       ├── __init__.py
│       ├── 📁 broker/
│       │   ├── __init__.py
│       │   ├── 📁 consumers/
│       │   │   ├── __init__.py
│       │   │   ├── payment.py
│       │   │   └── payment_info.py
│       │   └── 📁 middlewares/
│       │       ├── __init__.py
│       │       ├── check.py
│       │       └── logging.py
│       ├── 📁 config/
│       │   ├── __init__.py
│       │   ├── logging.py
│       │   ├── main.py
│       │   ├── 📁 models/
│       │   │   ├── __init__.py
│       │   │   └── models.py
│       │   └── 📁 service/
│       │       ├── __init__.py
│       │       └── parsers.py
│       ├── 📁 db/
│       │   ├── __init__.py
│       │   ├── holder.py
│       │   ├── 📁 migration/
│       │   │   ├── README
│       │   │   ├── env.py
│       │   │   ├── script.py.mako
│       │   │   └── 📁 versions/
│       │   │       ├── 0d59302e6c47_db.py
│       │   ├── 📁 models/
│       │   │   ├── __init__.py
│       │   │   ├── base.py
│       │   │   ├── posting.py
│       │   │   └── transaction_log.py
│       │   └── 📁 repository/
│       │       ├── __init__.py
│       │       ├── base.py
│       │       ├── posting.py
│       │       └── transaction_log.py
│       └── 📁 di/
│           ├── __init__.py
│           ├── config.py
│           ├── db.py
│           └── fast_stream.py
├── 📁 config_dist/
│   ├── .settings.yml
│   ├── example_settings.yml
│   └── logging.yml
├── 📁 nats_docker_data/
│   ├── 📁 config/
│   │   └── server.conf
│   └── 📁 data/
│       └── 📁 jetstream/
├── alembic.ini
├── Dockerfile
├── docker-compose.yml
└── requirements.txt

📁 app/

Это основная папка приложения.

📁 core/

Содержит ключевые компоненты и бизнес-логику.

  • 📁 interfaces/: Определяет контракты для взаимодействия между различными компонентами.
  • 📁 interfaces/repository/: Содержит интерфейсы для доступа к данным.
    • base.py: Базовый интерфейс, от которого наследуются другие.
    • posting.py: Интерфейсы для операций с таблицей Posting.
    • transaction_log.py: Интерфейсы для операций с таблицей TransactionLog.
  • 📁 models/: Содержит модели данных и их представления.
  • 📁 models/dto/: Содержит DTO для передачи данных.
    • posting.py: DTO для таблицы Posting.
    • transaction_log.py: DTO для TransactionLog.
  • 📁 models/enum/: Содержит перечисления.
    • db.py: Перечисления, связанные с базой данных.
    • reply.py: Перечисления для ответов системы.
  • 📁 service/: Содержит бизнес-логику и сервисы.
    • payments.py: Логика обработки платежей.
    • posting.py: Логика обработки запросов, связанных с таблицей Posting.

📁 infrastructure/

Содержит инфраструктурные компоненты, такие как конфигурация, БД и т. д.

  • 📁 broker/: Компоненты для работы с брокером сообщений.
    • 📁 consumers/: Реализации потребителей сообщений.
      • payment.py: Обработка запросов, связанных с платежами.
      • payment_info.py: Обработка запросов на получение информации о платежах.
    • 📁 middlewares/: Промежуточные обработчики.
      • check.py: Проверка запроса на наличие параметра reply.
      • logging.py: Логирование событий.
  • 📁 config/: Логика работы с конфигурационными файлами.
    • logging.py: Настройка логирования.
    • main.py: Парсинг файла с настройками.
  • 📁 db/: Компоненты для работы с базой данных.
    • holder.py: Класс, который содержит все репозитории.
    • 📁 migration/: Миграции для БД.
    • 📁 models/: Модели таблиц для БД.
    • 📁 repository/: Реализации репозиториев для работы с данными.
  • 📁 di/: Компоненты для внедрения зависимостей.
    • config.py: Провайдер для создания конфигурации.
    • db.py: Провайдер для создания зависимостей для работы с БД.
    • fast_stream.py: Провайдер для создания зависимостей FastStream.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages