87 lines
2.8 KiB
Python
Raw 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 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)}")