Files
tg_tinder_bot/docs/HEALTH_CHECK.md
Andrew K. Choi 88d9ccd75d fix(database): Исправлены критические ошибки БД - job, state, looking_for
- Добавлена колонка 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
2025-11-06 10:30:35 +09:00

5.2 KiB
Raw Blame History

Быстрая проверка здоровья бота

Используйте этот чеклист после развёртывания или обновления бота.

Чеклист проверки

1. Проверка контейнера

docker compose ps
# Ожидается: telegram-tinder-bot в состоянии "running" (healthy)

2. Проверка логов (нет критичных ошибок)

docker compose logs bot --tail 50
# ✅ Должно быть: "Bot initialized successfully"
# ✅ Должно быть: "Bot username: @your_bot_name"
# ❌ НЕ должно быть: "column X does not exist" (критическая ошибка)

3. Проверка схемы БД

# Проверка критичных колонок
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. Проверка триггера

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. Проверка индексов

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"

Решение:

./bin/apply_all_patches.sh
docker compose restart bot

Проблема: "State column does not exist" (много раз)

Решение:

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"

Решение:

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)

Диагностика:

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

📊 Быстрая диагностика одной командой

# Создайте alias для удобства
alias bot-health='docker compose ps && echo "=== LOGS ===" && docker compose logs bot --tail 20'

# Использование
bot-health

🚀 Команды для разработки

# Полное обновление (pull + rebuild + migrate + restart)
make update

# Применение миграций
make migrate

# Только перезапуск
docker compose restart bot

# Пересборка с нуля
make clean && make install

# Проверка синтаксиса TypeScript
npm run build

# Запуск в режиме разработки (локально)
npm run dev

📝 Переменные окружения (.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

Опциональные:

DEEPSEEK_API_KEY=your_deepseek_key  # Для AI фич
LOG_LEVEL=info  # debug | info | warn | error

🆘 Экстренное восстановление

Если бот полностью сломан:

# 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