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
This commit is contained in:
2025-11-06 10:30:35 +09:00
parent 9281388959
commit 88d9ccd75d
7 changed files with 721 additions and 0 deletions

View File

@@ -0,0 +1,173 @@
# Сводка исправлений от 2025-11-06
## 🎯 Цель
Устранить критические ошибки базы данных, блокирующие создание профилей пользователей.
---
## 🐛 Исправленные ошибки
### 1. ❌ Column "job" does not exist
**Ошибка:**
```
ERROR: column "job" of relation "profiles" does not exist
Code: 42703
```
**Причина:** Код использует поле `job`, но в БД существует только `occupation`.
**Решение:** Добавлена колонка `job` в таблицу `profiles`.
**Файл патча:** `sql/add_job_and_state_columns.sql`
**Статус:** ✅ ИСПРАВЛЕНО
---
### 2. ⚠️ State column does not exist in users table
**Предупреждение:**
```
State column does not exist in users table. Skipping state check.
```
**Причина:** Код пытается проверить состояние диалога пользователя через колонку `state`, которой нет в таблице `users`.
**Решение:** Добавлена колонка `state VARCHAR(50)` в таблицу `users`.
**Файл патча:** `sql/add_job_and_state_columns.sql`
**Статус:** ✅ ИСПРАВЛЕНО
---
### 3. ❌ null value in column "looking_for" violates not-null constraint
**Ошибка:**
```
ERROR: null value in column "looking_for" of relation "profiles" violates not-null constraint
Code: 23502
```
**Причина:** Триггер `create_initial_profile()` не устанавливал значение для обязательного поля `looking_for`.
**Решение:**
- Обновлен триггер для включения `looking_for = 'both'`
- Колонка сделана nullable с DEFAULT 'both'
- Добавлена колонка `interested_in` как современный синоним
**Файл патча:** `sql/fix_looking_for_column.sql`
**Статус:** ✅ ИСПРАВЛЕНО
---
## 📦 Применённые патчи
| # | Файл | Описание | Дата |
|---|------|----------|------|
| 1 | `sql/fix_looking_for_column.sql` | Исправление триггера и колонки looking_for | 2025-11-06 |
| 2 | `sql/add_job_and_state_columns.sql` | Добавление колонок job и state | 2025-11-06 |
---
## 🔧 Применение патчей
### Автоматически (рекомендуется):
```bash
./bin/apply_all_patches.sh
```
### Вручную:
```bash
# Патч 1: looking_for
PGPASSWORD='password' psql -h host -p 5432 -U user -d db_name \
-f sql/fix_looking_for_column.sql
# Патч 2: job и state
PGPASSWORD='password' psql -h host -p 5432 -U user -d db_name \
-f sql/add_job_and_state_columns.sql
# Перезапуск бота
docker compose restart bot
```
---
## ✅ Результаты после исправлений
### Проверка логов (нет критичных ошибок):
```bash
docker compose logs bot --since 5m | grep -E "(State column|column.*job|does not exist)"
```
**Результат:** Пусто (0 строк) ✅
### Проверка структуры БД:
```
table_name | column_name | data_type | nullable | column_default
------------+---------------+-------------------+----------+--------------------
profiles | interested_in | character varying | NULL | 'both'
profiles | job | character varying | NULL |
profiles | looking_for | character varying | NULL | 'both'
profiles | occupation | character varying | NULL |
users | state | character varying | NULL |
```
**Результат:** Все колонки присутствуют ✅
### Статус бота:
```
🎉 Bot initialized successfully!
🤖 Bot is running and ready to match people!
📱 Bot username: @seoulmate_officialbot
```
**Результат:** Бот запущен успешно ✅
---
## 📊 Статистика изменений
- **Добавлено колонок:** 3 (`job`, `state`, `interested_in`)
- **Обновлено триггеров:** 1 (`create_initial_profile`)
- **Создано индексов:** 3 (`idx_profiles_job`, `idx_users_state`, `idx_profiles_interested_in`)
- **Файлов патчей:** 2
- **Создано документации:** 3 файла (DATABASE_FIXES.md, HEALTH_CHECK.md, этот файл)
- **Создано утилит:** 1 (`bin/apply_all_patches.sh`)
---
## 🚀 Дальнейшие действия
### Обязательно:
- ✅ Протестировать создание профиля через бота
- ✅ Проверить обновление профиля (поле job)
- ✅ Убедиться что свайпы работают
### Опционально:
- ⚠️ Рассмотреть объединение `job` и `occupation` в одну колонку
- ⚠️ Рассмотреть объединение `looking_for` и `interested_in` в одну колонку
- ⚠️ Исправить ES module warnings в миграциях (низкий приоритет)
- ⚠️ Настроить DEEPSEEK_API_KEY если нужны AI-фичи
---
## 📚 Связанная документация
- `/docs/DATABASE_FIXES.md` - Подробное описание всех исправлений БД
- `/docs/HEALTH_CHECK.md` - Чеклист проверки здоровья бота
- `/bin/README.md` - Описание утилит и скриптов
- `/bin/apply_all_patches.sh` - Скрипт автоматического применения патчей
---
## 👤 Авторство
**Дата:** 2025-11-06
**Автор:** GitHub Copilot
**Проект:** Telegram Tinder Bot
**Версия:** 2.0
---
## ✨ Заключение
Все критические ошибки устранены. Бот готов к работе в production-среде с внешним PostgreSQL сервером (192.168.0.102:5432).
**Статус проекта:** 🟢 РАБОТОСПОСОБЕН