Skip to content

Latest commit

 

History

History
57 lines (42 loc) · 3.38 KB

README.md

File metadata and controls

57 lines (42 loc) · 3.38 KB

Универсальный шаблон микросервиса на FastAPI

Порядок добавления новой сущности в проект:

/db/tables

  • Добавляем новую модель в имеющийся(или новый) пакет

/db/tables/__init__.py

  • Добавляем созданную модель в init файл пакета tables

Сгенерировать миграции для новой таблицы

  • В корневой директории приложения (src) выполнить команду
  • python3 -m migrations.runner revision --autogenerate - для генерации миграций после генерации миграций желательно удостоверится, что они сгенерированы верно (migrations/versions)
  • python3 -m migrations.runner upgrade head - для применения миграций к БД

/services

interfaces.py:
  • Создаем интерфейс(I) для доступа сервиса к репозиториям в файле interfaces.py, Здесь должны быть сами интерфейсы и класс (UoW), в котором определено, какие репозитории с какими методами принимает сервис.

/repositories

  • Создаем репозиторий в имеющимся (или новом) пакете, для этого: Создаем репозиторий - он наследуется от базового репозитория и интерфейса(I) из пункта выше Не забыть переопределить в новом репозитории метод is_exists

/services/uow.py

  • Добавляем новое наследование (UoW - созданный выше) в имеющийся в файле класс.
  • Определяем в имеющемся классе новое свойство, в котором инициализируется репозиторий и в него прокидывается сессия

/сontrollers/dependencies.py

  • добавляем в функцию get_uow инициализации uow класса новый репозиторий

/services

  • Создаем сервис, функция init которого принимает класс (UoW)
  • Определяем необходимые ошибки бизнес логики в файле errors.py в пакете нашего сервиса

/routers/v1/endpoint_name/dependencies.py

  • добавить функцию get_service_name возвращающую инициализированный сервис для последующего внедрения зависимости в app

/application/app.py

  • регистрируем зависимость в приложении в функции app_setup
  • app.dependencies_overrides[ServiceName] = get_service_name

/dto/

  • Добавляем новую pydantic модель, (в новый или имеющийся пакет) которая будет служить swagger схемой и сериализовывать модели алхимии при выдаче

/routers/v1/

  • Добавляем новый эндпоинт
  • Регистрируем endpoint в init