232 lines
7.0 KiB
Markdown
232 lines
7.0 KiB
Markdown
# 🚀 Разработка и тестирование всей системы
|
||
|
||
## 📋 Что запускаем:
|
||
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 доступен
|
||
- Проверьте формат токенов |