Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

pynitos/fastapiDBTProject

Open more actions menu

Repository files navigation

DBT Diary Card c Чистой архитектурой

📋 О проекте

Учебный проект - система для ведения дневниковых карт по методике DBT (Dialectical Behavior Therapy) с применением чистой архитектуры. Проект создавался для изучения современных подходов к разработке.

⚠️ Важное замечание: Это учебный проект для портфолио. В реализации могут быть ошибки, архитектурные недочёты и места, требующие оптимизации. Я осознаю недостатки и активно работаю над их исправлением.

🎯 Технологический стек и особенности

Backend

  • FastAPI для Python backend API
  • 🧰 SQLAlchemy 2.0+ с async поддержкой для работы с БД
  • 🤖 Dishka - IoC контейнер для управления зависимостями
  • 🔍 Pydantic для валидации данных и управления настройками
  • 💾 PostgreSQL в качестве основной SQL базы данных
  • 🔒 JWT аутентификация с безопасным хранением токенов
  • 🔑 Secure password hashing по умолчанию

Инфраструктура

  • 🐋 Docker Compose для development и production окружений
  • 📞 Nginx в качестве API gateway
  • Pytest с поддержкой asyncio для тестирования
  • 🏭 CI/CD на основе GitHub Actions
  • 🔑 OpenTelemetry для мониторинга и трассировки
  • 📊 Prometheus для сбора метрик
  • 📈 Grafana для визуализации метрик и создания дашбордов

Дополнительные технологии

  • Message brokers: Kafka (через FastStream), Redis (через TaskIQ)
  • Хранилище файлов: AWS S3 (boto3)
  • PDF-генерация: ReportLab
  • Telegram-бот: aiogram с aiogram-dialog
  • Временное решение для пользователей: Django + Djoser

🏗️ Архитектура проекта

Структура по принципам чистой архитектуры

fastapiDBTProject/
├── src/
│   ├── diary_ms/                    # Основной сервис дневниковых карт
│   │   ├── domain/                  # Domain layer - бизнес-логика
│   │   │   ├── entities/           # Сущности предметной области
│   │   │   ├── value_objects/      # Value objects
│   │   │   └── events/             # Domain events
│   │   ├── application/            # Application layer - координация
│   │   │   └── diary_card/         # Модуль дневниковых карт
│   │   │       └── interactors/
│   │   │           ├── commands/   # Команды (CQRS)
│   │   │           └── queries/    # Запросы (CQRS)
│   │   │  
│   │   ├── infrastructure/         # Infrastructure layer
│   │   │   ├── gateways/           # Репозитории, миграции
│   │   │   ├── brokers/    # Kafka, Redis
│   │   │   └── services/  # Внешние API
│   │   └── presentation/           # Presentation layer
│   │       ├── api/                # REST API endpoints
│   │       ├── amqp/                # FastStream интерфейсы
│   │       └── telegram/                # Telegram bot handlers
│   └── user_ms/                    # Сервис пользователей (Django)

🔄 Текущее состояние и планы

✅ Реализовано

  • Чистая архитектура основного сервиса (diary_ms)
  • FastAPI с асинхронными endpoint
  • JWT аутентификация и авторизация
  • PostgreSQL + SQLAlchemy 2.0 с миграциями
  • Docker окружение с Nginx gateway
  • OpenTelemetry для мониторинга
  • Telegram-бот для удобного ведения записей

⚠️ Требует улучшения

  • DDD - доменные модели получились анемичными. Из-за этого в идеале необходимо переписать доменный слой, инфраструктурный и интеракторы. Возможно, отработать навык написания домена будет лучше уже в другом проекте, а этот оставить как есть.
  • User MS (Django) - временная заглушка с Djoser, требует замены на самостоятельный ограниченный контекст с отдельным репозиторием
  • Тестовое покрытие - требует расширения
  • Производительность - нуждается в оптимизации

🔄 Планируется

  • Удаление Django и переход на полный FastAPI стек
  • Рефакторинг архитектуры для лучшего соответствия DDD
  • Улучшение event-driven архитектуры
  • Расширение мониторинга и логирования
  • Улучшение документации API

🚀 Быстрый старт

Настройка окружения

# Клонирование репозитория
git clone <repository-url>

# Копирование файла окружения
cp .env.dist .env

# Запуск в Docker
docker-compose up

Разработка

# Установка зависимостей
poetry install

# Запуск тестов
pytest tests/ --asyncio-mode=auto

# Проверка типов
mypy src/ --strict

# Линтинг
ruff check --fix src/
ruff format src/

📈 Навыки, продемонстрированные в проекте

Технические навыки

  1. Python 3.13 с использованием новых возможностей
  2. FastAPI - создание REST API с асинхронными endpoint
  3. DDD - практическое применение Domain-Driven Design
  4. CQRS - разделение команд и запросов
  5. SQLAlchemy 2.0+ - работа с БД в async режиме
  6. Docker - контейнеризация и оркестрация
  7. Message brokers - Kafka и Redis для event-driven архитектуры
  8. Мониторинг - OpenTelemetry и Prometheus

Архитектурные навыки

  • Проектирование по DDD принципам
  • Микросервисная архитектура
  • Clean Architecture и разделение ответственности
  • Dependency Injection через Dishka
  • Event-driven и CQRS паттерны

Профессиональные практики

  • Type hints и strict typing с mypy
  • Автоматическое тестирование с pytest
  • Линтинг и code quality с ruff
  • CI/CD с GitHub Actions
  • Контейнеризация с Docker

🎓 Учебная ценность проекта

Этот проект позволил изучить:

  • Практическое применение DDD в реальном проекте
  • Современный Python стек (FastAPI, SQLAlchemy 2.0+)
  • Микросервисные паттерны и их реализацию
  • Инфраструктурные решения (Docker, Nginx, мониторинг)
  • Профессиональные инструменты разработки
  • Лучшие практики проектирования API

🤝 Вклад и обратная связь

Как учебный проект, я открыт для:

  • Конструктивной критики архитектуры
  • Предложений по улучшению реализации
  • Помощи в исправлении ошибок
  • Совместного изучения best practices

📄 Лицензия

Проект распространяется под лицензией MIT.


Примечание для рекрутеров: Данный проект демонстрирует моё понимание современных подходов к разработке и готовность к профессиональному росту. Я осознаю существующие недостатки в архитектуре и активно работаю над их устранением, изучая лучшие практики и паттерны разработки.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.