docs: Add review events and versioning documentation

This commit is contained in:
Primakov Alexandr Alexandrovich 2025-10-13 14:20:23 +03:00
parent 2db1225618
commit 47bbb4ebc4

View File

@ -0,0 +1,264 @@
# Персистентные события Review и система версионирования
## Что добавлено
### 1. Сохранение событий review в БД
#### Backend
- ✅ Модель `ReviewEvent` для хранения событий процесса review
- ✅ API endpoint `/api/reviews/{review_id}/events` для получения событий
- ✅ Автоматическое сохранение всех событий в БД при обработке review
- ✅ Связь с моделью Review через relationship
**Структура события:**
```python
class ReviewEvent:
id: int
review_id: int
event_type: str # agent_step, llm_message, review_started, etc.
step: Optional[str] # fetch_pr_info, analyze_files, etc.
message: Optional[str]
data: Optional[Dict]
created_at: datetime
```
#### Frontend
- ✅ Компонент `ReviewStream` загружает исторические события из БД
- ✅ События отображаются даже после завершения review
- ✅ При обновлении страницы события восстанавливаются
**Использование:**
```tsx
<ReviewStream reviewId={reviewId} />
```
### 2. Показ версии бэкенда
#### Backend
- ✅ Файл `backend/VERSION` с текущей версией (semver format)
- ✅ API endpoint `/api/version` для получения версии
#### Frontend
- ✅ Компонент `Footer` показывает версию внизу страницы
- ✅ Автоматическое обновление версии каждые 5 минут
- ✅ Кеширование версии для производительности
### 3. Автоповышение версии (Git Hook)
#### Скрипты
**`bump_version.sh`** - Скрипт повышения версии:
```bash
bash bump_version.sh patch # 0.1.0 → 0.1.1
bash bump_version.sh minor # 0.1.0 → 0.2.0
bash bump_version.sh major # 0.1.0 → 1.0.0
```
**`.git-hooks/pre-commit`** - Pre-commit hook:
- Автоматически вызывается при каждом коммите
- Анализирует изменения в `backend/` директории
- Повышает версию на основе типа коммита
#### Правила версионирования
Версия повышается автоматически на основе префикса коммита:
| Префикс коммита | Изменение версии | Пример |
|-----------------|------------------|---------|
| `feat:` или `feature:` | MINOR | 0.1.0 → 0.2.0 |
| `fix:` или `bugfix:` | PATCH | 0.1.0 → 0.1.1 |
| `BREAKING:` или `major:` | MAJOR | 0.1.0 → 1.0.0 |
| Остальные | PATCH | 0.1.0 → 0.1.1 |
**Примеры:**
```bash
git commit -m "feat: Add new feature" # 0.1.0 → 0.2.0
git commit -m "fix: Fix critical bug" # 0.1.0 → 0.1.1
git commit -m "BREAKING: Remove old API" # 0.1.0 → 1.0.0
git commit -m "docs: Update README" # 0.1.0 → 0.1.1
```
## Установка Git Hook
Чтобы активировать автоповышение версии:
```bash
# Из корня проекта
git config core.hooksPath .git-hooks
# Сделать hook исполняемым (Linux/Mac)
chmod +x .git-hooks/pre-commit
```
На Windows Git Bash автоматически обрабатывает права выполнения.
## Отключение hook
Если нужно закоммитить без повышения версии:
```bash
# Одноразово
git commit --no-verify -m "Your message"
# Полностью отключить
git config core.hooksPath .git/hooks
```
## Миграция БД
Для добавления таблицы `review_events`:
```bash
cd backend
python migrate.py
```
Или вручную:
```bash
sqlite3 backend/review.db < backend/migrations/add_review_events.sql
```
## API Endpoints
### Получить события review
```http
GET /api/reviews/{review_id}/events
```
**Ответ:**
```json
[
{
"id": 1,
"review_id": 1,
"event_type": "agent_step",
"step": "fetch_pr_info",
"message": "Получение информации о PR...",
"data": {},
"created_at": "2025-10-13T10:30:00"
}
]
```
### Получить версию бэкенда
```http
GET /api/version
```
**Ответ:**
```json
{
"version": "0.1.0"
}
```
## Структура проекта
```
├── backend/
│ ├── VERSION # Файл версии
│ ├── migrations/
│ │ └── add_review_events.sql # Миграция для таблицы событий
│ ├── app/
│ │ ├── models/
│ │ │ └── review_event.py # Модель события
│ │ ├── schemas/
│ │ │ └── review_event.py # Схемы события
│ │ └── api/
│ │ └── reviews.py # API endpoints
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── ReviewStream.tsx # Компонент стриминга
│ │ │ └── Footer.tsx # Футер с версией
│ │ └── api/
│ │ └── client.ts # API клиент
├── .git-hooks/
│ ├── pre-commit # Pre-commit hook
│ └── README.md # Документация hooks
├── bump_version.sh # Скрипт повышения версии
└── docs/
└── REVIEW_EVENTS_AND_VERSIONING.md # Эта документация
```
## Обновление на сервере
После деплоя:
1. Применить миграции:
```bash
cd ~/code-review-agent/backend
python migrate.py
```
2. Перезапустить сервис:
```bash
sudo systemctl restart ai-review
```
3. Проверить версию:
```bash
curl http://localhost:8000/api/version
```
## Проверка работы
### Backend
```bash
# Проверить что таблица создана
sqlite3 backend/review.db ".tables"
# Должна быть таблица review_events
# Проверить версию
cat backend/VERSION
# Должна быть версия в формате X.Y.Z
# Проверить API
curl http://localhost:8000/api/version
```
### Frontend
1. Откройте приложение в браузере
2. Внизу страницы должна быть видна версия: `Backend v0.1.0`
3. Откройте страницу review
4. Компонент "Процесс Review" должен показывать события даже после завершения
## Troubleshooting
### Git hook не работает
```bash
# Проверить настройку
git config core.hooksPath
# Переустановить
git config core.hooksPath .git-hooks
# На Windows может потребоваться Git Bash
```
### События не сохраняются
```bash
# Проверить что таблица существует
sqlite3 backend/review.db "SELECT * FROM review_events LIMIT 1;"
# Применить миграцию
python backend/migrate.py
```
### Версия не отображается на UI
1. Проверьте что файл `backend/VERSION` существует
2. Проверьте endpoint: `curl http://localhost:8000/api/version`
3. Проверьте консоль браузера на ошибки
4. Очистите кеш браузера (Ctrl+F5)