Шаблон основан на соглашениях, принятых в документе тандарты разработки. Реализован и запускается при помощи утилиты Cookiecutter.
pip install --user cookiecutter
cookiecutter git@gitlab.masterdelivery.ru:backend/base-template.git
Дальше можно смотреть инструкции и описание в README.md
созданного проекта.
@todo
В основе лежит некая вариация концепции «чистой архитектуры» в представлении слоистости, с адаптацией под наши привычки и особенности. Так же, при проектировании вдохновлялся находками из (fastapi-layered-architecture)[https://github.com/teamhide/fastapi-layered-architecture]. Базая структура выглядит следующим образом:
core
— ядро, системные вызовы, коннекторы, настройки, не предметно-ориентированный код, а уровень инфраструктурыdomain
— предметная область приложения, ключевая часть приложения, где сосредоточеная вся бизнес-логика и взаимодействие с даннымиapi
— presentation слой, собственно сам api/swagger интерфейс
domain
в свою очередь, состоит из следующих структур:
models
— доменные сущности: таблицы в БДrepositories
— коллекции данных, некий стандартизированный интерфейс работы с сущностями, тут не сосредоточена логика, тут есть только относительно тривиальные операции ввода/выводаschemas
— pydantic-схемы, интерфейсы между всеми компонентамиinteractors
— это сердце приложения, бизнес-логика, где происходит работа с сущностями/репозиториями, валидации/запись/сохранение и так далее, они инжектят в себя репозитории и взаимодействют с ними. Они реализуют use case. Сюда же относится и взаимодействие с внешними сервисами.
В свою очередь interactors
реализованы по паттерну CQRS, и предполагают, что разные сервисы будут отвечать за чтение и запись данных (отделение command от query).
Вкратце, получается такая схема:
api
взаимодействует сinteractors
interactors
реализуют логику и взаимодействуют сrepositories
по контрактам изschemas
repositories
взаимодействует с хранилищами (postgres/redis) по контрактам изschemas
, используяmodels
и возвращают данные
[] Запустить основные ручки [] Прикрутить редис (с учетом правильного подключения) [] Прикрутить БД, Джино, алембик, протестить работу миграций [] Подключить arq-очередь [] Добавить background tasks [] Сделать кронджобу [] Сделать простые тесты и запустить их [] Прикрутить кафку [] Подключить Vault [] Настроить логгинг, пропатчить либу, чтобы инит туда положить [] Рассмотреть вопрос работы с редисом через либу [] Рассмотреть вопрос работы с редисом через модели [] Именование топиков в кафке включить в стандарты разработки [] Именование проектов включить в стандарты разработки [] Переделать на copier https://github.com/copier-org/copier [] black в опцию
[] Разобраться в разнице между DAL и репозиторием (наш кейс - это скорее дал), формализовать работу с репозиторием, выделить критерии (создание - в моделе, логика - с сервисах) []