#!/usr/bin/env python # -*- coding: utf-8 -*- """ 任务模板管理API路由 实现任务模板的列表查询和启用功能 """ from fastapi import APIRouter, Depends, Path, Query, HTTPException from sqlalchemy.orm import Session from typing import Optional, List, Dict, Any from sqlalchemy import and_ from data.session import get_db from services.template_service import TemplateService from utils.logger import get_logger # 创建路由 router = APIRouter(prefix="/api/vwed-task/template", tags=["VWED任务模板管理"]) # 设置日志 logger = get_logger("app.template_api") # 标准API响应格式 def api_response(code: int = 200, message: str = "操作成功", data: Any = None) -> Dict[str, Any]: """ 标准API响应格式 Args: code: 状态码 message: 响应消息 data: 响应数据 Returns: Dict[str, Any]: 格式化的响应数据 """ return { "code": code, "message": message, "data": data } @router.get("/list") async def get_template_list( page: int = Query(1, ge=1, description="页码,默认为1"), pageSize: int = Query(10, ge=1, le=100, description="每页记录数,默认为10"), templateName: Optional[str] = Query(None, description="模板名称,用于筛选"), status: Optional[int] = Query(None, description="状态:0-未启用,1-启用完成"), db: Session = Depends(get_db) ): """ 获取任务模板列表 Args: page: 页码,从1开始 pageSize: 每页记录数 templateName: 模板名称,模糊匹配 status: 状态过滤 db: 数据库会话 Returns: Dict: 包含模板列表和总数的响应 """ try: # 调用服务层方法获取模板列表 result = TemplateService.get_template_list( db=db, page=page, page_size=pageSize, template_name=templateName, status=status ) return api_response(data=result) except Exception as e: logger.error(f"获取任务模板列表失败: {str(e)}") raise HTTPException(status_code=500, detail=f"获取任务模板列表失败: {str(e)}") @router.post("/enable/{id}") async def enable_template( id: str = Path(..., description="模板ID"), db: Session = Depends(get_db) ): """ 启用指定的任务模板 当一个模板被启用时,之前已启用的模板会自动被禁用, 确保系统中始终只有一个处于激活状态的模板。 Args: id: 模板ID db: 数据库会话 Returns: Dict: 操作结果 """ try: # 调用服务层方法启用模板 TemplateService.enable_template(db=db, template_id=id) return api_response(message="模板启用成功") except Exception as e: if "模板不存在" in str(e): return api_response(code=404, message=str(e)) if "已处于启用状态" in str(e): return api_response(code=200, message=f"该模板已启用,无需重复操作") logger.error(f"模板启用失败: {str(e)}") raise HTTPException(status_code=500, detail=f"模板启用失败: {str(e)}") @router.get("/enabled") async def get_enabled_template( db: Session = Depends(get_db) ): """ 获取当前启用的任务模板 Args: db: 数据库会话 Returns: Dict: 包含启用模板的响应 """ try: # 调用服务层方法获取启用的模板 template = TemplateService.get_enabled_template(db=db) if not template: return api_response(code=404, message="当前没有启用的模板") return api_response(data=template) except Exception as e: logger.error(f"获取启用的任务模板失败: {str(e)}") raise HTTPException(status_code=500, detail=f"获取启用的任务模板失败: {str(e)}") @router.get("/{id}") async def get_template_detail( id: str = Path(..., description="模板ID"), db: Session = Depends(get_db) ): """ 获取任务模板详情 Args: id: 模板ID db: 数据库会话 Returns: Dict: 包含模板详情的响应 """ try: # 调用服务层方法获取模板详情 template = TemplateService.get_template_by_id(db=db, template_id=id) if not template: return api_response(code=404, message=f"模板不存在: {id}") return api_response(data=template) except Exception as e: logger.error(f"获取任务模板详情失败: {str(e)}") raise HTTPException(status_code=500, detail=f"获取任务模板详情失败: {str(e)}")