feat: 支持创建任务时自定义crontab并清理冗余代码

- 添加创建任务时的crontab编辑控件
- 修复创建任务按钮状态重置问题
- 创建任务后自动加载到调度器
- 删除废弃的手动创建任务API和相关代码
This commit is contained in:
2026-01-05 20:53:25 +08:00
parent 0fd21960e8
commit a5de813c82
8 changed files with 40 additions and 77 deletions
+2 -32
View File
@@ -5,7 +5,7 @@ from datetime import datetime, timedelta
from pydantic import BaseModel, Field
from backend.models import get_db, User
from backend.schemas.task import TaskCreate, TaskUpdate, TaskResponse
from backend.schemas.task import TaskUpdate, TaskResponse
from backend.services.task_service import TaskService
from backend.dependencies import get_current_user
@@ -16,37 +16,7 @@ class CronValidateRequest(BaseModel):
"""Cron 表达式验证请求"""
cron_expression: str = Field(..., min_length=9, description="Crontab 表达式")
@router.post("/", response_model=TaskResponse, status_code=status.HTTP_201_CREATED, summary="创建打卡任务")
async def create_task(
task_data: TaskCreate,
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db)
):
"""
创建新的打卡任务(基于模板)
现在的任务创建流程:
1. 管理员在后台创建模板(包含完整的 payload_config
2. 用户基于模板创建任务,填写字段值
3. 系统自动生成完整的 payload_config
注意:直接创建任务的方式已废弃,请使用模板接口。
"""
try:
task = TaskService.create_task(current_user.id, task_data, db)
return task
except ValueError as e:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=str(e)
)
except Exception as e:
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail=f"创建任务失败: {str(e)}"
)
# create_task_from_template: 已在 templates.py 中定义
@router.get("/", response_model=List[TaskResponse], summary="获取当前用户的任务列表")
async def get_tasks(
+3 -1
View File
@@ -200,6 +200,7 @@ async def create_task_from_template(
- **thread_id**: 接龙项目 ID
- **field_values**: 用户填写的字段值
- **task_name**: 任务名称(可选)
- **cron_expression**: Cron 表达式(可选,默认每天 20:00)
"""
task = TemplateService.create_task_from_template(
template_id=request.template_id,
@@ -207,6 +208,7 @@ async def create_task_from_template(
field_values=request.field_values,
user_id=current_user.id,
task_name=request.task_name,
db=db
db=db,
cron_expression=request.cron_expression
)
return task