Files
Profeto/alembic/versions/0016_schedules.py
shangfangjianandnew-provider/LongCat-2.0 < 0a5a14cbbb 采集任务支持手动触发 + 定时调度(cron)
后端:
- 新增 Scheduler + ScheduledTask 核心模块(croniter 解析 cron 表达式)
- 新增 Schedule 数据模型(alembic 0016)
- 新增 /api/v1/admin/schedules CRUD 接口
- lifespan 启动时注册默认定时任务并加载数据库配置
- 默认任务:每日比赛/积分榜/30分钟统计回填(默认禁用)

前端:
- 设置页新增「定时任务」管理区块
- 支持:新建/启用禁用/立即执行/删除定时任务
- 显示:任务ID、类型、cron表达式、上次执行时间/状态

依赖:新增 croniter>=2.0

Co-Authored-By: new-provider/LongCat-2.0 <<EMAIL>>
2026-09-21 01:36:54 +08:00

39 lines
1.1 KiB
Python

"""新增 schedules 表
Revision ID: 0016_schedules
Revises: 0015_bzzoiro_single_source
Create Date: 2026-09-21
定时采集任务配置表。
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = '0016_schedules'
down_revision: Union[str, None] = '0015_bzzoiro_single_source'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.create_table(
'schedules',
sa.Column('id', sa.String(50), primary_key=True),
sa.Column('task', sa.String(20), nullable=False),
sa.Column('cron', sa.String(100), nullable=False),
sa.Column('leagues', sa.Text()),
sa.Column('enabled', sa.Boolean(), server_default='true'),
sa.Column('last_run_at', sa.DateTime(timezone=True)),
sa.Column('last_status', sa.String(20)),
sa.Column('created_at', sa.DateTime(timezone=True)),
sa.Column('updated_at', sa.DateTime(timezone=True)),
)
def downgrade() -> None:
op.drop_table('schedules')