You've already forked RekomenciBackend
add readme.md
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 421 KiB |
@@ -0,0 +1,59 @@
|
|||||||
|
# Rekomenci fluon *(рэкоменси флюйон)*
|
||||||
|
|
||||||
|
## **Кейс — сколько ты зарабатываешь?**
|
||||||
|
|
||||||
|
## Для продактов
|
||||||
|
|
||||||
|
Пока хз что написать
|
||||||
|
|
||||||
|
|
||||||
|
## Для разработчиков
|
||||||
|
|
||||||
|
[RFC проекта](RFC.md)
|
||||||
|
|
||||||
|
### Быстрый старт
|
||||||
|
|
||||||
|
1. Установка зависимостей
|
||||||
|
```shell
|
||||||
|
uv sync --group dev
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Запуск линтеров
|
||||||
|
```shell
|
||||||
|
just lint
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Запуск проекта
|
||||||
|
```shell
|
||||||
|
just build
|
||||||
|
just up
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Создание и применение миграций
|
||||||
|
```shell
|
||||||
|
just migrations-make "message"
|
||||||
|
just migrations-run
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Стек
|
||||||
|
|
||||||
|
#### Backend
|
||||||
|
|
||||||
|
+ **fastapi** - http server
|
||||||
|
+ **dishka** - IoC container
|
||||||
|
+ **sqlalchemy** - ORM и query builder
|
||||||
|
+ **adaptix** и **pydantic** - для моделей
|
||||||
|
+ **postgresql** - база данных
|
||||||
|
|
||||||
|
#### ML
|
||||||
|
|
||||||
|
+ **torch** - для машинного обучения
|
||||||
|
+ **sentence-transformers** - создание эмбеддингов
|
||||||
|
|
||||||
|
#### Linters
|
||||||
|
+ **mypy strict** - статический анализатор типов
|
||||||
|
+ **ruff** - статический линтер и форматтер кода
|
||||||
|
+ **codespell** - сыщик опечаток
|
||||||
|
+ **bandit** - сыщик уязвимостей
|
||||||
|
|||||||
@@ -0,0 +1,90 @@
|
|||||||
|
# Rekomenci fluon RFC
|
||||||
|
|
||||||
|
## Архитектура. *(Всё как завещал дядюшка Боб...)*
|
||||||
|
Проект следует чистой архитектуре дядюшки Боба.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# RFC-PROOD: Архитектура Recomenci Fluon
|
||||||
|
|
||||||
|
Статус: PROOOD
|
||||||
|
Дата: 23 ноября 2025
|
||||||
|
Автор: prod 39
|
||||||
|
|
||||||
|
## 1. Краткое описание
|
||||||
|
### Цель.
|
||||||
|
Описать целевую архитектуру, границы ответственности компонентов, модель разработки и деплоя для проекта рекомендаций и предсказаний зарплат (далее — проект)
|
||||||
|
|
||||||
|
RFC определяет интерфейсы для API, операционные требования и переходный план
|
||||||
|
|
||||||
|
## 2. Мотивация
|
||||||
|
- Упорядочить архитектуру для масштабируемости, тестируемости и повторяемости ML-экспериментов
|
||||||
|
- Обеспечить безопасный и предсказуемый деплой
|
||||||
|
- Определить контракты между web/API, ML-сервисом и хранилищем данных
|
||||||
|
|
||||||
|
|
||||||
|
## 3. Область и не-включения
|
||||||
|
Включено:
|
||||||
|
- Архитектура сервисов (web_api, ml)
|
||||||
|
- Хранилища: PostgreSQL, S3(далее object storage)
|
||||||
|
- CI/CD, контейнеризация и инвентори infra: Docker Compose
|
||||||
|
- Метрики, логирование, мониторинг базовой обработки ошибок
|
||||||
|
|
||||||
|
Не включено:
|
||||||
|
- Подробный дизайн интерфейсов UI
|
||||||
|
- Исследовательские ML-эксперименты (детальные датасеты/фичи) — описан процесс интеграции
|
||||||
|
|
||||||
|
|
||||||
|
## 4. Цели и критерии приёмки
|
||||||
|
Цели:
|
||||||
|
- Стабильный REST/HTTP API для вакансий и предсказаний
|
||||||
|
- Горизонтально масштабируемый ML embedding-сервис
|
||||||
|
- Повторяемый pipeline подготовки данных и обучения
|
||||||
|
|
||||||
|
|
||||||
|
## 5. Высокоуровневая архитектура
|
||||||
|
- Web API (web_api): HTTP-сервис, инкапсулирующий бизнес логику. Проксируются запросы к ML
|
||||||
|
- ML сервис (ml): HTTP-сервис для генерации embenddings и предсказания
|
||||||
|
- PostgreSQL — является хранилищем данных
|
||||||
|
- Инфра: Docker Compose для локальной разработки; Coolify для CI/CD
|
||||||
|
|
||||||
|
Коммуникация:
|
||||||
|
- HTTP rest-ful между web_api и ml; опционально gRPC в будущем
|
||||||
|
- Обмен артефактами через object storage и метаданные в PostgreSQL
|
||||||
|
|
||||||
|
## 6. Контракты API (предварительно)
|
||||||
|
- Web API:
|
||||||
|
- POST /v1/predict — payload: vacancy/resume; returns: salary_prediction {value, confidence, model_version}.
|
||||||
|
- POST /v1/vacancies — сохраняет вакансию для последующей обработки.
|
||||||
|
- GET /v1/models — список доступных моделей и версий.
|
||||||
|
- ML service:
|
||||||
|
- POST /infer — принимает фичи/сырой текст, возвращает предсказание и мета.
|
||||||
|
- GET /health, GET /metrics.
|
||||||
|
|
||||||
|
Входные/выходные схемы должны быть описаны в OpenAPI (yaml) и поддерживаться CI-валидатором
|
||||||
|
|
||||||
|
## 7. Деплой и CI/CD
|
||||||
|
- Локально: Docker Compose (just up/build)
|
||||||
|
- Staging/Prod: Coolify
|
||||||
|
- CI pipeline: lint → build images → full tests → push образ → deploy staging
|
||||||
|
- Резервное копирование: pg_dump + object storage snapshot.
|
||||||
|
|
||||||
|
## 8. Миграции данных и схем
|
||||||
|
- Использовать alembic для миграций схем PostgreSQL.
|
||||||
|
- Версионировать фичи и контракт входных данных (jsonschema).
|
||||||
|
- При изменениях схем: обеспечить миграционные скрипты + миграционный план с откатом.
|
||||||
|
|
||||||
|
## 9. Безопасность и секреты
|
||||||
|
- Секреты в ENV (environment secrets в CI).
|
||||||
|
- Валидация входящих данных и rate-limiting (Redis).
|
||||||
|
|
||||||
|
## 10. Мониторинг и логирование
|
||||||
|
- Логи структурированные (JSON), собираются в централизованный collector (ELK/Prometheus + Grafana для метрик).
|
||||||
|
- Метрики: latency, error_rate, throughput, model_drift indicators (distribution shifts), resource usage.
|
||||||
|
- Алёрты: SLO/SLA для latency/errors.
|
||||||
|
|
||||||
|
## 11. Тестирование
|
||||||
|
- Unit tests - тестируют бизнес логику
|
||||||
|
- E2E - тестируют весь user flow
|
||||||
@@ -54,6 +54,8 @@ dev = [
|
|||||||
{ include-group = "tests" },
|
{ include-group = "tests" },
|
||||||
{ include-group = "linters" },
|
{ include-group = "linters" },
|
||||||
{ include-group = "migrations" },
|
{ include-group = "migrations" },
|
||||||
|
{ include-group = "ml" },
|
||||||
|
{ include-group = "backend" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[project.scripts]
|
[project.scripts]
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ from sqlalchemy.orm import registry
|
|||||||
|
|
||||||
from template_project.application.access_token.entity import AccessToken
|
from template_project.application.access_token.entity import AccessToken
|
||||||
from template_project.application.auth_identity.entity import AuthIdentity, AuthMethod
|
from template_project.application.auth_identity.entity import AuthIdentity, AuthMethod
|
||||||
from template_project.application.common.enums import EducationGrade, ExperienceType
|
from template_project.application.common.enums import EducationGrade
|
||||||
from template_project.application.notification_device.entity import NotificationDevice
|
from template_project.application.notification_device.entity import NotificationDevice
|
||||||
from template_project.application.resume.entity import (
|
from template_project.application.resume.entity import (
|
||||||
Resume,
|
Resume,
|
||||||
|
|||||||
Reference in New Issue
Block a user