"""角色卡导入 / 导出 API。""" import json from fastapi import APIRouter, Depends, File, Response, UploadFile from app.api.v1.deps import get_current_user from app.schemas.auth import CurrentUser from app.schemas.character import ImportCardResponse from app.services.card_import import export_character_card, import_character_card_response router = APIRouter(prefix="/characters", tags=["characters"]) @router.post("/import-card", response_model=ImportCardResponse) async def import_character_card_api( file: UploadFile = File(..., description="角色卡文件,支持 .png / .json / .charx。"), current_user: CurrentUser = Depends(get_current_user), ) -> ImportCardResponse: """导入酒馆角色卡(V1/V2/V3),建立人物 + 世谱(character_book)。 ``personality`` 写入道体 ``personality_summary`` 作初始值; ``character_book`` 转为该角色的世谱书 + 条目。 """ raw = await file.read() return await import_character_card_response(raw, owner_scope=current_user.owner_scope) @router.get("/{character_id}/export-card") async def export_character_card_api( character_id: str, current_user: CurrentUser = Depends(get_current_user), ) -> Response: """导出人物为 ST V3 卡静态快照(.json,丢弃演化维度)。""" card = await export_character_card(character_id, owner_scope=current_user.owner_scope) return Response( content=json.dumps(card, ensure_ascii=False, indent=2), media_type="application/json", headers={"Content-Disposition": 'attachment; filename="character_card.json"'}, )