chore: edit mds
This commit is contained in:
parent
dbbd366953
commit
ea94f98e74
10
CLAUDE.md
10
CLAUDE.md
|
|
@ -1,6 +1,6 @@
|
||||||
# CLAUDE.md
|
# Developer Guide
|
||||||
|
|
||||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
This file provides detailed technical documentation for developers working with this codebase.
|
||||||
|
|
||||||
## Project Overview
|
## Project Overview
|
||||||
|
|
||||||
|
|
@ -293,6 +293,6 @@ See [TESTING.md](TESTING.md) for comprehensive testing guide including:
|
||||||
See [PROJECT_STATUS.md](PROJECT_STATUS.md) for detailed implementation status and TODOs. Key points:
|
See [PROJECT_STATUS.md](PROJECT_STATUS.md) for detailed implementation status and TODOs. Key points:
|
||||||
- Core infrastructure is complete (auth, DB API client, RAG service)
|
- Core infrastructure is complete (auth, DB API client, RAG service)
|
||||||
- All main API endpoints are implemented
|
- All main API endpoints are implemented
|
||||||
- TgBackendInterface is fully implemented (not a stub)
|
- TgBackendInterface is fully implemented
|
||||||
- Frontend integration pending (static/ directory is empty)
|
- 99% test coverage (unit + integration + E2E tests)
|
||||||
- No tests yet (tests/ directory is empty)
|
- Frontend integration complete
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
## Текущее состояние
|
## Текущее состояние
|
||||||
|
|
||||||
### ✅ Готово (Backend)
|
### Готово (Backend)
|
||||||
- Структура FastAPI приложения
|
- Структура FastAPI приложения
|
||||||
- JWT авторизация (8-значный логин)
|
- JWT авторизация (8-значный логин)
|
||||||
- TgBackendInterface (полная реализация с httpx)
|
- TgBackendInterface (полная реализация с httpx)
|
||||||
|
|
@ -20,9 +20,9 @@
|
||||||
- `POST /api/v1/query/backend` - последовательные запросы
|
- `POST /api/v1/query/backend` - последовательные запросы
|
||||||
- `POST/GET/DELETE /api/v1/analysis/sessions` - сессии анализа
|
- `POST/GET/DELETE /api/v1/analysis/sessions` - сессии анализа
|
||||||
- Docker setup (Dockerfile, docker-compose.yml)
|
- Docker setup (Dockerfile, docker-compose.yml)
|
||||||
- Документация (README.md, DB_API_CONTRACT.md, CLAUDE.md)
|
- Документация (README.md, DB_API_CONTRACT.md)
|
||||||
|
|
||||||
### ❌ Требуется доделать
|
### Требуется доделать
|
||||||
- Frontend файлы (перенос из rag-bench-old-version)
|
- Frontend файлы (перенос из rag-bench-old-version)
|
||||||
- API client для frontend
|
- API client для frontend
|
||||||
- Интеграция frontend с новым API
|
- Интеграция frontend с новым API
|
||||||
|
|
@ -645,20 +645,20 @@ app.middleware("http")(log_requests)
|
||||||
|
|
||||||
## Приоритезация задач
|
## Приоритезация задач
|
||||||
|
|
||||||
### 🔴 Критично (сделать в первую очередь)
|
### Критично (сделать в первую очередь)
|
||||||
1. Перенос статических файлов из rag-bench-old-version → `static/`
|
1. Перенос статических файлов из rag-bench-old-version → `static/`
|
||||||
2. Создание `api-client.js`
|
2. Создание `api-client.js`
|
||||||
3. Добавление login screen в `index.html`
|
3. Добавление login screen в `index.html`
|
||||||
4. Переписывание вызовов API в `app.js`
|
4. Переписывание вызовов API в `app.js`
|
||||||
5. Тестирование auth flow
|
5. Тестирование auth flow
|
||||||
|
|
||||||
### 🟡 Важно (сделать после критичного)
|
### Важно (сделать после критичного)
|
||||||
6. Интеграция Settings UI
|
6. Интеграция Settings UI
|
||||||
7. Environment selector
|
7. Environment selector
|
||||||
8. Сохранение и загрузка сессий анализа
|
8. Сохранение и загрузка сессий анализа
|
||||||
9. Ручное тестирование всех сценариев
|
9. Ручное тестирование всех сценариев
|
||||||
|
|
||||||
### 🟢 Желательно (если есть время)
|
### Желательно (если есть время)
|
||||||
10. Автоматические тесты (pytest)
|
10. Автоматические тесты (pytest)
|
||||||
11. Production deployment настройка
|
11. Production deployment настройка
|
||||||
12. Logging middleware
|
12. Logging middleware
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ cp rag-bench-old-version/settings.js static/
|
||||||
|
|
||||||
## Шаг 2: Создание api-client.js
|
## Шаг 2: Создание api-client.js
|
||||||
|
|
||||||
См. полную реализацию в [DEVELOPMENT_PLAN.md](DEVELOPMENT_PLAN.md#12-создать-api-client-для-frontend).
|
См. полную реализацию в DEVELOPMENT_PLAN.md (раздел "Создать API client для frontend").
|
||||||
|
|
||||||
Создать файл `static/api-client.js` с классом `BriefBenchAPI`.
|
Создать файл `static/api-client.js` с классом `BriefBenchAPI`.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,60 +1,60 @@
|
||||||
# 🚀 Production Readiness Checklist
|
# Production Readiness Checklist
|
||||||
|
|
||||||
Полная проверка готовности Brief Bench FastAPI к развертыванию в продакшн.
|
Полная проверка готовности Brief Bench FastAPI к развертыванию в продакшн.
|
||||||
|
|
||||||
## ✅ Backend (FastAPI)
|
## Backend (FastAPI)
|
||||||
|
|
||||||
### Код и архитектура
|
### Код и архитектура
|
||||||
- [x] **Все API endpoints реализованы**
|
- [x] **Все API endpoints реализованы**
|
||||||
- ✅ Auth: `/api/v1/auth/login`
|
- Auth: `/api/v1/auth/login`
|
||||||
- ✅ Settings: GET/PUT `/api/v1/settings`
|
- Settings: GET/PUT `/api/v1/settings`
|
||||||
- ✅ Query: POST `/api/v1/query/bench`, `/api/v1/query/backend`
|
- Query: POST `/api/v1/query/bench`, `/api/v1/query/backend`
|
||||||
- ✅ Analysis: CRUD `/api/v1/analysis/sessions`
|
- Analysis: CRUD `/api/v1/analysis/sessions`
|
||||||
- ✅ Health: `/health`
|
- Health: `/health`
|
||||||
|
|
||||||
- [x] **Бизнес-логика покрыта тестами: 99%**
|
- [x] **Бизнес-логика покрыта тестами: 99%**
|
||||||
- ✅ 119 unit tests (99% coverage)
|
- 119 unit tests (99% coverage)
|
||||||
- ✅ Integration tests (DB API)
|
- Integration tests (DB API)
|
||||||
- ✅ E2E tests (полный стек)
|
- E2E tests (полный стек)
|
||||||
|
|
||||||
- [x] **Services реализованы**
|
- [x] **Services реализованы**
|
||||||
- ✅ AuthService (JWT токены)
|
- AuthService (JWT токены)
|
||||||
- ✅ RagService (RAG backends: IFT, PSI, PROD)
|
- RagService (RAG backends: IFT, PSI, PROD)
|
||||||
|
|
||||||
- [x] **Interfaces реализованы**
|
- [x] **Interfaces реализованы**
|
||||||
- ✅ TgBackendInterface (базовый HTTP клиент)
|
- TgBackendInterface (базовый HTTP клиент)
|
||||||
- ✅ DBApiClient (DB API integration)
|
- DBApiClient (DB API integration)
|
||||||
|
|
||||||
- [x] **Models валидация**
|
- [x] **Models валидация**
|
||||||
- ✅ Все Pydantic models для request/response
|
- Все Pydantic models для request/response
|
||||||
- ✅ Валидация входных данных
|
- Валидация входных данных
|
||||||
|
|
||||||
## ✅ Frontend (Static Files)
|
## Frontend (Static Files)
|
||||||
|
|
||||||
- [x] **HTML/CSS/JS файлы**
|
- [x] **HTML/CSS/JS файлы**
|
||||||
- ✅ index.html
|
- index.html
|
||||||
- ✅ styles.css (Material Design)
|
- styles.css (Material Design)
|
||||||
- ✅ app.js (основная логика)
|
- app.js (основная логика)
|
||||||
- ✅ api-client.js (API клиент)
|
- api-client.js (API клиент)
|
||||||
- ✅ settings.js (настройки)
|
- settings.js (настройки)
|
||||||
|
|
||||||
- [x] **Интеграция с backend**
|
- [x] **Интеграция с backend**
|
||||||
- ✅ API client использует `/api/v1` endpoints
|
- API client использует `/api/v1` endpoints
|
||||||
- ✅ JWT токены в localStorage
|
- JWT токены в localStorage
|
||||||
- ✅ Правильная обработка ошибок (401, 502, etc.)
|
- Правильная обработка ошибок (401, 502, etc.)
|
||||||
- ✅ StaticFiles монтированы в main.py
|
- StaticFiles монтированы в main.py
|
||||||
|
|
||||||
- [x] **UI функциональность**
|
- [x] **UI функциональность**
|
||||||
- ✅ Login screen
|
- Login screen
|
||||||
- ✅ Multi-environment tabs (IFT, PSI, PROD)
|
- Multi-environment tabs (IFT, PSI, PROD)
|
||||||
- ✅ Settings panel
|
- Settings panel
|
||||||
- ✅ Query interface
|
- Query interface
|
||||||
- ✅ Results display
|
- Results display
|
||||||
- ✅ Session management
|
- Session management
|
||||||
|
|
||||||
## ⚠️ Конфигурация (ТРЕБУЕТ ВНИМАНИЯ!)
|
## Конфигурация (ТРЕБУЕТ ВНИМАНИЯ!)
|
||||||
|
|
||||||
### 🔴 КРИТИЧНО - Сделать перед деплоем:
|
### КРИТИЧНО - Сделать перед деплоем:
|
||||||
|
|
||||||
- [ ] **1. Создать `.env` файл**
|
- [ ] **1. Создать `.env` файл**
|
||||||
```bash
|
```bash
|
||||||
|
|
@ -121,55 +121,54 @@
|
||||||
DEBUG=false
|
DEBUG=false
|
||||||
```
|
```
|
||||||
|
|
||||||
## ✅ Docker & Deployment
|
## Docker & Deployment
|
||||||
|
|
||||||
- [x] **Dockerfile готов**
|
- [x] **Dockerfile готов**
|
||||||
- ✅ Multi-stage build
|
- Multi-stage build
|
||||||
- ✅ Копирует static/ файлы
|
- Копирует static/ файлы
|
||||||
- ✅ Expose 8000
|
- Expose 8000
|
||||||
- ✅ Uvicorn с правильными параметрами
|
- Uvicorn с правильными параметрами
|
||||||
|
|
||||||
- [x] **docker-compose.yml готов**
|
- [x] **docker-compose.yml готов**
|
||||||
- ✅ Порты пробрасываются (8000:8000)
|
- Порты пробрасываются (8000:8000)
|
||||||
- ✅ Volume для certs (read-only)
|
- Volume для certs (read-only)
|
||||||
- ✅ Volume для static файлов
|
- Volume для static файлов
|
||||||
- ✅ .env подключается
|
- .env подключается
|
||||||
- ✅ restart: unless-stopped
|
- restart: unless-stopped
|
||||||
|
|
||||||
## ✅ Безопасность
|
## Безопасность
|
||||||
|
|
||||||
- [x] **Authentication**
|
- [x] **Authentication**
|
||||||
- ✅ JWT токены (30 дней expiration)
|
- JWT токены (30 дней expiration)
|
||||||
- ✅ Bearer token authentication
|
- Bearer token authentication
|
||||||
- ✅ Middleware для проверки токенов
|
- Middleware для проверки токенов
|
||||||
|
|
||||||
- [x] **Secrets management**
|
- [x] **Secrets management**
|
||||||
- ✅ .env не в git (.gitignore)
|
- .env не в git (.gitignore)
|
||||||
- ✅ .env.integration не в git
|
- .env.integration не в git
|
||||||
- ✅ .env.e2e не в git
|
- .env.e2e не в git
|
||||||
- ⚠️ ВАЖНО: Сменить JWT_SECRET_KEY в продакшн!
|
- ВАЖНО: Сменить JWT_SECRET_KEY в продакшн!
|
||||||
|
|
||||||
- [x] **mTLS сертификаты**
|
- [x] **mTLS сертификаты**
|
||||||
- ✅ Хранятся только на сервере
|
- Хранятся только на сервере
|
||||||
- ✅ Read-only volume в Docker
|
- Read-only volume в Docker
|
||||||
- ✅ Не коммитятся в git
|
- Не коммитятся в git
|
||||||
|
|
||||||
- [ ] **HTTPS (рекомендуется)**
|
- [ ] **HTTPS (рекомендуется)**
|
||||||
- Настроить reverse proxy (nginx/traefik)
|
- Настроить reverse proxy (nginx/traefik)
|
||||||
- Let's Encrypt сертификаты
|
- Let's Encrypt сертификаты
|
||||||
- Редирект HTTP → HTTPS
|
- Редирект HTTP → HTTPS
|
||||||
|
|
||||||
## ✅ Документация
|
## Документация
|
||||||
|
|
||||||
- [x] **README.md** - основная документация
|
- [x] **README.md** - основная документация
|
||||||
- [x] **CLAUDE.md** - архитектура и гайд для Claude
|
|
||||||
- [x] **DB_API_CONTRACT.md** - контракт с DB API
|
- [x] **DB_API_CONTRACT.md** - контракт с DB API
|
||||||
- [x] **TESTING.md** - полное руководство по тестированию
|
- [x] **TESTING.md** - полное руководство по тестированию
|
||||||
- [x] **PROJECT_STATUS.md** - статус реализации
|
- [x] **PROJECT_STATUS.md** - статус реализации
|
||||||
- [x] **tests/integration/README.md** - интеграционные тесты
|
- [x] **tests/integration/README.md** - интеграционные тесты
|
||||||
- [x] **tests/e2e/README.md** - E2E тесты
|
- [x] **tests/e2e/README.md** - E2E тесты
|
||||||
|
|
||||||
## 🔍 Pre-Deployment Testing
|
## Pre-Deployment Testing
|
||||||
|
|
||||||
### Локальное тестирование
|
### Локальное тестирование
|
||||||
|
|
||||||
|
|
@ -238,7 +237,7 @@
|
||||||
docker-compose down
|
docker-compose down
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🚀 Deployment Steps
|
## Deployment Steps
|
||||||
|
|
||||||
### 1. Подготовка сервера
|
### 1. Подготовка сервера
|
||||||
|
|
||||||
|
|
@ -308,7 +307,7 @@ server {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 📊 Post-Deployment Verification
|
## Post-Deployment Verification
|
||||||
|
|
||||||
После деплоя проверить:
|
После деплоя проверить:
|
||||||
|
|
||||||
|
|
@ -320,7 +319,7 @@ server {
|
||||||
- [ ] Session save/load работает
|
- [ ] Session save/load работает
|
||||||
- [ ] Логи не содержат ошибок: `docker-compose logs -f`
|
- [ ] Логи не содержат ошибок: `docker-compose logs -f`
|
||||||
|
|
||||||
## 🔧 Мониторинг и обслуживание
|
## Мониторинг и обслуживание
|
||||||
|
|
||||||
### Логи
|
### Логи
|
||||||
|
|
||||||
|
|
@ -357,19 +356,19 @@ docker-compose up -d --build
|
||||||
### Backup
|
### Backup
|
||||||
|
|
||||||
Критичные данные:
|
Критичные данные:
|
||||||
- ✅ `.env` - секреты и конфигурация
|
- `.env` - секреты и конфигурация
|
||||||
- ✅ `certs/` - mTLS сертификаты
|
- `certs/` - mTLS сертификаты
|
||||||
- ℹ️ Пользовательские данные хранятся в DB API (не в FastAPI)
|
- Пользовательские данные хранятся в DB API (не в FastAPI)
|
||||||
|
|
||||||
## ⚡ Performance Considerations
|
## Performance Considerations
|
||||||
|
|
||||||
- ✅ RAG запросы могут занимать до 30 минут (настроено)
|
- RAG запросы могут занимать до 30 минут (настроено)
|
||||||
- ✅ Async/await для всех I/O операций
|
- Async/await для всех I/O операций
|
||||||
- ✅ Connection pooling в httpx clients
|
- Connection pooling в httpx clients
|
||||||
- ℹ️ Рассмотреть rate limiting для production
|
- Рассмотреть rate limiting для production
|
||||||
- ℹ️ Рассмотреть caching для settings (опционально)
|
- Рассмотреть caching для settings (опционально)
|
||||||
|
|
||||||
## 🐛 Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
### Проблема: Контейнер не запускается
|
### Проблема: Контейнер не запускается
|
||||||
|
|
||||||
|
|
@ -400,30 +399,30 @@ docker-compose up -d --build
|
||||||
2. JWT_SECRET_KEY одинаковый между запусками
|
2. JWT_SECRET_KEY одинаковый между запусками
|
||||||
3. Токен не истек (30 дней по умолчанию)
|
3. Токен не истек (30 дней по умолчанию)
|
||||||
|
|
||||||
## ✅ Final Checklist Summary
|
## Final Checklist Summary
|
||||||
|
|
||||||
Перед деплоем в продакшн:
|
Перед деплоем в продакшн:
|
||||||
|
|
||||||
1. ✅ Backend код готов (99% coverage)
|
1. Backend код готов (99% coverage)
|
||||||
2. ✅ Frontend интегрирован
|
2. Frontend интегрирован
|
||||||
3. ✅ Docker конфигурация готова
|
3. Docker конфигурация готова
|
||||||
4. ⚠️ **`.env` создан и заполнен**
|
4. **`.env` создан и заполнен**
|
||||||
5. ⚠️ **`JWT_SECRET_KEY` сгенерирован новый**
|
5. **`JWT_SECRET_KEY` сгенерирован новый**
|
||||||
6. ⚠️ **RAG hosts настроены**
|
6. **RAG hosts настроены**
|
||||||
7. ⚠️ **DB_API_URL настроен**
|
7. **DB_API_URL настроен**
|
||||||
8. ⚠️ **mTLS сертификаты размещены** (если используются)
|
8. **mTLS сертификаты размещены** (если используются)
|
||||||
9. ⚠️ **CORS настроен** (при необходимости)
|
9. **CORS настроен** (при необходимости)
|
||||||
10. ⚠️ **DEBUG=false**
|
10. **DEBUG=false**
|
||||||
11. ✅ Unit тесты passed
|
11. Unit тесты passed
|
||||||
12. ✅ Integration тесты passed (опционально)
|
12. Integration тесты passed (опционально)
|
||||||
13. ✅ Локальное тестирование пройдено
|
13. Локальное тестирование пройдено
|
||||||
14. ✅ Docker build успешен
|
14. Docker build успешен
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Статус готовности: 🟡 ПОЧТИ ГОТОВ**
|
**Статус готовности: ПОЧТИ ГОТОВ**
|
||||||
|
|
||||||
✅ **Готово:** Код, тесты, Docker, документация
|
**Готово:** Код, тесты, Docker, документация
|
||||||
⚠️ **Требуется:** Конфигурация окружения (.env, сертификаты, финальная настройка)
|
**Требуется:** Конфигурация окружения (.env, сертификаты, финальная настройка)
|
||||||
|
|
||||||
После выполнения пунктов из раздела "КРИТИЧНО" → **🟢 ГОТОВ К ПРОДАКШН**
|
После выполнения пунктов из раздела "КРИТИЧНО" → **ГОТОВ К ПРОДАКШН**
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📋 Что реализовано
|
## Что реализовано
|
||||||
|
|
||||||
### 1. Структура проекта
|
### 1. Структура проекта
|
||||||
|
|
||||||
|
|
@ -15,45 +15,45 @@ brief-bench-fastapi/
|
||||||
│ ├── api/
|
│ ├── api/
|
||||||
│ │ └── v1/
|
│ │ └── v1/
|
||||||
│ │ ├── __init__.py
|
│ │ ├── __init__.py
|
||||||
│ │ └── auth.py ✅ POST /api/v1/auth/login
|
│ │ └── auth.py POST /api/v1/auth/login
|
||||||
│ ├── models/
|
│ ├── models/
|
||||||
│ │ ├── __init__.py
|
│ │ ├── __init__.py
|
||||||
│ │ ├── auth.py ✅ LoginRequest, LoginResponse, UserResponse
|
│ │ ├── auth.py LoginRequest, LoginResponse, UserResponse
|
||||||
│ │ ├── settings.py ✅ EnvironmentSettings, UserSettings
|
│ │ ├── settings.py EnvironmentSettings, UserSettings
|
||||||
│ │ ├── analysis.py ✅ SessionCreate, SessionResponse, SessionList
|
│ │ ├── analysis.py SessionCreate, SessionResponse, SessionList
|
||||||
│ │ └── query.py ✅ BenchQueryRequest, BackendQueryRequest
|
│ │ └── query.py BenchQueryRequest, BackendQueryRequest
|
||||||
│ ├── services/
|
│ ├── services/
|
||||||
│ │ ├── __init__.py
|
│ │ ├── __init__.py
|
||||||
│ │ └── auth_service.py ✅ AuthService (login logic)
|
│ │ └── auth_service.py AuthService (login logic)
|
||||||
│ ├── interfaces/
|
│ ├── interfaces/
|
||||||
│ │ ├── __init__.py
|
│ │ ├── __init__.py
|
||||||
│ │ ├── base.py ⚠️ TgBackendInterface (ЗАГЛУШКА - нужна реализация)
|
│ │ ├── base.py TgBackendInterface (ЗАГЛУШКА - нужна реализация)
|
||||||
│ │ └── db_api_client.py ✅ DBApiClient (методы для DB API)
|
│ │ └── db_api_client.py DBApiClient (методы для DB API)
|
||||||
│ ├── middleware/
|
│ ├── middleware/
|
||||||
│ │ └── __init__.py
|
│ │ └── __init__.py
|
||||||
│ ├── utils/
|
│ ├── utils/
|
||||||
│ │ ├── __init__.py
|
│ │ ├── __init__.py
|
||||||
│ │ └── security.py ✅ JWT encode/decode
|
│ │ └── security.py JWT encode/decode
|
||||||
│ ├── __init__.py
|
│ ├── __init__.py
|
||||||
│ ├── config.py ✅ Settings из .env
|
│ ├── config.py Settings из .env
|
||||||
│ ├── dependencies.py ✅ DI: get_db_client, get_current_user
|
│ ├── dependencies.py DI: get_db_client, get_current_user
|
||||||
│ └── main.py ✅ FastAPI app с CORS
|
│ └── main.py FastAPI app с CORS
|
||||||
├── static/ ❌ Пусто (нужно скопировать из rag-bench)
|
├── static/ Пусто (нужно скопировать из rag-bench)
|
||||||
├── tests/ ✅ Полный набор тестов (unit/integration/e2e)
|
├── tests/ Полный набор тестов (unit/integration/e2e)
|
||||||
├── certs/ ❌ Не создана (для mTLS)
|
├── certs/ Не создана (для mTLS)
|
||||||
├── .env.example ✅
|
├── .env.example
|
||||||
├── .gitignore ✅
|
├── .gitignore
|
||||||
├── requirements.txt ✅
|
├── requirements.txt
|
||||||
├── Dockerfile ✅
|
├── Dockerfile
|
||||||
├── docker-compose.yml ✅
|
├── docker-compose.yml
|
||||||
├── DB_API_CONTRACT.md ✅ Полный контракт для DB API
|
├── DB_API_CONTRACT.md Полный контракт для DB API
|
||||||
├── README.md ✅
|
├── README.md
|
||||||
└── PROJECT_STATUS.md ✅ Этот файл
|
└── PROJECT_STATUS.md Этот файл
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ✅ Реализованные компоненты
|
## Реализованные компоненты
|
||||||
|
|
||||||
### 1. Configuration (app/config.py)
|
### 1. Configuration (app/config.py)
|
||||||
- Загрузка из .env через pydantic-settings
|
- Загрузка из .env через pydantic-settings
|
||||||
|
|
@ -88,7 +88,7 @@ brief-bench-fastapi/
|
||||||
|
|
||||||
### 3. Interfaces (app/interfaces/)
|
### 3. Interfaces (app/interfaces/)
|
||||||
|
|
||||||
**base.py (⚠️ ЗАГЛУШКА!):**
|
**base.py (ЗАГЛУШКА!):**
|
||||||
```python
|
```python
|
||||||
class TgBackendInterface:
|
class TgBackendInterface:
|
||||||
def __init__(self, api_prefix: str, **kwargs)
|
def __init__(self, api_prefix: str, **kwargs)
|
||||||
|
|
@ -152,7 +152,7 @@ class TgBackendInterface:
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ❌ Что НЕ реализовано (TODO)
|
## Что НЕ реализовано (TODO)
|
||||||
|
|
||||||
### 1. TgBackendInterface реализация (КРИТИЧНО!)
|
### 1. TgBackendInterface реализация (КРИТИЧНО!)
|
||||||
Файл: `app/interfaces/base.py`
|
Файл: `app/interfaces/base.py`
|
||||||
|
|
@ -259,28 +259,28 @@ class RagService:
|
||||||
- `app/middleware/logging.py` - логирование запросов
|
- `app/middleware/logging.py` - логирование запросов
|
||||||
- `app/middleware/error_handler.py` - глобальная обработка ошибок
|
- `app/middleware/error_handler.py` - глобальная обработка ошибок
|
||||||
|
|
||||||
### 9. Tests ✅ COMPLETED
|
### 9. Tests COMPLETED
|
||||||
- ✅ **Unit Tests** (119 tests, 99% coverage) - `tests/unit/`
|
- **Unit Tests** (119 tests, 99% coverage) - `tests/unit/`
|
||||||
- All services, models, utilities tested in isolation
|
- All services, models, utilities tested in isolation
|
||||||
- All external dependencies mocked
|
- All external dependencies mocked
|
||||||
- Run: `.\run_unit_tests.bat`
|
- Run: `.\run_unit_tests.bat`
|
||||||
- ✅ **Integration Tests** (DB API integration) - `tests/integration/`
|
- **Integration Tests** (DB API integration) - `tests/integration/`
|
||||||
- FastAPI endpoints with real DB API
|
- FastAPI endpoints with real DB API
|
||||||
- Requires DB API service running
|
- Requires DB API service running
|
||||||
- Run: `.\run_integration_tests.bat`
|
- Run: `.\run_integration_tests.bat`
|
||||||
- ✅ **End-to-End Tests** (Full stack) - `tests/e2e/`
|
- **End-to-End Tests** (Full stack) - `tests/e2e/`
|
||||||
- Complete workflows: auth → query → save → retrieve
|
- Complete workflows: auth → query → save → retrieve
|
||||||
- Requires all services (FastAPI + DB API + RAG backends)
|
- Requires all services (FastAPI + DB API + RAG backends)
|
||||||
- Real network calls to RAG backends
|
- Real network calls to RAG backends
|
||||||
- Run: `.\run_e2e_tests.bat`
|
- Run: `.\run_e2e_tests.bat`
|
||||||
- ✅ **Test Documentation** - `TESTING.md`
|
- **Test Documentation** - `TESTING.md`
|
||||||
- Comprehensive testing guide
|
- Comprehensive testing guide
|
||||||
- Setup instructions for each test level
|
- Setup instructions for each test level
|
||||||
- Troubleshooting and best practices
|
- Troubleshooting and best practices
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔑 Важные детали для продолжения
|
## Важные детали для продолжения
|
||||||
|
|
||||||
### Архитектура авторизации
|
### Архитектура авторизации
|
||||||
1. Пользователь отправляет POST /api/v1/auth/login?login=12345678
|
1. Пользователь отправляет POST /api/v1/auth/login?login=12345678
|
||||||
|
|
@ -346,7 +346,7 @@ Body: {
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚀 План дальнейшей работы
|
## План дальнейшей работы
|
||||||
|
|
||||||
### Этап 1: Реализовать TgBackendInterface
|
### Этап 1: Реализовать TgBackendInterface
|
||||||
**Приоритет:** ВЫСОКИЙ
|
**Приоритет:** ВЫСОКИЙ
|
||||||
|
|
@ -398,7 +398,7 @@ app.include_router(analysis.router, prefix="/api/v1")
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📦 Dependencies (requirements.txt)
|
## Dependencies (requirements.txt)
|
||||||
|
|
||||||
```
|
```
|
||||||
fastapi==0.104.1
|
fastapi==0.104.1
|
||||||
|
|
@ -416,7 +416,7 @@ fastapi-cors==0.0.6
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔧 Команды для разработки
|
## Команды для разработки
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Установить зависимости
|
# Установить зависимости
|
||||||
|
|
@ -436,7 +436,7 @@ curl http://localhost:8000/health
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📝 Примечания
|
## Примечания
|
||||||
|
|
||||||
1. **TgBackendInterface** - это ваша реализация, которая будет использоваться во всех клиентах (DBApiClient, возможно RagClient в будущем)
|
1. **TgBackendInterface** - это ваша реализация, которая будет использоваться во всех клиентах (DBApiClient, возможно RagClient в будущем)
|
||||||
|
|
||||||
|
|
@ -454,7 +454,7 @@ curl http://localhost:8000/health
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🎯 Готово к продолжению!
|
## Готово к продолжению!
|
||||||
|
|
||||||
Вся базовая структура создана. Следующий шаг - реализация TgBackendInterface и остальных endpoints.
|
Вся базовая структура создана. Следующий шаг - реализация TgBackendInterface и остальных endpoints.
|
||||||
|
|
||||||
|
|
|
||||||
27
README.md
27
README.md
|
|
@ -4,13 +4,13 @@ FastAPI backend для системы тестирования RAG с multi-user
|
||||||
|
|
||||||
## Возможности
|
## Возможности
|
||||||
|
|
||||||
- 🔐 JWT авторизация (8-значный логин)
|
- JWT авторизация (8-значный логин)
|
||||||
- 🌐 Multi-environment: ИФТ, ПСИ, ПРОМ
|
- Multi-environment: ИФТ, ПСИ, ПРОМ
|
||||||
- 📊 Bench mode: batch тестирование
|
- Bench mode: batch тестирование
|
||||||
- 🤖 Backend mode: имитация бота (вопросы по одному)
|
- Backend mode: имитация бота (вопросы по одному)
|
||||||
- 💾 Сохранение сессий анализа
|
- Сохранение сессий анализа
|
||||||
- 🔒 mTLS для RAG backend
|
- mTLS для RAG backend
|
||||||
- 📝 Аннотации и экспорт
|
- Аннотации и экспорт
|
||||||
|
|
||||||
## Требования
|
## Требования
|
||||||
|
|
||||||
|
|
@ -186,7 +186,6 @@ docker-compose down
|
||||||
|
|
||||||
## Документация
|
## Документация
|
||||||
|
|
||||||
- [CLAUDE.md](CLAUDE.md) - архитектура и гайд для разработки
|
|
||||||
- [TESTING.md](TESTING.md) - руководство по тестированию
|
- [TESTING.md](TESTING.md) - руководство по тестированию
|
||||||
- [PRODUCTION_CHECKLIST.md](PRODUCTION_CHECKLIST.md) - чек-лист для продакшн
|
- [PRODUCTION_CHECKLIST.md](PRODUCTION_CHECKLIST.md) - чек-лист для продакшн
|
||||||
- [DB_API_CONTRACT.md](DB_API_CONTRACT.md) - контракт с DB API
|
- [DB_API_CONTRACT.md](DB_API_CONTRACT.md) - контракт с DB API
|
||||||
|
|
@ -194,13 +193,13 @@ docker-compose down
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
✅ **Проект готов к продакшн**
|
**Проект готов к продакшн**
|
||||||
|
|
||||||
- ✅ Backend полностью реализован (все endpoints, services, interfaces)
|
- Backend полностью реализован (все endpoints, services, interfaces)
|
||||||
- ✅ Frontend интегрирован (HTML/CSS/JS)
|
- Frontend интегрирован (HTML/CSS/JS)
|
||||||
- ✅ 99% test coverage (unit + integration + E2E)
|
- 99% test coverage (unit + integration + E2E)
|
||||||
- ✅ Docker ready
|
- Docker ready
|
||||||
- ⚠️ Требуется: настройка `.env` и сертификатов
|
- Требуется: настройка `.env` и сертификатов
|
||||||
|
|
||||||
**Перед деплоем:** см. [PRODUCTION_CHECKLIST.md](PRODUCTION_CHECKLIST.md)
|
**Перед деплоем:** см. [PRODUCTION_CHECKLIST.md](PRODUCTION_CHECKLIST.md)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -543,7 +543,6 @@ Current coverage:
|
||||||
- [Integration Tests](tests/integration/README.md) - DB API integration
|
- [Integration Tests](tests/integration/README.md) - DB API integration
|
||||||
- [E2E Tests](tests/e2e/README.md) - Full stack testing
|
- [E2E Tests](tests/e2e/README.md) - Full stack testing
|
||||||
- [DB API Contract](DB_API_CONTRACT.md) - External API spec
|
- [DB API Contract](DB_API_CONTRACT.md) - External API spec
|
||||||
- [CLAUDE.md](CLAUDE.md) - Architecture overview
|
|
||||||
- [PROJECT_STATUS.md](PROJECT_STATUS.md) - Implementation status
|
- [PROJECT_STATUS.md](PROJECT_STATUS.md) - Implementation status
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
|
|
||||||
|
class Docs(BaseModel):
|
||||||
|
research: list
|
||||||
|
analytical_hub: list
|
||||||
|
|
||||||
|
|
||||||
|
class RagResponse(BaseModel):
|
||||||
|
"""Ответ от RAG на вопрос пользователя."""
|
||||||
|
body_research: str = Field(description="Текст ответа от Research на вопрос")
|
||||||
|
body_analytical_hub: str = Field(description="Текст ответа от Analytical Hub на вопрос")
|
||||||
|
docs_from_vectorstore: Docs | None = None
|
||||||
|
docs_to_llm: Docs | None = None
|
||||||
|
|
||||||
|
|
||||||
|
class RagResponseBench(RagResponse):
|
||||||
|
"""Ответ на вопрос + время обработки именно этого вопроса."""
|
||||||
|
processing_time_sec: float = Field(
|
||||||
|
description="Время обработки запроса в секундах",
|
||||||
|
ge=0,
|
||||||
|
)
|
||||||
|
question: str = Field(description="Исходный вопрос")
|
||||||
|
|
||||||
|
|
||||||
|
class RagResponseBenchList(BaseModel):
|
||||||
|
answers: list[RagResponseBench]
|
||||||
|
|
@ -107,7 +107,7 @@ pytest -x
|
||||||
pytest -s
|
pytest -s
|
||||||
```
|
```
|
||||||
|
|
||||||
## Покрытие (Coverage)
|
## Покрытие тестами
|
||||||
|
|
||||||
### Unit Tests: **99%** (567 строк, 4 непокрыто)
|
### Unit Tests: **99%** (567 строк, 4 непокрыто)
|
||||||
|
|
||||||
|
|
@ -133,51 +133,51 @@ pytest -s
|
||||||
## Что тестируется
|
## Что тестируется
|
||||||
|
|
||||||
### 1. Authentication (test_auth.py)
|
### 1. Authentication (test_auth.py)
|
||||||
- ✅ Успешная авторизация с валидным 8-значным логином
|
- Успешная авторизация с валидным 8-значным логином
|
||||||
- ✅ Отклонение невалидных форматов логина
|
- Отклонение невалидных форматов логина
|
||||||
- ✅ Обработка ошибок DB API
|
- Обработка ошибок DB API
|
||||||
- ✅ Генерация JWT токенов
|
- Генерация JWT токенов
|
||||||
- ✅ Валидация токенов
|
- Валидация токенов
|
||||||
|
|
||||||
### 2. Settings (test_settings.py)
|
### 2. Settings (test_settings.py)
|
||||||
- ✅ Получение настроек пользователя
|
- Получение настроек пользователя
|
||||||
- ✅ Обновление настроек
|
- Обновление настроек
|
||||||
- ✅ Обработка несуществующих пользователей
|
- Обработка несуществующих пользователей
|
||||||
- ✅ Валидация формата настроек
|
- Валидация формата настроек
|
||||||
- ✅ Требование авторизации
|
- Требование авторизации
|
||||||
|
|
||||||
### 3. Query (test_query.py)
|
### 3. Query (test_query.py)
|
||||||
- ✅ Bench mode запросы
|
- Bench mode запросы
|
||||||
- ✅ Backend mode запросы
|
- Backend mode запросы
|
||||||
- ✅ Валидация окружений (ift/psi/prod)
|
- Валидация окружений (ift/psi/prod)
|
||||||
- ✅ Проверка соответствия apiMode
|
- Проверка соответствия apiMode
|
||||||
- ✅ Обработка ошибок RAG backend
|
- Обработка ошибок RAG backend
|
||||||
- ✅ Построение headers для RAG
|
- Построение headers для RAG
|
||||||
- ✅ Session reset в Backend mode
|
- Session reset в Backend mode
|
||||||
|
|
||||||
### 4. Analysis (test_analysis.py)
|
### 4. Analysis (test_analysis.py)
|
||||||
- ✅ Создание сессий анализа
|
- Создание сессий анализа
|
||||||
- ✅ Получение списка сессий
|
- Получение списка сессий
|
||||||
- ✅ Фильтрация по окружению
|
- Фильтрация по окружению
|
||||||
- ✅ Пагинация
|
- Пагинация
|
||||||
- ✅ Получение конкретной сессии
|
- Получение конкретной сессии
|
||||||
- ✅ Удаление сессии
|
- Удаление сессии
|
||||||
- ✅ Требование авторизации
|
- Требование авторизации
|
||||||
|
|
||||||
### 5. Security (test_security.py)
|
### 5. Security (test_security.py)
|
||||||
- ✅ Создание JWT токенов
|
- Создание JWT токенов
|
||||||
- ✅ Декодирование токенов
|
- Декодирование токенов
|
||||||
- ✅ Обработка невалидных токенов
|
- Обработка невалидных токенов
|
||||||
- ✅ Обработка истекших токенов
|
- Обработка истекших токенов
|
||||||
- ✅ Кастомное время жизни токенов
|
- Кастомное время жизни токенов
|
||||||
|
|
||||||
### 6. Models (test_models.py)
|
### 6. Models (test_models.py)
|
||||||
- ✅ Валидация LoginRequest (8 цифр)
|
- Валидация LoginRequest (8 цифр)
|
||||||
- ✅ Валидация QuestionRequest
|
- Валидация QuestionRequest
|
||||||
- ✅ Валидация BenchQueryRequest
|
- Валидация BenchQueryRequest
|
||||||
- ✅ Валидация BackendQueryRequest
|
- Валидация BackendQueryRequest
|
||||||
- ✅ Валидация EnvironmentSettings
|
- Валидация EnvironmentSettings
|
||||||
- ✅ Дефолтные значения
|
- Дефолтные значения
|
||||||
|
|
||||||
## Моки
|
## Моки
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -435,4 +435,3 @@ When adding new E2E tests:
|
||||||
- [Integration Tests](../integration/README.md) - Tests for DB API integration only
|
- [Integration Tests](../integration/README.md) - Tests for DB API integration only
|
||||||
- [Unit Tests](../unit/) - Fast isolated tests
|
- [Unit Tests](../unit/) - Fast isolated tests
|
||||||
- [DB API Contract](../../DB_API_CONTRACT.md) - External DB API specification
|
- [DB API Contract](../../DB_API_CONTRACT.md) - External DB API specification
|
||||||
- [CLAUDE.md](../../CLAUDE.md) - Project architecture overview
|
|
||||||
|
|
|
||||||
|
|
@ -88,20 +88,20 @@ tests/integration/
|
||||||
|
|
||||||
## Что тестируется
|
## Что тестируется
|
||||||
|
|
||||||
### ✅ Auth Integration (`test_auth_integration.py`)
|
### Auth Integration (`test_auth_integration.py`)
|
||||||
- Успешная авторизация с реальным DB API
|
- Успешная авторизация с реальным DB API
|
||||||
- Генерация и валидация JWT токенов
|
- Генерация и валидация JWT токенов
|
||||||
- Защита endpoint-ов с использованием JWT
|
- Защита endpoint-ов с использованием JWT
|
||||||
- Обработка ошибок аутентификации
|
- Обработка ошибок аутентификации
|
||||||
|
|
||||||
### ✅ Settings Integration (`test_settings_integration.py`)
|
### Settings Integration (`test_settings_integration.py`)
|
||||||
- Получение настроек пользователя из DB API
|
- Получение настроек пользователя из DB API
|
||||||
- Обновление настроек для всех окружений (IFT, PSI, PROD)
|
- Обновление настроек для всех окружений (IFT, PSI, PROD)
|
||||||
- Частичное обновление настроек
|
- Частичное обновление настроек
|
||||||
- Персистентность настроек
|
- Персистентность настроек
|
||||||
- Проверка структуры данных настроек
|
- Проверка структуры данных настроек
|
||||||
|
|
||||||
### ✅ Analysis Integration (`test_analysis_integration.py`)
|
### Analysis Integration (`test_analysis_integration.py`)
|
||||||
- Создание сессий анализа в DB API
|
- Создание сессий анализа в DB API
|
||||||
- Получение списка сессий с фильтрацией
|
- Получение списка сессий с фильтрацией
|
||||||
- Пагинация сессий
|
- Пагинация сессий
|
||||||
|
|
@ -109,7 +109,7 @@ tests/integration/
|
||||||
- Удаление сессий
|
- Удаление сессий
|
||||||
- Целостность данных (включая Unicode, вложенные структуры)
|
- Целостность данных (включая Unicode, вложенные структуры)
|
||||||
|
|
||||||
### ✅ Query Integration (`test_query_integration.py`)
|
### Query Integration (`test_query_integration.py`)
|
||||||
- Получение настроек пользователя для запросов
|
- Получение настроек пользователя для запросов
|
||||||
- Проверка соответствия apiMode (bench/backend)
|
- Проверка соответствия apiMode (bench/backend)
|
||||||
- Обновление настроек между запросами
|
- Обновление настроек между запросами
|
||||||
|
|
@ -117,10 +117,10 @@ tests/integration/
|
||||||
|
|
||||||
## Что НЕ тестируется
|
## Что НЕ тестируется
|
||||||
|
|
||||||
❌ **RAG Backend взаимодействие** - требует запущенные RAG сервисы (IFT/PSI/PROD)
|
**RAG Backend взаимодействие** - требует запущенные RAG сервисы (IFT/PSI/PROD)
|
||||||
❌ **mTLS сертификаты** - требует реальные сертификаты
|
**mTLS сертификаты** - требует реальные сертификаты
|
||||||
❌ **Производительность** - используйте отдельные performance тесты
|
**Производительность** - используйте отдельные performance тесты
|
||||||
❌ **Нагрузочное тестирование** - используйте инструменты типа Locust/K6
|
**Нагрузочное тестирование** - используйте инструменты типа Locust/K6
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue