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