Используется GitFlow подход.
Желательно в проекте не делать прямых изменений в ветках(main, dev, stage).
Если коммит не является важным, и не несет существенной нагрузки, делать его в ветках(main, dev, stage) - нежелательно
Ветки именовать следующим образом: dev/NAMING
:
dev
- указывает на то что ветка была сделана в develop средеNAMING
- номер задачи
Для нейминга веток, лучше придерживаться правила: Convential Commit
:
- Для продуктов JetBrains, можно использовать plugin
Convential Commit
pre-commit install
- включить при git pull;python src/__main__.py
docker-compose up --build
docker-compose -f docker-compos.prod.yml --build -d
В текущем проекте выбран подход Многослойной(луковичной, слоистая) архитектуры.
familia
├── _docker # docker configuration
│ └── web
│ │ ├── Dockerfile # local
│ │ └── Dockerfile.prod # prod
├── alembic # alembic settings, migrations
│ ├── versions
│ │ └── 000001.py
│ ├── env.py
├── src
│ ├── common # global directory
│ │ ├── constants.py # local constants
│ │ ├── excetions.py # global
│ │ ├── interfaces.py # global
│ │ ├── mixins.py # global
│ │ ├── repositories.py # global
│ │ └── schemas.py # global
│ ├── user
│ │ ├── private
│ │ │ ├── models.py # db model
│ │ │ └── repositories.py # interaction with the database
│ │ ├── web
│ │ │ └── rest.py # local routers
│ │ ├── constants.py # local constants
│ │ ├── eceptions.py # local exception
│ │ ├── interface.py # local interface repository and service
│ │ ├── schemas.py # schema for model
│ │ └── services.py # local services
│ ├── utils # additional functionality
│ │ └── export.py
│ ├── __main__.py # run application
│ ├── app.py # create application
│ ├── containers.py # di container
│ ├── routes.py # set all routes
│ ├── server.py # setting for fastapi
│ └── setting.py # settings for project
├── tests
├── env.example
├── .gitignore
├── alembic.ini
├── .pre-commit-confio.yaml # pre-commit config
├── docker-compose.prod.yml # production
├── docker-compose.yml # local
├── pyproject.toml # all libs
├── README.md
└── setup.cfg # flake8, mypy config
- Хранить все каталоги домена внутри srcпапки
src/
- самый высокий уровень приложения, содержит общие модели, конфигурации, константы и т. д.src/app.py
- корень проекта, который инициализирует приложение FastAPI
- Модули:
common
- содержит базовый функционал, все последующие модули его наследуютuser
- содержит специфичный функционал для работы с пользователем
- Каждый пакет имеет свой маршрутизатор, схемы, модели и т. д.
exceptions.py
- исключения, специфичные для модуля, например PostNotFound,InvalidUserDatainterface.py
- описывается схема для repositories, service и другогоmixins.py
- миксины специфичные для модуляrepositories.py
- реализация работы с БД специфичные для модуляschemas.py
- для pydantic моделейmodels.py
- для моделей БДrest.py
- является ядром каждого модуля со всеми конечными точкамиservice.py
- бизнес-логика, специфичная для модуляconstants.py
- специфичные для модуля константы и коды ошибокservice.py
- специфичная для модуля бизнес логикаutils.py
- функции, не относящиеся к бизнес-логике, например, нормализация ответов, обогащение данных и т. д.app.py
- инициализация приложенияcontainers.py
- di containerrouters.py
- содержит класс инициализации всех роутовserver.py
- настройка приложени. подключение роутов, мидлвар и тд.settings.py
- настройки, переменные окружения и тд.
- Если пакету требуются службы, зависимости или константы из других пакетов — импортируйте их с явным именем модуля.
from src.auth import constants as auth_constants
from src.notifications import service as notification_service
from src.posts.constants import ErrorCode as PostsErrorCode # in case we have Standard ErrorCode in constants module of each package