""" Update existing job to use predefined task and add new event sync job """ import asyncio import sys from pathlib import Path # Add backend to path sys.path.insert(0, str(Path(__file__).parent.parent)) from sqlalchemy import text, update from app.database import engine from app.models.db.scheduled_job import ScheduledJob, JobType async def update_jobs(): """Update existing job and add new event sync job""" async with engine.begin() as conn: print("🔄 Updating scheduled jobs...") # 1. Update existing job to use predefined task result = await conn.execute(text(""" UPDATE scheduled_jobs SET job_type = 'predefined', predefined_function = 'sync_solar_system_positions', function_params = '{"days": 7, "source": "nasa_horizons_cron"}'::jsonb, description = '每日同步太阳系天体位置数据(使用内置任务)' WHERE id = 1 RETURNING id, name """)) updated = result.fetchone() if updated: print(f"✅ Updated job ID {updated[0]}: {updated[1]} -> predefined task") # 2. Add new celestial events sync job (disabled) result = await conn.execute(text(""" INSERT INTO scheduled_jobs ( name, job_type, predefined_function, function_params, cron_expression, description, is_active ) VALUES ( '天体事件同步', 'predefined', 'sync_celestial_events', '{"days_ahead": 30}'::jsonb, '0 3 * * *', '每日凌晨3点同步未来30天的天体事件(预留功能,暂未实现)', false ) ON CONFLICT DO NOTHING RETURNING id, name """)) new_job = result.fetchone() if new_job: print(f"✅ Added new job ID {new_job[0]}: {new_job[1]} (disabled)") else: print("ℹ️ Event sync job already exists") # 3. Show all jobs print("\n📋 Current scheduled jobs:") result = await conn.execute(text(""" SELECT id, name, job_type, predefined_function, is_active, cron_expression FROM scheduled_jobs ORDER BY id """)) for row in result.fetchall(): status = "🟢 启用" if row[4] else "🔴 禁用" job_type_display = "内置任务" if row[2] == 'predefined' else "自定义代码" print(f" {status} ID {row[0]}: {row[1]}") print(f" 类型: {job_type_display} | 函数: {row[3]} | CRON: {row[5]}") if __name__ == "__main__": asyncio.run(update_jobs())