my_CQRS

0

Описание

Пример паттерна CQRS на RAW SQL psql и fastapi

Языки

  • Python100%
2 года назад
2 года назад
2 года назад
2 года назад
2 года назад
2 года назад
README.md

CQRS Microservices with FastAPI and PostgreSQL

Описание

Этот проект реализует архитектурный подход CQRS (Command Query Responsibility Segregation) с использованием FastAPI и PostgreSQL. Проект состоит из двух микросервисов:

  • Users Service — отвечает за создание и обновление пользователей (Командная сторона).
  • Profiles Service — отвечает за чтение профилей пользователей (Читательская сторона).

Связь между сервисами осуществляется через генерацию событий. Сервис Profiles подписывается на события от Users для создания и обновления профилей.

Основные технологии

  • FastAPI — веб-фреймворк для создания API.
  • asyncpg — асинхронная библиотека для работы с PostgreSQL.
  • PostgreSQL — реляционная база данных для хранения данных пользователей и профилей.
  • Asyncio Queue — имитация брокера сообщений для обмена событиями между сервисами.

Установка

  1. Клонируйте репозиторий:

  2. Перейдите в директорию проекта:

  3. Убедитесь, что у вас установлен Python 3.7+ и PostgreSQL.

  4. Создайте и активируйте виртуальное окружение:

  5. Установите зависимости:

  6. Настройте PostgreSQL и создайте базу данных:

    • Создайте базу данных
      mydatabase
      .
    • Настройте доступы пользователя и пароль в соответствии с вашими настройками (по умолчанию это указано в коде).

Запуск

Users Service (порт 8000)

Запустите сервис для управления пользователями:

Profiles Service (порт 8001)

Запустите сервис для чтения и обновления профилей:

Теперь оба сервиса запущены и могут взаимодействовать друг с другом.

API Методы

Users Service

  1. Создание пользователя:

    • POST
      /users/
    • Пример тела запроса:
  2. Обновление пользователя:

    • PUT
      /users/{user_id}
    • Пример тела запроса:

Profiles Service

  1. Получение профиля пользователя:
    • GET
      /profiles/{user_id}
    • Пример ответа:

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

cqrs-fastapi-postgres/ │ ├── users_service.py # Командный сервис для управления пользователями ├── profiles_service.py # Читательский сервис для работы с профилями ├── db_utils.py # Общие функции для работы с базой данных и событиями ├── requirements.txt # Зависимости проекта └── README.md # Описание проекта

Как работает CQRS

  • Users Service отвечает за создание и обновление пользователей. После создания/обновления, он отправляет соответствующее событие (
    UserCreated
    или
    UserUpdated
    ) в очередь событий.
  • Profiles Service прослушивает очередь событий и создает или обновляет профиль пользователя в своей базе данных в зависимости от типа события.

Лицензия

Этот проект находится под лицензией MIT.