- Добавлена колонка job в profiles (устраняет ошибку column job does not exist) - Добавлена колонка state в users (устраняет предупреждения State column does not exist) - Исправлен триггер create_initial_profile() для включения looking_for - Колонка looking_for сделана nullable с DEFAULT 'both' - Добавлена колонка interested_in как современный синоним для looking_for - Созданы индексы для производительности: idx_profiles_job, idx_users_state, idx_profiles_interested_in Патчи: - sql/fix_looking_for_column.sql - sql/add_job_and_state_columns.sql Утилиты: - bin/apply_all_patches.sh - автоматическое применение всех патчей Документация: - docs/DATABASE_FIXES.md - подробное описание исправлений - docs/HEALTH_CHECK.md - чеклист проверки здоровья бота - docs/FIXES_SUMMARY_2025-11-06.md - краткая сводка изменений Fixes: #job-column-error #state-column-warning #looking-for-constraint
200 lines
5.2 KiB
Markdown
200 lines
5.2 KiB
Markdown
# Быстрая проверка здоровья бота
|
||
|
||
Используйте этот чеклист после развёртывания или обновления бота.
|
||
|
||
## ✅ Чеклист проверки
|
||
|
||
### 1. Проверка контейнера
|
||
```bash
|
||
docker compose ps
|
||
# Ожидается: telegram-tinder-bot в состоянии "running" (healthy)
|
||
```
|
||
|
||
### 2. Проверка логов (нет критичных ошибок)
|
||
```bash
|
||
docker compose logs bot --tail 50
|
||
# ✅ Должно быть: "Bot initialized successfully"
|
||
# ✅ Должно быть: "Bot username: @your_bot_name"
|
||
# ❌ НЕ должно быть: "column X does not exist" (критическая ошибка)
|
||
```
|
||
|
||
### 3. Проверка схемы БД
|
||
```bash
|
||
# Проверка критичных колонок
|
||
PGPASSWORD='your_password' psql -h host -p 5432 -U user -d db_name << 'EOF'
|
||
SELECT
|
||
table_name,
|
||
column_name,
|
||
data_type,
|
||
is_nullable
|
||
FROM information_schema.columns
|
||
WHERE table_name IN ('users', 'profiles')
|
||
AND column_name IN ('state', 'job', 'looking_for', 'interested_in', 'occupation')
|
||
ORDER BY table_name, column_name;
|
||
EOF
|
||
```
|
||
|
||
**Ожидаемый результат:**
|
||
```
|
||
table_name | column_name | data_type | is_nullable
|
||
------------+----------------+--------------------+-------------
|
||
profiles | interested_in | character varying | YES
|
||
profiles | job | character varying | YES
|
||
profiles | looking_for | character varying | YES
|
||
profiles | occupation | character varying | YES
|
||
users | state | character varying | YES
|
||
```
|
||
|
||
### 4. Проверка триггера
|
||
```bash
|
||
PGPASSWORD='your_password' psql -h host -p 5432 -U user -d db_name -c \
|
||
"SELECT proname FROM pg_proc WHERE proname = 'create_initial_profile';"
|
||
```
|
||
|
||
**Ожидается:** `create_initial_profile` (1 строка)
|
||
|
||
### 5. Проверка индексов
|
||
```bash
|
||
PGPASSWORD='your_password' psql -h host -p 5432 -U user -d db_name << 'EOF'
|
||
SELECT indexname
|
||
FROM pg_indexes
|
||
WHERE indexname IN ('idx_profiles_job', 'idx_users_state', 'idx_profiles_interested_in');
|
||
EOF
|
||
```
|
||
|
||
**Ожидается:** 3 строки с названиями индексов
|
||
|
||
---
|
||
|
||
## 🔧 Типичные проблемы и решения
|
||
|
||
### Проблема: "column job does not exist"
|
||
**Решение:**
|
||
```bash
|
||
./bin/apply_all_patches.sh
|
||
docker compose restart bot
|
||
```
|
||
|
||
### Проблема: "State column does not exist" (много раз)
|
||
**Решение:**
|
||
```bash
|
||
PGPASSWORD='password' psql -h host -p 5432 -U user -d db_name \
|
||
-c "ALTER TABLE users ADD COLUMN IF NOT EXISTS state VARCHAR(50);"
|
||
docker compose restart bot
|
||
```
|
||
|
||
### Проблема: "looking_for violates not-null constraint"
|
||
**Решение:**
|
||
```bash
|
||
PGPASSWORD='password' psql -h host -p 5432 -U user -d db_name \
|
||
-f sql/fix_looking_for_column.sql
|
||
docker compose restart bot
|
||
```
|
||
|
||
### Проблема: Бот не запускается (exit code 1)
|
||
**Диагностика:**
|
||
```bash
|
||
docker compose logs bot --tail 100
|
||
# Ищите строки с ERROR или "does not exist"
|
||
```
|
||
|
||
**Решения:**
|
||
1. Проверьте `.env` - все переменные DB_* заданы?
|
||
2. Проверьте подключение к БД: `PGPASSWORD='password' psql -h host -p 5432 -U user -d db_name -c "SELECT 1;"`
|
||
3. Примените все патчи: `./bin/apply_all_patches.sh`
|
||
4. Пересоберите контейнер: `make update`
|
||
|
||
---
|
||
|
||
## 📊 Быстрая диагностика одной командой
|
||
|
||
```bash
|
||
# Создайте alias для удобства
|
||
alias bot-health='docker compose ps && echo "=== LOGS ===" && docker compose logs bot --tail 20'
|
||
|
||
# Использование
|
||
bot-health
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Команды для разработки
|
||
|
||
```bash
|
||
# Полное обновление (pull + rebuild + migrate + restart)
|
||
make update
|
||
|
||
# Применение миграций
|
||
make migrate
|
||
|
||
# Только перезапуск
|
||
docker compose restart bot
|
||
|
||
# Пересборка с нуля
|
||
make clean && make install
|
||
|
||
# Проверка синтаксиса TypeScript
|
||
npm run build
|
||
|
||
# Запуск в режиме разработки (локально)
|
||
npm run dev
|
||
```
|
||
|
||
---
|
||
|
||
## 📝 Переменные окружения (.env)
|
||
|
||
Обязательные:
|
||
```env
|
||
DB_HOST=192.168.0.102
|
||
DB_PORT=5432
|
||
DB_NAME=telegram_tinder_bot
|
||
DB_USERNAME=trevor
|
||
DB_PASSWORD=your_secure_password
|
||
|
||
TELEGRAM_BOT_TOKEN=your_bot_token
|
||
JWT_SECRET=your_jwt_secret
|
||
APP_SECRET=your_app_secret
|
||
|
||
NODE_ENV=production
|
||
PORT=3000
|
||
```
|
||
|
||
Опциональные:
|
||
```env
|
||
DEEPSEEK_API_KEY=your_deepseek_key # Для AI фич
|
||
LOG_LEVEL=info # debug | info | warn | error
|
||
```
|
||
|
||
---
|
||
|
||
## 🆘 Экстренное восстановление
|
||
|
||
Если бот полностью сломан:
|
||
|
||
```bash
|
||
# 1. Остановить всё
|
||
docker compose down
|
||
|
||
# 2. Сделать бэкап БД
|
||
./bin/backup_db.sh
|
||
|
||
# 3. Откатить к последнему коммиту
|
||
git reset --hard HEAD
|
||
|
||
# 4. Применить все патчи заново
|
||
./bin/apply_all_patches.sh
|
||
|
||
# 5. Пересобрать
|
||
make install
|
||
|
||
# 6. Запустить
|
||
docker compose up -d
|
||
```
|
||
|
||
---
|
||
|
||
**Версия:** 1.0
|
||
**Дата:** 2025-11-06
|
||
**Для:** Telegram Tinder Bot v2.0
|