#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 海报API路由 - 简化版本 只保留核心功能,重点优化图片使用追踪 """ import logging from fastapi import APIRouter, Depends, HTTPException from typing import List, Dict, Any from core.config import ConfigManager from core.ai import AIAgent from utils.file_io import OutputManager from api.services.poster import PosterService from api.models.poster import ( PosterGenerateRequest, PosterGenerateResponse, ImageUsageRequest, ImageUsageResponse ) # 从依赖注入模块导入依赖 from api.dependencies import get_config, get_ai_agent, get_output_manager logger = logging.getLogger(__name__) # 创建路由 router = APIRouter() # 依赖注入函数 def get_poster_service( config_manager: ConfigManager = Depends(get_config), ai_agent: AIAgent = Depends(get_ai_agent), output_manager: OutputManager = Depends(get_output_manager) ) -> PosterService: """获取海报服务""" return PosterService(ai_agent, config_manager, output_manager) @router.post("/generate", response_model=PosterGenerateResponse, summary="生成海报") async def generate_poster( request: PosterGenerateRequest, poster_service: PosterService = Depends(get_poster_service) ): """ 生成海报 - **content_id**: 内容ID(可选) - **product_id**: 产品ID(可选) - **scenic_spot_id**: 景区ID(可选) - **image_ids**: 图像ID列表(可选) - **generate_collage**: 是否生成拼图 """ try: result = poster_service.generate_poster_simplified( content_id=request.content_id, product_id=request.product_id, scenic_spot_id=request.scenic_spot_id, image_ids=request.image_ids, generate_collage=request.generate_collage ) return PosterGenerateResponse(**result) except ValueError as e: logger.error(f"参数错误: {e}") raise HTTPException(status_code=400, detail=str(e)) except Exception as e: logger.error(f"生成海报失败: {e}", exc_info=True) raise HTTPException(status_code=500, detail=f"生成海报失败: {str(e)}") @router.post("/image-usage", response_model=ImageUsageResponse, summary="查询图像使用情况") async def get_image_usage( request: ImageUsageRequest, poster_service: PosterService = Depends(get_poster_service) ): """ 查询图像使用情况 - **image_ids**: 要查询的图像ID列表 """ try: result = poster_service.get_image_usage_info(request.image_ids) return ImageUsageResponse(**result) except Exception as e: logger.error(f"查询图像使用情况失败: {e}", exc_info=True) raise HTTPException(status_code=500, detail=f"查询图像使用情况失败: {str(e)}")