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