Проект назначен для ведения портала самоподготовки к экзаменам.
- Python:
3.12
- Production:
alembic
,dishka
,fastapi
,asyncpg
,sqlalchemy[async]
,gunicorn
,minio
,prometheus
,grafana
- Development:
isort
,ruff
,pre-commit
- '/': Открыт для всех
- Перенаправляет на Swagger документацию
- '/' (GET): Открыт для всех
- Отдает информацию о задании, ссылки на файлы к заданию
- '/' (POST): Открыт для всех
- Создает задание, ожидая информацию о задании и файлы
Обязательный handler для prometheus
- Стандарт Prometheus: Все приложения, интегрирующиеся с Prometheus, экспонируют метрики через специальный эндпоинт
- Автоматическое поведение Prometheus: При сборе данных Prometheus отправляет запросы типа GET /metrics к каждому указанному таргету
.
├── conf # Конфиги
│
├── docs
└── src
├── exam_tutor
│ │
│ ├── application/... # Логика приложения, порты
│ │
│ │
│ ├── controllers/... # Внешнее общение
│ │
│ │
│ ├── domain/... # Доменная модель
│ │
│ │
│ ├── entrypoint/... # Конфигурирование и IoC
│ │
│ │
│ └── infrastructure/... # Адаптеры
│
Использован императивный подход. С помощью map_imperatively
была смаплена доменная модель в представление базы данных.
Приложение разделено на слои:
- Domain
- Application
- Infrastructure
- Presentation
Чистая архитектура, Роберт Мартин
- Соблюден принцип инверсии зависимотей
- Зависимости доставляются при помощи инъекции зависимостей, используя di-framework Dishka
Использован Prometheus для сбора метрик приложения, а также написан middleware для подсчета вызовов каждого endpoint.
Испольована Grafana, создано подключение к prometheus и создан dashboard.
This project is licensed under the MIT License - see the LICENSE file for details.