Архитектура проекта eebook-users¶
1. Обзор архитектуры¶
Проект построен по принципам чистой архитектуры с чётким разделением на слои:
src/
├── adapters/ # Адаптеры для внешних систем и хранилищ
│ ├── interfaces.py # Протоколы для внешних сервисов
│ ├── password_hasher.py # Реализация хешера паролей
│ ├── repository.py # Реализация репозиториев
│ ├── orm.py # ORM-модели SQLAlchemy
│ ├── factory.py # Фабрики адаптеров
│ └── vault.py # Провайдер секретов (Vault)
│
├── config/ # Конфигурация и настройки
│ ├── settings.py # Pydantic-модель конфигурации
│ ├── loader.py # Загрузка и валидация настроек
│ └── exceptions.py # Ошибки конфигурации
│
├── domain/ # Доменный слой (чистая бизнес-логика)
│ ├── model.py # Доменные модели пользователя
│ └── exceptions.py # Исключения доменного уровня
│
├── entity/ # Вспомогательные модели (например, для ORM/DTO)
│ └── models.py
│
├── entrypoints/ # Точки входа приложения
│ ├── api/ # HTTP API-эндпоинты
│ │ └── endpoints.py
│ └── fastapi_app.py # Инициализация FastAPI
│
├── infrastructure/ # Инфраструктурный слой
│ ├── database/ # Работа с базой данных
│ │ ├── engine.py # Настройка движка SQLAlchemy
│ │ ├── exceptions.py # Ошибки инфраструктуры БД
│ │ └── migrations/ # Alembic-миграции
│ ├── lifespan.py # Контекст жизненного цикла приложения
│ └── logging/ # Конфигурация логирования
│
├── service_layer/ # Сервисный слой (application layer)
│ ├── users_service.py # Сервис пользователей
│ ├── uow.py # Unit of Work
│ ├── dependencies.py # FastAPI зависимости
│ └── exceptions.py # Ошибки сервисного уровня
│
├── bootstrap.py # Инициализация приложения
├── exceptions.py # Общие исключения
└── main.py # Точка входа (run)
2. Взаимодействие слоёв¶
entrypoints
↓
service_layer → domain
↓ ↑
infrastructure → adapters
↓
config
2.1. Назначение слоёв¶
- entrypoints - Точки входа в приложение (HTTP API, CLI, задачи по расписанию)
- service_layer - Прикладная логика, координация операций, бизнес-правила
- domain - Чистая бизнес-логика, доменные модели и исключения
- adapters - Адаптеры для работы с внешними системами и БД
- infrastructure - Низкоуровневые детали (БД, кеш, брокеры сообщений)
- config - Конфигурация приложения и настройки окружения
3. Инициализация приложения¶
3.1. Запуск приложения¶
- Запускается
lifespan(контекстный менеджер FastAPI) - Вызывается
bootstrap() - Происходит инициализация компонентов:
Source code in src/bootstrap.py
16 17 18 19 20 21 22 23 24 25 26 27 | |
3.2. Обработка запроса¶
- Запрос приходит в FastAPI эндпоинт
- Через DI внедряются зависимости из
service_layer.dependencies - Создается сессия БД через
get_db() - Вызывается соответствующий сервис/юзкейс
- Происходит работа с репозиториями в рамках UoW
- Результат возвращается клиенту
4. Ключевые компоненты¶
4.1. Ключевые компоненты¶
4.1.1. bootstrap.py¶
Центральная точка инициализации приложения:
- Настройка логгера
- Загрузка конфигурации из переменных окружения
- Инициализация БД и миграций
- Настройка зависимостей
- Инициализация FastAPI приложения
4.1.2. Unit of Work (UoW)¶
Паттерн "Единица работы" для управления транзакциями:
- Документация UoW
- Обеспечивает атомарность операций
- Управляет жизненным циклом сессий БД
4.1.3. Сервис пользователей¶
Основной сервис для работы с пользователями:
- Документация UserService
- Управление жизненным циклом пользователей
- Аутентификация и авторизация
- Управление профилями
4.1.4. Конфигурация¶
Управление настройками приложения:
- Загрузка из переменных окружения
- Валидация через Pydantic
- Поддержка разных окружений (dev, test, prod)
Эта документация даёт полное представление об архитектуре проекта и принципах его работы. Для более детального изучения отдельных компонентов обратитесь к соответствующим разделам документации.