mirror of
https://github.com/FerraSoft/bottohelp.git
synced 2026-08-06 21:55:03 +00:00
Подготовка к релизу
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
import sqlite3
|
||||
import os
|
||||
|
||||
def final_migration():
|
||||
"""Финальная миграция для полного соответствия схеме models.py"""
|
||||
try:
|
||||
# Создаем резервную копию текущей базы данных
|
||||
if os.path.exists('telegram_bot.db'):
|
||||
backup_name = f"telegram_bot_backup_{sqlite3.datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.db"
|
||||
os.rename('telegram_bot.db', backup_name)
|
||||
print(f"Создана резервная копия: {backup_name}")
|
||||
|
||||
# Создаем новую базу данных с правильной схемой
|
||||
conn = sqlite3.connect('telegram_bot.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
print("СОЗДАНИЕ НОВОЙ БАЗЫ ДАННЫХ ПО ПРАВИЛЬНОЙ СХЕМЕ")
|
||||
|
||||
# Создаем все таблицы согласно схеме из models.py
|
||||
tables_sql = [
|
||||
'''CREATE TABLE users (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
telegram_id INTEGER UNIQUE NOT NULL,
|
||||
username TEXT,
|
||||
first_name TEXT,
|
||||
last_name TEXT,
|
||||
joined_date DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
last_activity DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
reputation INTEGER DEFAULT 0,
|
||||
rank TEXT DEFAULT 'Новичок',
|
||||
warnings INTEGER DEFAULT 0,
|
||||
is_active BOOLEAN DEFAULT 1,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
)''',
|
||||
|
||||
'''CREATE TABLE scores (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER UNIQUE NOT NULL,
|
||||
total_score INTEGER DEFAULT 0,
|
||||
message_count INTEGER DEFAULT 0,
|
||||
game_wins INTEGER DEFAULT 0,
|
||||
donations_total REAL DEFAULT 0.0,
|
||||
last_updated DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||||
)''',
|
||||
|
||||
'''CREATE TABLE achievements (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT UNIQUE NOT NULL,
|
||||
description TEXT NOT NULL,
|
||||
condition_type TEXT NOT NULL,
|
||||
condition_value TEXT NOT NULL,
|
||||
badge TEXT NOT NULL,
|
||||
is_active BOOLEAN DEFAULT 1,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
)''',
|
||||
|
||||
'''CREATE TABLE user_achievements (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL,
|
||||
achievement_id INTEGER NOT NULL,
|
||||
unlocked_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id),
|
||||
FOREIGN KEY (achievement_id) REFERENCES achievements(id),
|
||||
UNIQUE(user_id, achievement_id)
|
||||
)''',
|
||||
|
||||
'''CREATE TABLE warnings (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL,
|
||||
reason TEXT NOT NULL,
|
||||
admin_id INTEGER NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id),
|
||||
FOREIGN KEY (admin_id) REFERENCES users(id)
|
||||
)''',
|
||||
|
||||
'''CREATE TABLE donations (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL,
|
||||
amount REAL NOT NULL,
|
||||
year INTEGER NOT NULL DEFAULT (strftime('%Y', 'now')),
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||||
)''',
|
||||
|
||||
'''CREATE TABLE errors (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
admin_id INTEGER NOT NULL,
|
||||
error_type TEXT NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
description TEXT,
|
||||
status TEXT DEFAULT 'new',
|
||||
priority TEXT DEFAULT 'medium',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
ai_analysis TEXT,
|
||||
todo_added BOOLEAN DEFAULT 0,
|
||||
resolved_at DATETIME,
|
||||
FOREIGN KEY (admin_id) REFERENCES users(id)
|
||||
)''',
|
||||
|
||||
'''CREATE TABLE scheduled_posts (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
chat_id INTEGER NOT NULL,
|
||||
text TEXT NOT NULL,
|
||||
image_path TEXT,
|
||||
schedule_time DATETIME NOT NULL,
|
||||
created_by INTEGER DEFAULT 0,
|
||||
status TEXT DEFAULT 'pending',
|
||||
published_at DATETIME,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
)''',
|
||||
|
||||
'''CREATE TABLE games (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
type TEXT NOT NULL,
|
||||
status TEXT DEFAULT 'active',
|
||||
participants TEXT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
)'''
|
||||
]
|
||||
|
||||
# Создаем таблицы
|
||||
for i, sql in enumerate(tables_sql, 1):
|
||||
cursor.execute(sql)
|
||||
print(f"Создана таблица {i}/{len(tables_sql)}")
|
||||
|
||||
# Инициализируем достижения
|
||||
achievements = [
|
||||
("Первое сообщение", "Отправить первое сообщение в чате", "messages", "1", "💬"),
|
||||
("Болтун", "Отправить 100 сообщений", "messages", "100", "🗣️"),
|
||||
("Коммуникатор", "Отправить 1000 сообщений", "messages", "1000", "📢"),
|
||||
("Первая игра", "Сыграть первую игру", "games", "1", "🎮"),
|
||||
("Игрок", "Выиграть 10 игр", "games", "10", "🏆"),
|
||||
("Чемпион", "Выиграть 100 игр", "games", "100", "👑"),
|
||||
("Первый донат", "Сделать первый донат", "donations", "1", "💰"),
|
||||
("Меценат", "Пожертвовать 1000 рублей", "donations", "1000", "🏦"),
|
||||
("Благотворитель", "Пожертвовать 10000 рублей", "donations", "10000", "💎"),
|
||||
("Новичок", "Набрать 100 очков", "score", "100", "🌟"),
|
||||
("Активист", "Набрать 1000 очков", "score", "1000", "⭐"),
|
||||
("Эксперт", "Набрать 10000 очков", "score", "10000", "🏅"),
|
||||
("Легенда", "Набрать 100000 очков", "score", "100000", "👑"),
|
||||
("Долгожитель", "Быть активным 7 дней", "days_active", "7", "📅"),
|
||||
("Ветеран", "Быть активным 30 дней", "days_active", "30", "🎖️"),
|
||||
]
|
||||
|
||||
# Добавляем достижения
|
||||
for name, description, condition_type, condition_value, badge in achievements:
|
||||
cursor.execute("""
|
||||
INSERT INTO achievements (name, description, condition_type, condition_value, badge)
|
||||
VALUES (?, ?, ?, ?, ?)
|
||||
""", (name, description, condition_type, condition_value, badge))
|
||||
|
||||
print(f"Добавлено {len(achievements)} достижений")
|
||||
|
||||
# Проверяем созданные таблицы
|
||||
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
|
||||
tables = cursor.fetchall()
|
||||
table_names = [table[0] for table in tables]
|
||||
|
||||
print(f"СОЗДАНО ТАБЛИЦ: {len(table_names)}")
|
||||
print(f"СПИСОК ТАБЛИЦ: {table_names}")
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
print("ФИНАЛЬНАЯ МИГРАЦИЯ ЗАВЕРШЕНА УСПЕШНО!")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"Ошибка финальной миграции: {e}")
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
final_migration()
|
||||
Reference in New Issue
Block a user