В корне проекта находятся следующие директории:
- alembic Содержит настройки и файлы миграций alembic.
- assets Директория для статических файлов проекта. Например, шрифты или изображения.
- docker Содержит файлы, необходимые для запуска проекта внутри контейнеров docker.
- src Директория с исходным кодом проекта.
- storage Папка для файлов, которые генерируются в процессе работы кода. Например, логи, изображения, xls, csv и т.д.
Директория src содержит в себе основной исходный код проекта:
- modules Папка с модулями. Каждый модуль отвечает за отдельный функционал приложения.
- db.py Файл конфигурации и инициализации подключения к БД.
- main.py Файл, отвечающий за запуск всего приложения. Инициализирует FastAPI, его роуты и middleware. Содержит глобальные обработчики exception.
- routers.py Файл, отвечающий за подключение роутов из модулей. Каждый раз при создании нового модуля, необходимо подключать его роуты в данном файле.
Директория модуля может иметь следующую структуру:
- exceptions Содерждит в себе все исключения, которые может вызывать модуль.
- jobs Фоновые задачи, которые выполняются по расписанию. За даннуб логику отвечает библиотека apscheduler. Инициализация фоновых задач происходит в момент запуска FastAPI (событие startup) в main.py.
- middlewares Middleware модуля. Глобальные middleware необходимо подключать в main.py (https://fastapi.tiangolo.com/tutorial/middleware/). Локальные middleware (работающие только для некоторых роутов), можно подключать через Depends.
- models Модели модуля.
- requests Содержит классы запросов pydantic.
- responses Содержит классы ответов pydantic на запросы.
- routes Содержит роуты модуля. Отвечает за реализацию основной логики модуля. Модуль может иметь несколько файлов c роутами для разделения функционала. Например, модуль для работы с пользователями может иметь файлы register.py для работы с логикой регистрации и файлы user.py, который содержит функционал для уже зарегистрированного пользователя.
- services Вспомогательные сервисы модуля.
- router.py Используется для подключения всех роутов модуля.
Запуск проекта происходит через docker. Для этого надо выполнить команду из папки проекта:
docker compose -f .\docker\local\docker-compose.yml up -d
Для автоматической генерации файлов миграций необходимо выполнить команду внутри контейнера приложения:
alembic -c alembic/alembic.ini revision -m "migration description" --autogenerate
Каждый раз при добавлении новой модели необходимо импортировать ее в env.py (например, from modules.module1.models.user import User), для того, чтобы alembic сгенерировал миграцию.