Add deployment documentation and enhance project setup scripts

- Introduced `DEPLOYMENT.md` for comprehensive deployment instructions.
- Added `start.bat` and `start.sh` scripts for unified project startup on Windows and Linux/Mac.
- Updated `.gitignore` to exclude additional files and directories.
- Enhanced `main.py` to serve static frontend files and handle SPA routing.
- Configured Vite to output the frontend build to the backend public directory.
- Minor adjustments in `ReviewDetail.tsx` for improved data handling.
This commit is contained in:
Primakov Alexandr Alexandrovich 2025-10-12 23:27:41 +03:00
parent 09cdd06307
commit b297bcbba9
8 changed files with 932 additions and 304 deletions

4
.gitignore vendored
View File

@ -27,6 +27,10 @@ env/
# Database
*.db
*.db-journal
# Frontend build
backend/public/
*.sqlite
*.sqlite3

369
DEPLOYMENT.md Normal file
View File

@ -0,0 +1,369 @@
# 🚀 Развертывание AI Code Review Platform
## 📋 Быстрый старт
### Одна команда для запуска всего:
**Linux/Mac:**
```bash
./start.sh
```
**Windows:**
```bash
start.bat
```
Это автоматически:
1. ✅ Проверит установку Node.js и Python
2. ✅ Установит зависимости frontend
3. ✅ Соберет frontend в `backend/public`
4. ✅ Установит зависимости backend
5. ✅ Создаст `.env` из примера (если нужно)
6. ✅ Запустит сервер на http://localhost:8000
---
## 🔧 Требования
### Системные требования:
- **Python:** 3.10 или выше
- **Node.js:** 18 или выше
- **npm:** 9 или выше
### Проверка установленных версий:
```bash
python --version # или python3 --version
node --version
npm --version
```
---
## ⚙️ Настройка
### 1. Клонирование репозитория
```bash
git clone <repository-url>
cd platform/review
```
### 2. Конфигурация
Отредактируйте `backend/.env`:
```bash
# Ollama Configuration
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=mistral:7b
# Master Git Tokens (optional)
MASTER_GITEA_TOKEN=your_gitea_token_here
MASTER_GITHUB_TOKEN=your_github_token_here
# Security
ENCRYPTION_KEY=your-32-character-encryption-key
```
**Генерация ключа шифрования:**
```python
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
```
### 3. Запуск
```bash
# Linux/Mac
chmod +x start.sh
./start.sh
# Windows
start.bat
```
---
## 🏗️ Архитектура развертывания
### Схема работы:
```
┌─────────────────────────────────────────┐
│ Пользователь │
│ http://localhost:8000 │
└──────────────┬──────────────────────────┘
┌─────────────────────────────────────────┐
│ FastAPI Backend │
│ │
│ ┌─────────────────────────────────┐ │
│ │ API Endpoints │ │
│ │ /api/repositories │ │
│ │ /api/reviews │ │
│ │ /api/webhooks │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Static Files │ │
│ │ Serves: backend/public/ │ │
│ │ (React frontend build) │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
├─────────► SQLite DB
├─────────► Ollama (AI)
└─────────► Git APIs
(Gitea/GitHub/Bitbucket)
```
### Как это работает:
1. **Frontend билдится** в `backend/public/`
2. **Backend раздает** статику из `backend/public/`
3. **Один порт** (8000) для всего
4. **API** доступно на `/api/*`
5. **Frontend** на `/` (все остальные роуты)
---
## 📁 Структура после сборки
```
platform/review/
├── backend/
│ ├── public/ # ← Frontend build (создается автоматически)
│ │ ├── index.html
│ │ ├── assets/
│ │ │ ├── index-*.js
│ │ │ └── index-*.css
│ │ └── ...
│ ├── app/
│ ├── venv/
│ ├── .env
│ └── requirements.txt
├── frontend/
│ ├── src/
│ ├── package.json
│ └── vite.config.ts # ← Настроен на build в ../backend/public
├── start.sh # ← Единый скрипт запуска (Linux/Mac)
└── start.bat # ← Единый скрипт запуска (Windows)
```
---
## 🔄 Процесс сборки
### Что происходит при запуске `start.sh` / `start.bat`:
```bash
1. Проверка Node.js ✓
→ node --version
2. Проверка Python ✓
→ python --version
3. Установка зависимостей frontend ✓
→ cd frontend
→ npm install
4. Сборка frontend ✓
→ npm run build
→ Вывод: backend/public/
5. Установка зависимостей backend ✓
→ cd backend
→ python -m venv venv
→ pip install -r requirements.txt
6. Проверка .env ✓
→ Создание из .env.example если нужно
7. Запуск сервера ✓
→ uvicorn app.main:app --reload
```
---
## 🌐 Доступ к приложению
После запуска доступно:
- **Frontend (UI):** http://localhost:8000
- **API:** http://localhost:8000/api
- **API Docs (Swagger):** http://localhost:8000/docs
- **WebSocket:** ws://localhost:8000/ws
---
## 🛠️ Разработка
### Запуск в режиме разработки (с hot-reload):
**Терминал 1 - Backend:**
```bash
cd backend
source venv/bin/activate # или venv\Scripts\activate на Windows
uvicorn app.main:app --reload
```
**Терминал 2 - Frontend:**
```bash
cd frontend
npm run dev
```
В этом режиме:
- Frontend: http://localhost:5173
- Backend: http://localhost:8000
- Frontend проксирует API запросы на backend
### Пересборка frontend:
```bash
cd frontend
npm run build
```
Frontend автоматически соберется в `backend/public/`
---
## 🐳 Docker (опционально)
TODO: Добавить Dockerfile и docker-compose.yml
---
## 📊 Production Deployment
### Для продакшена рекомендуется:
1. **Использовать Gunicorn + Uvicorn:**
```bash
cd backend
gunicorn app.main:app \
--workers 4 \
--worker-class uvicorn.workers.UvicornWorker \
--bind 0.0.0.0:8000
```
2. **Nginx как reverse proxy:**
```nginx
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /ws {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
```
3. **Systemd service:**
```ini
[Unit]
Description=AI Code Review Platform
After=network.target
[Service]
Type=notify
User=www-data
WorkingDirectory=/path/to/platform/review/backend
ExecStart=/path/to/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
```
---
## 🔧 Troubleshooting
### Проблема: Frontend не отображается
**Решение:**
```bash
cd frontend
npm run build
```
### Проблема: Backend не запускается
**Проверьте:**
1. Установлен ли Python 3.10+
2. Создано ли виртуальное окружение
3. Установлены ли зависимости
4. Корректен ли `.env` файл
### Проблема: Ollama недоступен
**Убедитесь что:**
```bash
# Ollama запущен
ollama serve
# Модель скачана
ollama pull mistral:7b
# Ollama доступен
curl http://localhost:11434/api/version
```
### Проблема: Ошибки шифрования токенов
**Удалите БД и пересоздайте:**
```bash
rm backend/review.db
# Перезапустите сервер
```
---
## 📝 Полезные команды
```bash
# Проверка статуса
ps aux | grep uvicorn
# Просмотр логов
tail -f backend/logs/app.log # если настроено логирование
# Остановка сервера
# Ctrl+C в терминале где запущен
# Очистка
rm -rf backend/public/
rm -rf frontend/node_modules/
rm -rf backend/venv/
```
---
## ✅ Готово!
Теперь у вас есть:
- 🚀 Единая команда запуска
- 📦 Автоматическая сборка frontend
- 🌐 Один порт для всего
- 🔄 Hot-reload в разработке
- 📚 Документация
**Запускайте и наслаждайтесь!** 🎉

619
README.md
View File

@ -1,299 +1,330 @@
# AI Code Review Agent 🤖
# 🤖 AI Code Review Platform
AI агент для автоматического ревью Pull Request с поддержкой **Gitea**, **GitHub** и **Bitbucket**.
Работает на **LangChain/LangGraph** с локальной LLM через **Ollama**.
## 🌟 Особенности
- ✅ **Поддержка множества Git платформ**: Gitea (приоритет), GitHub, Bitbucket
- 🤖 **AI-анализ кода**: использует Ollama с моделью codellama
- 🔄 **Real-time обновления**: WebSocket для отслеживания прогресса
- 🎯 **Умный анализ**: находит баги, проблемы безопасности, нарушения best practices
- 🌐 **Современный UI**: React + TypeScript + Tailwind CSS
- 📊 **Дашборд**: статистика и мониторинг ревью
- 🪝 **Webhook интеграция**: автоматический запуск при создании/обновлении PR
## 🏗️ Архитектура
```
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Git Platform│─────▶│ Backend │─────▶│ Ollama │
│ (Webhook) │ │ FastAPI + │ │ (codellama)│
└─────────────┘ │ LangGraph │ └─────────────┘
└──────┬───────┘
┌──────────────┐
│ Frontend │
│ React + WS │
└──────────────┘
```
## 📋 Требования
- **Python 3.11+**
- **Node.js 18+**
- **Ollama** (установлен и запущен)
## 🚀 Быстрый старт
### 1. Установка Ollama и модели
```bash
# Установите Ollama с https://ollama.ai/
# Загрузите модель codellama
ollama pull codellama
# Запустите Ollama
ollama serve
```
### 2. Backend (FastAPI)
```bash
cd backend
# Создайте виртуальное окружение
python -m venv venv
source venv/bin/activate # На Windows: venv\Scripts\activate
# Установите зависимости
pip install -r requirements.txt
# Создайте .env файл
cp .env.example .env
# Отредактируйте .env и установите:
# - SECRET_KEY (генерируйте случайную строку)
# - ENCRYPTION_KEY (генерируйте случайную строку)
# Запустите сервер
python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
```
Backend будет доступен на `http://localhost:8000`
Swagger документация: `http://localhost:8000/docs`
### 3. Frontend (React)
```bash
cd frontend
# Установите зависимости
npm install
# Запустите dev сервер
npm run dev
```
Frontend будет доступен на `http://localhost:5173`
## 🔧 Настройка
### Backend (.env)
```env
# Ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=codellama
# Database
DATABASE_URL=sqlite+aiosqlite:///./review.db
# Security
SECRET_KEY=your-secret-key-here
ENCRYPTION_KEY=your-encryption-key-here
# Server
HOST=0.0.0.0
PORT=8000
DEBUG=True
# CORS
CORS_ORIGINS=http://localhost:5173,http://localhost:3000
```
### Frontend (.env)
```env
VITE_API_URL=http://localhost:8000
VITE_WS_URL=ws://localhost:8000
```
## 📖 Использование
### 1. Добавление репозитория
1. Откройте UI: `http://localhost:5173`
2. Перейдите на страницу **Репозитории**
3. Нажмите **+ Добавить репозиторий**
4. Заполните форму:
- **Название**: имя вашего проекта
- **Платформа**: Gitea / GitHub / Bitbucket
- **URL**: полный URL репозитория
- **API токен**: токен доступа к Git платформе
### 2. Настройка webhook в Gitea
1. Скопируйте **Webhook URL** из карточки репозитория
2. В Gitea: Settings → Webhooks → Add Webhook
3. Вставьте URL
4. Выберите события: **Pull Request**
5. Сохраните
### 3. Создание Pull Request
1. Создайте PR в вашем репозитории
2. Webhook автоматически запустит ревью
3. Следите за прогрессом в UI (страница **Ревью**)
4. Комментарии появятся в PR автоматически
## 🎯 Что анализирует AI
- 🐛 **Потенциальные баги**: логические ошибки, null/undefined
- 🔒 **Безопасность**: SQL injection, XSS, утечки данных
- 📝 **Best practices**: SOLID, чистый код, паттерны
- ⚡ **Производительность**: неэффективные алгоритмы, утечки памяти
- 📖 **Читаемость**: понятность кода, комментарии
## 📊 API Endpoints
### Repositories
- `GET /api/repositories` - список репозиториев
- `POST /api/repositories` - добавить репозиторий
- `PUT /api/repositories/{id}` - обновить
- `DELETE /api/repositories/{id}` - удалить
### Reviews
- `GET /api/reviews` - список ревью
- `GET /api/reviews/{id}` - детали ревью
- `POST /api/reviews/{id}/retry` - повторить ревью
- `GET /api/reviews/stats/dashboard` - статистика
### Webhooks
- `POST /api/webhooks/gitea/{repository_id}` - Gitea webhook
- `POST /api/webhooks/github/{repository_id}` - GitHub webhook
- `POST /api/webhooks/bitbucket/{repository_id}` - Bitbucket webhook
### WebSocket
- `ws://localhost:8000/ws/reviews` - real-time обновления
## 🛠️ Разработка
### Backend
```bash
cd backend
# Запуск с hot reload
uvicorn app.main:app --reload
# Миграции (если используется Alembic)
alembic upgrade head
```
### Frontend
```bash
cd frontend
# Dev сервер
npm run dev
# Сборка
npm run build
# Предпросмотр сборки
npm run preview
# Линтинг
npm run lint
```
## 🗂️ Структура проекта
```
platform/review/
├── backend/
│ ├── app/
│ │ ├── agents/ # LangGraph агенты
│ │ ├── api/ # API endpoints
│ │ ├── models/ # Database модели
│ │ ├── schemas/ # Pydantic схемы
│ │ ├── services/ # Git платформы
│ │ ├── webhooks/ # Webhook обработчики
│ │ ├── config.py
│ │ ├── database.py
│ │ └── main.py
│ └── requirements.txt
├── frontend/
│ ├── src/
│ │ ├── api/ # API клиент
│ │ ├── components/ # React компоненты
│ │ ├── pages/ # Страницы
│ │ ├── types/ # TypeScript типы
│ │ └── App.tsx
│ └── package.json
├── cloud.md # План проекта
└── README.md # Этот файл
```
## 🔐 Безопасность
- API токены шифруются перед сохранением (Fernet)
- Webhook signature validation
- CORS настроен для конкретных доменов
- Rate limiting (рекомендуется для production)
## 🚀 Production развертывание
### Docker (рекомендуется)
```bash
# TODO: Добавить Dockerfile и docker-compose.yml
```
### Manual
1. Используйте PostgreSQL вместо SQLite
2. Настройте reverse proxy (nginx)
3. Используйте HTTPS
4. Настройте environment variables
5. Используйте process manager (systemd/supervisor)
## 🤝 Вклад в разработку
Contributions welcome!
1. Fork проект
2. Создайте feature branch
3. Commit изменения
4. Push в branch
5. Создайте Pull Request
## 📝 Лицензия
MIT License
## 🙏 Благодарности
- [LangChain](https://github.com/langchain-ai/langchain) - фреймворк для LLM
- [Ollama](https://ollama.ai/) - локальный запуск LLM
- [FastAPI](https://fastapi.tiangolo.com/) - веб-фреймворк
- [React](https://react.dev/) - UI библиотека
## 📞 Поддержка
Возникли проблемы? Создайте Issue в репозитории.
Автоматический ревьювер кода на базе AI для Gitea, GitHub и Bitbucket.
---
Made with ❤️ and 🤖 AI
## 🚀 Быстрый старт
### Запуск одной командой:
**Windows:**
```bash
start.bat
```
**Linux/Mac:**
```bash
chmod +x start.sh
./start.sh
```
Это автоматически:
- ✅ Проверит зависимости
- ✅ Установит пакеты
- ✅ Соберет frontend
- ✅ Запустит сервер
**Готово!** Откройте http://localhost:8000
---
## 📋 Что делает платформа
1. **Получает Pull Request** через webhook
2. **Анализирует код** с помощью AI (Ollama)
3. **Находит проблемы:**
- ❌ Критичные ошибки (синтаксис, логика)
- ⚠️ Важные замечания (code smell, антипаттерны)
- Рекомендации (стиль, best practices)
4. **Публикует комментарии** в PR
---
## 🎯 Особенности
- ✅ **3 платформы:** Gitea, GitHub, Bitbucket
- ✅ **Webhooks:** Автоматический ревью при создании PR
- ✅ **Ручной запуск:** Кнопка "Проверить сейчас"
- ✅ **WebSocket:** Обновления в реальном времени
- ✅ **Детальные комментарии:** Отдельный комментарий на каждую проблему
- ✅ **Мастер токены:** Один токен для всех репозиториев
- ✅ **Единый порт:** Frontend и Backend на 8000
---
## 🛠️ Требования
- **Python:** 3.10+
- **Node.js:** 18+
- **Ollama:** Для запуска AI моделей
### Установка Ollama:
**Linux:**
```bash
curl -fsSL https://ollama.com/install.sh | sh
```
**Windows/Mac:**
Скачайте с https://ollama.com/download
### Скачайте модель:
```bash
ollama pull mistral:7b
# или
ollama pull llama3:8b
```
---
## ⚙️ Настройка
### 1. Клонируйте репозиторий
```bash
git clone <repository-url>
cd platform/review
```
### 2. Настройте `.env`
Файл `backend/.env` будет создан автоматически из `.env.example`.
**Обязательно настройте:**
```bash
# Ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=mistral:7b
# Мастер токены (опционально)
MASTER_GITEA_TOKEN=your_token_here
# Ключ шифрования (обязательно!)
ENCRYPTION_KEY=your-32-char-key-here
```
**Генерация ключа:**
```python
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
```
### 3. Запустите
```bash
./start.sh # Linux/Mac
start.bat # Windows
```
---
## 📖 Использование
### 1. Добавьте репозиторий
http://localhost:8000 → **"Добавить репозиторий"**
- **Платформа:** Gitea/GitHub/Bitbucket
- **URL:** https://git.example.com/owner/repo
- **API Token:** (или оставьте пустым для мастер токена)
### 2. Настройте webhook
Скопируйте webhook URL из списка репозиториев.
**В Gitea:**
Settings → Webhooks → Add Webhook → Gitea
- Payload URL: `http://your-server:8000/api/webhooks/gitea/1`
- Content Type: `application/json`
- Secret: (из списка репозиториев)
- Trigger: Pull Request
### 3. Готово!
Создайте PR и агент автоматически проведет ревью! 🎉
Или нажмите **"🔍 Проверить сейчас"** для ручного запуска.
---
## 📊 Что вы увидите
### В интерфейсе:
```
📊 Репозитории: 5
🔍 Ревью: 23
✅ Успешных: 20
❌ Ошибок: 3
```
### В Gitea/GitHub:
**Общий комментарий:**
```
🤖 AI Code Review
📊 Статистика
- Всего проблем: 4
- ❌ Критичных: 4
💡 Рекомендации
⚠️ Найдены критичные проблемы!
Пожалуйста, исправьте их перед мержем.
📝 Детальные комментарии для каждой
проблемы опубликованы ниже.
```
**Отдельные комментарии:**
```
❌ src/pages/search-character.tsx:58
ERROR: Опечатка в строке:
'shmapplication/json' должно быть
'application/json'
```
---
## 🔧 Разработка
### Backend:
```bash
cd backend
source venv/bin/activate # Windows: venv\Scripts\activate
uvicorn app.main:app --reload
```
### Frontend:
```bash
cd frontend
npm run dev
```
В режиме разработки:
- Frontend: http://localhost:5173
- Backend: http://localhost:8000
---
## 📁 Структура
```
platform/review/
├── backend/ # FastAPI + LangGraph
│ ├── app/
│ │ ├── agents/ # AI агент
│ │ ├── api/ # REST endpoints
│ │ ├── models/ # SQLAlchemy models
│ │ ├── services/ # Git API clients
│ │ └── main.py # Entry point
│ ├── public/ # Frontend build (auto-generated)
│ └── requirements.txt
├── frontend/ # React + Vite
│ ├── src/
│ └── package.json
├── start.sh # Единый запуск (Linux/Mac)
├── start.bat # Единый запуск (Windows)
└── DEPLOYMENT.md # Подробная документация
```
---
## 🌟 Возможности
### ✅ Реализовано:
- [x] Поддержка Gitea, GitHub, Bitbucket
- [x] Webhooks для автоматического ревью
- [x] Ручной запуск ревью
- [x] Детальные комментарии с ссылками на строки
- [x] WebSocket для real-time обновлений
- [x] Мастер токены для упрощения настройки
- [x] Единый запуск (frontend + backend)
- [x] Экранирование HTML тегов в комментариях
- [x] Контекст PR (title + description) в промпте
- [x] Retry механизм для failed ревью
- [x] Модальные окна вместо alert/confirm
### 🚧 Планируется:
- [ ] Docker контейнер
- [ ] Статусы PR (Approve/Request Changes)
- [ ] Настраиваемые правила ревью
- [ ] Кастомные промпты
- [ ] Множественные AI модели
- [ ] Метрики и аналитика
---
## 🤝 Вклад
Pull requests приветствуются!
Для больших изменений сначала откройте issue для обсуждения.
---
## 📄 Лицензия
MIT
---
## 📚 Документация
- **[DEPLOYMENT.md](DEPLOYMENT.md)** - Полное руководство по развертыванию
- **[ARCHITECTURE.md](ARCHITECTURE.md)** - Архитектура проекта
- **[DEBUG_GUIDE.md](DEBUG_GUIDE.md)** - Отладка AI агента
- **[MODEL_RECOMMENDATION.md](MODEL_RECOMMENDATION.md)** - Рекомендации по моделям
- **[MASTER_TOKEN_FEATURE.md](MASTER_TOKEN_FEATURE.md)** - Мастер токены
- **[HTML_ESCAPE_FIX.md](HTML_ESCAPE_FIX.md)** - Экранирование HTML
---
## 🆘 Помощь
### Проблемы с Ollama?
```bash
# Проверьте что Ollama запущен
curl http://localhost:11434/api/version
# Скачайте модель
ollama pull mistral:7b
```
### Frontend не отображается?
```bash
cd frontend
npm run build
```
### Backend не запускается?
Проверьте `.env` файл и установите `ENCRYPTION_KEY`.
---
## 🎉 Начните использовать!
```bash
# 1. Клонируйте
git clone <url>
cd platform/review
# 2. Настройте .env
nano backend/.env
# 3. Запустите
./start.sh # или start.bat
# 4. Откройте
http://localhost:8000
```
**Готово!** 🚀

View File

@ -2,8 +2,11 @@
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse
from contextlib import asynccontextmanager
from typing import List
from pathlib import Path
import json
from app.config import settings
@ -67,15 +70,39 @@ app.add_middleware(
# Include API routes
app.include_router(api_router, prefix="/api")
@app.get("/")
async def root():
"""Root endpoint"""
return {
"message": "AI Code Review Agent API",
"version": "0.1.0",
"docs": "/docs"
}
# Serve static files (frontend build)
public_dir = Path(__file__).parent.parent / "public"
if public_dir.exists():
# Serve assets (JS, CSS, images)
app.mount("/assets", StaticFiles(directory=str(public_dir / "assets")), name="assets")
@app.get("/", response_class=FileResponse)
async def serve_frontend_root():
"""Serve frontend index.html"""
return FileResponse(str(public_dir / "index.html"))
@app.get("/{full_path:path}", response_class=FileResponse)
async def serve_frontend_routes(full_path: str):
"""Serve frontend for all routes (SPA support)"""
# Skip API and WebSocket routes
if full_path.startswith(("api/", "ws/", "docs", "redoc", "openapi.json")):
return None
file_path = public_dir / full_path
if file_path.exists() and file_path.is_file():
return FileResponse(str(file_path))
# Fallback to index.html for SPA routing
return FileResponse(str(public_dir / "index.html"))
else:
@app.get("/")
async def root():
"""Root endpoint (when frontend not built)"""
return {
"message": "AI Code Review Agent API",
"version": "0.1.0",
"docs": "/docs",
"note": "Frontend not built. Run 'npm run build' in frontend directory."
}
@app.get("/health")

View File

@ -16,8 +16,9 @@ export default function ReviewDetail() {
const { data: review, isLoading } = useQuery({
queryKey: ['review', id],
queryFn: () => getReview(Number(id)),
refetchInterval: (data) => {
refetchInterval: (query) => {
// Refetch if review is in progress
const data = query.state.data;
return data?.status && ['pending', 'fetching', 'analyzing', 'commenting'].includes(data.status)
? 5000
: false;

View File

@ -4,6 +4,10 @@ import react from '@vitejs/plugin-react'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
build: {
outDir: '../backend/public',
emptyOutDir: true,
},
server: {
port: 5173,
proxy: {

95
start.bat Normal file
View File

@ -0,0 +1,95 @@
@echo off
REM Единый скрипт запуска AI Code Review Platform
echo.
echo ========================================
echo AI Code Review Platform - Запуск
echo ========================================
echo.
REM 1. Проверка Node.js
echo [STEP 1/7] Проверка Node.js...
where node >nul 2>nul
if %ERRORLEVEL% NEQ 0 (
echo [ERROR] Node.js не установлен! Установите Node.js 18+ и попробуйте снова.
pause
exit /b 1
)
node --version
echo [OK] Node.js установлен
echo.
REM 2. Проверка Python
echo [STEP 2/7] Проверка Python...
where python >nul 2>nul
if %ERRORLEVEL% NEQ 0 (
echo [ERROR] Python не установлен! Установите Python 3.10+ и попробуйте снова.
pause
exit /b 1
)
python --version
echo [OK] Python установлен
echo.
REM 3. Установка зависимостей frontend
echo [STEP 3/7] Установка зависимостей frontend...
cd frontend
if not exist "node_modules\" (
echo Установка npm пакетов...
call npm install
) else (
echo node_modules уже существует, пропускаем...
)
echo [OK] Зависимости frontend установлены
echo.
REM 4. Сборка frontend
echo [STEP 4/7] Сборка frontend...
call npm run build
echo [OK] Frontend собран в backend/public
echo.
REM 5. Установка зависимостей backend
cd ..\backend
echo [STEP 5/7] Установка зависимостей backend...
if not exist "venv\" (
echo Создание виртуального окружения...
python -m venv venv
)
REM Активация venv
call venv\Scripts\activate.bat
REM Установка зависимостей
pip install -r requirements.txt
echo [OK] Зависимости backend установлены
echo.
REM 6. Проверка .env
echo [STEP 6/7] Проверка конфигурации...
if not exist ".env" (
echo [WARNING] Файл .env не найден!
if exist ".env.example" (
echo Создаем .env из примера...
copy .env.example .env
echo [OK] Создан .env файл
echo [WARNING] ВАЖНО: Отредактируйте .env и добавьте необходимые токены!
) else (
echo [ERROR] .env.example не найден!
)
)
echo.
REM 7. Запуск backend
echo [STEP 7/7] Запуск сервера...
echo ========================================
echo.
echo Backend: http://localhost:8000
echo Frontend: http://localhost:8000
echo API Docs: http://localhost:8000/docs
echo.
echo Для остановки нажмите Ctrl+C
echo.
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

97
start.sh Normal file
View File

@ -0,0 +1,97 @@
#!/bin/bash
# Единый скрипт запуска AI Code Review Platform
set -e
echo "🚀 AI Code Review Platform - Запуск"
echo "===================================="
echo ""
# Цвета для вывода
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 1. Проверка Node.js
echo -e "${YELLOW}📦 Проверка Node.js...${NC}"
if ! command -v node &> /dev/null; then
echo "❌ Node.js не установлен! Установите Node.js 18+ и попробуйте снова."
exit 1
fi
echo -e "${GREEN}✅ Node.js $(node --version)${NC}"
echo ""
# 2. Проверка Python
echo -e "${YELLOW}🐍 Проверка Python...${NC}"
if ! command -v python &> /dev/null && ! command -v python3 &> /dev/null; then
echo "❌ Python не установлен! Установите Python 3.10+ и попробуйте снова."
exit 1
fi
PYTHON_CMD="python3"
if ! command -v python3 &> /dev/null; then
PYTHON_CMD="python"
fi
echo -e "${GREEN}✅ Python $($PYTHON_CMD --version)${NC}"
echo ""
# 3. Установка зависимостей frontend
echo -e "${YELLOW}📦 Установка зависимостей frontend...${NC}"
cd frontend
if [ ! -d "node_modules" ]; then
npm install
else
echo "node_modules уже существует, пропускаем..."
fi
echo -e "${GREEN}✅ Зависимости frontend установлены${NC}"
echo ""
# 4. Сборка frontend
echo -e "${YELLOW}🔨 Сборка frontend...${NC}"
npm run build
echo -e "${GREEN}✅ Frontend собран в backend/public${NC}"
echo ""
# 5. Установка зависимостей backend
cd ../backend
echo -e "${YELLOW}📦 Установка зависимостей backend...${NC}"
if [ ! -d "venv" ]; then
echo "Создание виртуального окружения..."
$PYTHON_CMD -m venv venv
fi
# Активация venv
source venv/bin/activate
# Установка зависимостей
pip install -r requirements.txt
echo -e "${GREEN}✅ Зависимости backend установлены${NC}"
echo ""
# 6. Проверка .env
if [ ! -f ".env" ]; then
echo -e "${YELLOW}⚠️ Файл .env не найден!${NC}"
echo "Создаем .env из примера..."
if [ -f ".env.example" ]; then
cp .env.example .env
echo -e "${GREEN}✅ Создан .env файл${NC}"
echo -e "${YELLOW}⚠️ ВАЖНО: Отредактируйте .env и добавьте необходимые токены!${NC}"
else
echo "❌ .env.example не найден!"
fi
echo ""
fi
# 7. Запуск backend
echo -e "${GREEN}🎉 Запуск сервера...${NC}"
echo "===================================="
echo ""
echo "📍 Backend: http://localhost:8000"
echo "📍 Frontend: http://localhost:8000"
echo "📍 API Docs: http://localhost:8000/docs"
echo ""
echo "Для остановки нажмите Ctrl+C"
echo ""
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload