diff --git a/bot/tools/cron_tool.py b/bot/tools/cron_tool.py index 97d9939..1d1edfd 100644 --- a/bot/tools/cron_tool.py +++ b/bot/tools/cron_tool.py @@ -68,8 +68,8 @@ class CronTool(BaseTool): """Инициализировать БД.""" conn = sqlite3.connect(self.db_path) c = conn.cursor() - - # Создаём таблицу с user_id + + # Создаём таблицу со всеми колонками c.execute(''' CREATE TABLE IF NOT EXISTS cron_jobs ( id INTEGER PRIMARY KEY AUTOINCREMENT, @@ -85,15 +85,32 @@ class CronTool(BaseTool): created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ''') - - # Проверяем есть ли колонка user_id (для обратной совместимости) + + # Проверяем наличие всех колонок (для обратной совместимости) c.execute("PRAGMA table_info(cron_jobs)") columns = [col[1] for col in c.fetchall()] - - if 'user_id' not in columns: - logger.info("Добавление колонки user_id в таблицу cron_jobs") - c.execute('ALTER TABLE cron_jobs ADD COLUMN user_id INTEGER') - + + # Миграции для старых БД + migrations = { + 'prompt': 'ALTER TABLE cron_jobs ADD COLUMN prompt TEXT DEFAULT ""', + 'user_id': 'ALTER TABLE cron_jobs ADD COLUMN user_id INTEGER', + 'enabled': 'ALTER TABLE cron_jobs ADD COLUMN enabled INTEGER DEFAULT 1', + 'notify': 'ALTER TABLE cron_jobs ADD COLUMN notify INTEGER DEFAULT 0', + 'log_results': 'ALTER TABLE cron_jobs ADD COLUMN log_results INTEGER DEFAULT 1', + 'last_run': 'ALTER TABLE cron_jobs ADD COLUMN last_run DATETIME', + 'next_run': 'ALTER TABLE cron_jobs ADD COLUMN next_run DATETIME' + } + + for col_name, alter_query in migrations.items(): + if col_name not in columns: + logger.info(f"Добавление колонки {col_name} в таблицу cron_jobs") + try: + c.execute(alter_query) + except sqlite3.OperationalError as e: + # Игнорируем ошибку если колонка уже существует (race condition) + if "duplicate column" not in str(e).lower(): + raise + conn.commit() conn.close()