""" 发布管理 API """ from fastapi import APIRouter, HTTPException, BackgroundTasks from pydantic import BaseModel from typing import List, Optional from datetime import datetime from loguru import logger from app.services.publish_service import PublishService router = APIRouter() publish_service = PublishService() class PublishRequest(BaseModel): video_path: str platform: str title: str tags: List[str] = [] description: str = "" publish_time: Optional[datetime] = None class PublishResponse(BaseModel): success: bool message: str platform: str url: Optional[str] = None @router.post("/", response_model=PublishResponse) async def publish_video(request: PublishRequest, background_tasks: BackgroundTasks): try: result = await publish_service.publish( video_path=request.video_path, platform=request.platform, title=request.title, tags=request.tags, description=request.description, publish_time=request.publish_time ) return PublishResponse( success=result.get("success", False), message=result.get("message", ""), platform=request.platform, url=result.get("url") ) except Exception as e: logger.error(f"发布失败: {e}") raise HTTPException(status_code=500, detail=str(e)) @router.get("/platforms") async def list_platforms(): return {"platforms": [{"id": pid, **pinfo} for pid, pinfo in publish_service.PLATFORMS.items()]} @router.get("/accounts") async def list_accounts(): return {"accounts": publish_service.get_accounts()} @router.post("/login/{platform}") async def login_platform(platform: str): result = await publish_service.login(platform) if result.get("success"): return result else: raise HTTPException(status_code=400, detail=result.get("message")) @router.post("/logout/{platform}") async def logout_platform(platform: str): """注销平台登录""" result = publish_service.logout(platform) return result @router.get("/login/status/{platform}") async def get_login_status(platform: str): """检查登录状态 (优先检查活跃的扫码会话)""" return publish_service.get_login_session_status(platform) @router.post("/cookies/save/{platform}") async def save_platform_cookie(platform: str, cookie_data: dict): """ 保存从客户端浏览器提取的Cookie Args: platform: 平台ID cookie_data: {"cookie_string": "document.cookie的内容"} """ cookie_string = cookie_data.get("cookie_string", "") result = await publish_service.save_cookie_string(platform, cookie_string) if result.get("success"): return result else: raise HTTPException(status_code=400, detail=result.get("message"))