Some checks reported errors
continuous-integration/drone/push Build encountered an error
Основные изменения: ✨ Новые функции: - Система регистрации пользователей с множественными счетами - Автоматическое подтверждение выигрышей через inline-кнопки - Механизм переигровки для неподтвержденных выигрышей (24 часа) - Подтверждение на уровне счетов (каждый счет подтверждается отдельно) - Скрипт полной очистки базы данных 🔧 Технические улучшения: - Исправлена ошибка MissingGreenlet при lazy loading (добавлен joinedload/selectinload) - Добавлено поле claimed_at для отслеживания времени подтверждения - Пакетное добавление счетов с выбором розыгрыша - Проверка владения конкретным счетом при подтверждении 📚 Документация: - docs/AUTO_CONFIRM_SYSTEM.md - Полная документация системы подтверждения - docs/ACCOUNT_BASED_CONFIRMATION.md - Подтверждение на уровне счетов - docs/REGISTRATION_SYSTEM.md - Система регистрации - docs/ADMIN_COMMANDS.md - Команды администратора - docs/CLEAR_DATABASE.md - Очистка БД - docs/QUICK_GUIDE.md - Быстрое начало - docs/UPDATE_LOG.md - Журнал обновлений 🗄️ База данных: - Миграция 003: Таблицы accounts, winner_verifications - Миграция 004: Поле claimed_at в таблице winners - Скрипт scripts/clear_database.py для полной очистки 🎮 Новые команды: Админские: - /check_unclaimed <lottery_id> - Проверка неподтвержденных выигрышей - /redraw <lottery_id> - Повторный розыгрыш - /add_accounts - Пакетное добавление счетов - /list_accounts <telegram_id> - Список счетов пользователя Пользовательские: - /register - Регистрация с вводом данных - /my_account - Просмотр своих счетов - Callback confirm_win_{id} - Подтверждение выигрыша 🛠️ Makefile: - make clear-db - Очистка всех данных из БД (с подтверждением) 🔒 Безопасность: - Проверка владения счетом при подтверждении - Защита от подтверждения чужих счетов - Независимое подтверждение каждого выигрышного счета 📊 Логика работы: 1. Пользователь регистрируется и добавляет счета 2. Счета участвуют в розыгрыше 3. Победители получают уведомление с кнопкой подтверждения 4. Каждый счет подтверждается отдельно (24 часа на подтверждение) 5. Неподтвержденные выигрыши переигрываются через /redraw
228 lines
7.3 KiB
Markdown
228 lines
7.3 KiB
Markdown
# 🗑️ Скрипт очистки базы данных
|
||
|
||
## Описание
|
||
|
||
`clear_database.py` - скрипт для полной очистки всех данных из базы данных бота.
|
||
|
||
## ⚠️ ВНИМАНИЕ!
|
||
|
||
**Этот скрипт удаляет ВСЕ данные без возможности восстановления:**
|
||
- Всех пользователей
|
||
- Все розыгрыши (активные и завершенные)
|
||
- Все счета участников
|
||
- Все записи об участии
|
||
- Всех победителей
|
||
- Все записи верификации
|
||
|
||
## Использование
|
||
|
||
### Через Makefile (рекомендуется)
|
||
|
||
```bash
|
||
make clear-db
|
||
```
|
||
|
||
Система попросит подтверждение:
|
||
```
|
||
⚠️ ВНИМАНИЕ! Это удалит ВСЕ данные из базы данных!
|
||
- Все пользователи
|
||
- Все розыгрыши
|
||
- Все счета
|
||
- Все участия
|
||
- Всех победителей
|
||
|
||
Вы уверены? Введите 'yes' для подтверждения:
|
||
```
|
||
|
||
### Напрямую через Python
|
||
|
||
```bash
|
||
cd /home/trevor/new_lottery_bot
|
||
source .venv/bin/activate
|
||
python scripts/clear_database.py
|
||
```
|
||
|
||
## Что делает скрипт
|
||
|
||
1. **Подключается к базе данных** используя `DATABASE_URL` из `.env`
|
||
|
||
2. **Удаляет данные в правильном порядке:**
|
||
- `winner_verifications` - записи верификации победителей
|
||
- `winners` - записи о победителях
|
||
- `participations` - записи об участии в розыгрышах
|
||
- `accounts` - счета участников
|
||
- `lotteries` - розыгрыши
|
||
- `users` - пользователи
|
||
|
||
3. **Сбрасывает счетчики ID (sequences):**
|
||
- `users_id_seq` → 1
|
||
- `lotteries_id_seq` → 1
|
||
- `accounts_id_seq` → 1
|
||
- `participations_id_seq` → 1
|
||
- `winners_id_seq` → 1
|
||
- `winner_verifications_id_seq` → 1
|
||
|
||
4. **Фиксирует транзакцию** (COMMIT)
|
||
|
||
5. **Закрывает соединение**
|
||
|
||
## Вывод скрипта
|
||
|
||
Пример успешного выполнения:
|
||
|
||
```
|
||
INFO:__main__:🔌 Подключение к базе данных...
|
||
|
||
INFO:__main__:🗑️ Удаление данных из таблиц...
|
||
INFO:__main__:------------------------------------------------------------
|
||
INFO:__main__:✅ winner_verifications - удалено 0 строк
|
||
INFO:__main__:✅ winners - удалено 2 строк
|
||
INFO:__main__:✅ participations - удалено 1 строк
|
||
INFO:__main__:✅ accounts - удалено 2 строк
|
||
INFO:__main__:✅ lotteries - удалено 1 строк
|
||
INFO:__main__:✅ users - удалено 2 строк
|
||
INFO:__main__:------------------------------------------------------------
|
||
|
||
INFO:__main__:🔄 Сброс последовательностей...
|
||
INFO:__main__:------------------------------------------------------------
|
||
INFO:__main__:✅ users_id_seq
|
||
INFO:__main__:✅ lotteries_id_seq
|
||
INFO:__main__:✅ accounts_id_seq
|
||
INFO:__main__:✅ participations_id_seq
|
||
INFO:__main__:✅ winners_id_seq
|
||
INFO:__main__:✅ winner_verifications_id_seq
|
||
INFO:__main__:------------------------------------------------------------
|
||
|
||
INFO:__main__:============================================================
|
||
INFO:__main__:🎉 ВСЕ ДАННЫЕ УСПЕШНО УДАЛЕНЫ ИЗ БАЗЫ ДАННЫХ!
|
||
INFO:__main__:============================================================
|
||
|
||
INFO:__main__:Следующие ID начнутся с 1:
|
||
INFO:__main__: - users.id
|
||
INFO:__main__: - lotteries.id
|
||
INFO:__main__: - accounts.id
|
||
INFO:__main__: - participations.id
|
||
INFO:__main__: - winners.id
|
||
INFO:__main__: - winner_verifications.id
|
||
|
||
INFO:__main__:✅ Соединение с БД закрыто
|
||
```
|
||
|
||
## Когда использовать
|
||
|
||
### ✅ Безопасные сценарии:
|
||
|
||
- **Разработка/тестирование**: Очистка тестовых данных
|
||
- **Staging окружение**: Подготовка к тестированию
|
||
- **Миграция**: Перед полным переносом данных
|
||
- **Сброс демо**: Возврат к чистому состоянию
|
||
|
||
### ❌ НЕ использовать:
|
||
|
||
- **Production база**: НИКОГДА не запускайте на рабочей БД
|
||
- **Активные розыгрыши**: Если есть незавершенные розыгрыши
|
||
- **Без бэкапа**: Всегда делайте резервную копию перед очисткой
|
||
|
||
## Безопасность
|
||
|
||
### Файл читает DATABASE_URL из .env:
|
||
|
||
```env
|
||
DATABASE_URL=postgresql+asyncpg://user:password@host:port/database
|
||
```
|
||
|
||
### Проверка перед запуском:
|
||
|
||
```bash
|
||
# Проверьте что вы на правильной базе
|
||
grep DATABASE_URL .env
|
||
```
|
||
|
||
### Создание бэкапа (ОБЯЗАТЕЛЬНО для production):
|
||
|
||
```bash
|
||
# PostgreSQL
|
||
pg_dump -h localhost -U bot_user -d bot_db > backup_$(date +%Y%m%d_%H%M%S).sql
|
||
|
||
# Восстановление
|
||
psql -h localhost -U bot_user -d bot_db < backup_20251116_140000.sql
|
||
```
|
||
|
||
## Альтернативы
|
||
|
||
### Мягкая очистка (сохранение структуры):
|
||
|
||
```sql
|
||
-- Очистить только данные розыгрышей
|
||
DELETE FROM winners;
|
||
DELETE FROM participations;
|
||
DELETE FROM lotteries;
|
||
```
|
||
|
||
### Выборочная очистка:
|
||
|
||
```sql
|
||
-- Удалить только тестовые данные
|
||
DELETE FROM users WHERE club_card_number LIKE 'TEST%';
|
||
```
|
||
|
||
## Требования
|
||
|
||
- Python 3.12+
|
||
- Установленные зависимости (`pip install -r requirements.txt`)
|
||
- Файл `.env` с корректным `DATABASE_URL`
|
||
- Права на изменение данных в БД
|
||
|
||
## Технические детали
|
||
|
||
### Используемые библиотеки:
|
||
|
||
```python
|
||
from sqlalchemy import text
|
||
from sqlalchemy.ext.asyncio import create_async_engine
|
||
```
|
||
|
||
### Асинхронное выполнение:
|
||
|
||
```python
|
||
async with engine.begin() as conn:
|
||
await conn.execute(text('DELETE FROM table_name'))
|
||
```
|
||
|
||
### Обработка транзакций:
|
||
|
||
- `engine.begin()` - автоматический COMMIT при успехе
|
||
- `engine.dispose()` - закрытие всех соединений
|
||
|
||
## Отладка
|
||
|
||
### Проблемы с подключением:
|
||
|
||
```bash
|
||
# Проверка доступности БД
|
||
psql -h 192.168.0.102 -U bot_user -d bot_db -c "SELECT 1"
|
||
```
|
||
|
||
### Проверка прав:
|
||
|
||
```sql
|
||
-- В psql
|
||
SELECT has_database_privilege('bot_user', 'bot_db', 'CONNECT');
|
||
SELECT has_table_privilege('bot_user', 'users', 'DELETE');
|
||
```
|
||
|
||
### Логи:
|
||
|
||
Скрипт использует стандартный logging с уровнем INFO. Для отладки:
|
||
|
||
```python
|
||
logging.basicConfig(level=logging.DEBUG)
|
||
```
|
||
|
||
## См. также
|
||
|
||
- `docs/ADMIN_GUIDE.md` - Руководство администратора
|
||
- `scripts/setup_postgres.sh` - Настройка PostgreSQL
|
||
- `migrations/` - Миграции базы данных
|
||
- `Makefile` - Все доступные команды
|