Файл local.yml настроен так, чтобы все работало из коробки. Однако такой подход делает локальную разработку неудобной, если не использовать удаленный интерпретатор.
docker compose -f ./local.yml up --build -dПровести миграции:
docker compose -f ./local.yml run --rm backend alembic upgrade headПолнять БД:
docker compose -f ./local.yml up postgres -dДалее создаем виртуальное окружение, устанавливаем зависимости:
pip install -r requirements-dev.txtУбеждаемся, что переменная окружения DB_HOST имеет значение localhost. В /app/core/config.py она имеет такое значение
по умолчанию, но ее значение берется из файла .env
Для проведения миграций необходимо выполнить 4 действия:
Импортировать модель в
__init__pyмодуляmodels, чтобы alembic видел эту модель и провел миграцию создания моделиСоздать папку
versionsв папкеalembicСоздать миграцию:
docker compose -f ./local.yml run --rm backend alembic revision --autogenerate -m "name" --rev-id "001"
Провести миграцию
docker compose -f ./local.yml run --rm backend alembic upgrade head
где backend - это имя сервиса
- Создать репозиторий для модели
- Создать UnitOfWork для домена
- Создать сервис для домена и реализацию методов
- Создать зависимость для получения сервиса
classDomainRepository(SQLAlchemyRepository):
model=DomainModelclassDomainUnitOfWork(SQLAlchemyUnitOfWork):
def__init__(self):
super().__init__()
self.domain_repository=DomainRepositoryclassDomainService:
def__init__(self):
self.uow=DomainUnitOfWork()
asyncdefget_all_records(self):
asyncwithself.uow:
returnawaitself.uow.domain_repository.list()
defget_domain_service() ->DomainService:
returnDomainService()
DomainServiceDep=Annotated[DomainService, Depends(get_domain_service)]Создание связки репозиторий - uow - сервис для каждого домена в отдельности позволяет изолировать все, что связано с этим доменом внутри одного модуля, а также изолировать всю бизнес-логику в сервисах
@router("/")asyncdeftest(domain_service: DomainServiceDep):
awaitdomain_service.do_smth()- http://127.0.0.1:8000/docs - документация API
- на порту
5432доступна БД postgres