sno-quiz/DEVELOPMENT.md
2025-09-17 22:22:14 +03:00

232 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🚀 Разработка и тестирование всей системы
## 📋 Что запускаем:
1. **Backend** (Go) - API сервер на порту 8080
2. **Frontend** (React) - Веб-приложение на порту 5173
3. **Bot** (Python) - Telegram бот
## 🔧 Предварительные настройки
### 1. Backend
```bash
cd backend
cp .env.example .env
# Настройте .env:
# - DATABASE_URL=postgres://user:password@localhost:5432/quiz_app?sslmode=disable
# - REDIS_URL=redis://localhost:6379/0
# - SECRET_KEY=your-very-secret-key
# - PORT=8080
```
### 2. Frontend
```bash
cd frontend
cp .env.example .env
# Настройте .env:
# - VITE_API_BASE_URL=http://localhost:8080/api
```
### 3. Bot
```bash
cd bot
cp .env.example .env
# Настройте .env:
# - BOT_TOKEN=ваш_токен_бота
# - BACKEND_API_URL=http://localhost:8080
# - FRONTEND_URL=http://localhost:5173
# - BOT_USERNAME=ваш_бот_юзернейм
# - ADMIN_USER_IDS=ваш_telegram_id
```
## 🚀 Запуск системы
### Вариант 1: Ручной запуск (рекомендуется для разработки)
Откройте 3 отдельных терминала:
**Терминал 1 - Backend:**
```bash
cd backend
go run cmd/server/main.go
```
Должен увидеть: `Server running on port 8080`
**Терминал 2 - Frontend:**
```bash
cd frontend
pnpm install
pnpm dev
```
Должен увидеть: `Local: http://localhost:5173/`
**Терминал 3 - Bot:**
```bash
cd bot
pip install -r requirements.txt
python bot.py
```
Должен увидеть: `Starting bot @YourBotUsername`
### Вариант 2: Одновременный запуск (с помощью tmux)
```bash
# Создайте новую tmux сессию
tmux new-session -s quiz-app
# Разделите окно на 3 панели
tmux split-window -h
tmux split-window -v
# В каждой панели запустите свой компонент
# Верхняя левая: Backend
cd backend && go run cmd/server/main.go
# Верхняя правая: Frontend
cd frontend && pnpm dev
# Нижняя: Bot
cd bot && python bot.py
# Переключение между панелями: Ctrl+B + стрелки
# Отключиться от сессии: Ctrl+B + D
# Подключиться обратно: tmux attach -t quiz-app
```
### Вариант 3: С помощью Docker Compose (если настроено)
```bash
docker-compose up -d
```
## 🧪 Тестирование
### 1. Проверка Backend API
```bash
curl http://localhost:8080/health
# Должен вернуть статус 200
```
### 2. Проверка Frontend
Откройте в браузере: http://localhost:5173
### 3. Проверка Bot
Найдите вашего бота в Telegram: @YourBotUsername
Отправьте команду `/start`
## 🎫 Тестирование QR-кодов
### Шаг 1: Создайте тестового администратора
1. Получите ваш Telegram User ID: `@userinfobot`
2. Добавьте его в `bot/.env`: `ADMIN_USER_IDS=ваш_id`
### Шаг 2: Сгенерируйте QR-коды через бота
```
/admin
→ Генерировать QR-коды
→ Выберите тип: reward
→ Введите сумму: 50
→ Получите токены
```
### Шаг 3: Протестируйте сканирование
1. Откройте фронтенд: http://localhost:5173
2. Перейдите на страницу QR-сканера
3. Создайте QR-код с одним из токенов
4. Отсканируйте его через приложение
### Шаг 4: Проверьте интеграцию
- QR-код должен быть успешно отсканирован
- Должны появиться звезды на балансе
- В backend должны появиться записи о сканировании
## 🔍 Отладка
### Проверьте логи:
```bash
# Backend логи (в терминале)
# Tail логи если запущено как сервис
tail -f /var/log/quiz-app/backend.log
# Frontend логи (в консоли браузера)
# Откройте DevTools → Console
# Bot логи (в терминале)
```
### Общие проблемы:
1. **Порт занят**: `lsof -i :8080` и `kill -9 PID`
2. **Backend не запущен**: Frontend не сможет подключиться к API
3. **Bot не запущен**: Telegram команды не будут работать
4. **База данных**: Убедитесь, что PostgreSQL и Redis запущены
## 📱 Тестирование на мобильном
### Доступ к локальному серверу с телефона:
1. **Wi-Fi сеть**: телефон и компьютер должны быть в одной сети
2. **IP адрес**: `ifconfig` или `ipconfig` чтобы узнать IP
3. **Настройте .env файлы**:
```
# Frontend .env
VITE_API_BASE_URL=http://192.168.1.100:8080/api
# Bot .env
BACKEND_API_URL=http://192.168.1.100:8080
FRONTEND_URL=http://192.168.1.100:5173
```
### Telegram Web App:
1. Откройте бота в Telegram
2. Нажмите на кнопку "Открыть Викторины"
3. Должно открыться веб-приложение
## ✅ Проверочный чеклист
- [ ] Backend запущен на порту 8080
- [ ] Frontend запущен на порту 5173
- [ ] Bot запущен и отвечает на команды
- [ ] База данных PostgreSQL работает
- [ ] Redis работает
- [ ] QR-коды генерируются через бота
- [ ] QR-коды сканируются через фронтенд
- [ ] Баллы начисляются за сканирование
- [ ] Викторины работают корректно
- [ ] Магазин призов функционирует
## 🛑 Остановка
### Ручная остановка:
```bash
# В каждом терминале нажмите Ctrl+C
```
### Через tmux:
```bash
tmux kill-session -t quiz-app
```
### Через Docker:
```bash
docker-compose down
```
## 🚨 Частые проблемы
### Backend не стартует:
- Проверьте PostgreSQL и Redis: `brew services list`
- Проверьте порты: `lsof -i :8080`
- Проверьте .env файл
### Frontend не видит API:
- Проверьте VITE_API_BASE_URL в .env
- Убедитесь, что backend запущен
- Проверьте CORS настройки в backend
### Bot не работает:
- Проверьте BOT_TOKEN
- Убедитесь, что бот не заблокирован
- Проверьте права доступа к API
### QR-коды не сканируются:
- Проверьте права доступа к камере
- Убедитесь, что backend API доступен
- Проверьте формат токенов