VWED_server/routes/template_api.py
2025-04-30 16:57:46 +08:00

163 lines
4.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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)}")