from ..schemas.character import * from ..dependencies.logger import get_logger from sqlalchemy.orm import Session from ..models import Character from datetime import datetime from fastapi import HTTPException, status #依赖注入获取logger logger = get_logger() #创建新角色 async def create_character_handler(character: CharacterCreateRequest, db: Session): new_character = Character(voice_id=character.voice_id, avatar_id=character.avatar_id, background_ids=character.background_ids, name=character.name, wakeup_words=character.wakeup_words, world_scenario = character.world_scenario, description=character.description, emojis=character.emojis, dialogues=character.dialogues) try: db.add(new_character) db.commit() db.refresh(new_character) except Exception as e: db.rollback() raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e)) character_create_data = CharacterCreateData(character_id=new_character.id, createdAt=datetime.now().isoformat()) return CharacterCreateResponse(status="success",message="创建角色成功",data=character_create_data) #更新角色 async def update_character_handler(character_id: int, character: CharacterUpdateRequest, db: Session): existing_character = db.query(Character).filter(Character.id == character_id).first() if not existing_character: return HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="角色不存在") existing_character.voice_id = character.voice_id existing_character.avatar_id = character.avatar_id existing_character.background_ids = character.background_ids existing_character.name = character.name existing_character.wakeup_words = character.wakeup_words existing_character.world_scenario = character.world_scenario existing_character.description = character.description existing_character.emojis = character.emojis existing_character.dialogues = character.dialogues try: db.add(existing_character) db.commit() except Exception as e: db.rollback() raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e)) character_update_data = CharacterUpdateData(updatedAt=datetime.now().isoformat()) return CharacterUpdateResponse(status="success",message="更新角色成功",data=character_update_data) #查询角色 async def get_character_handler(character_id: int, db: Session): try: existing_character = db.query(Character).filter(Character.id == character_id).first() except Exception as e: db.rollback() raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e)) if not existing_character: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="角色不存在") character_query_data = CharacterQueryData(voice_id=existing_character.voice_id,avatar_id=existing_character.avatar_id,background_ids=existing_character.background_ids,name=existing_character.name, wakeup_words=existing_character.wakeup_words,world_scenario=existing_character.world_scenario,description=existing_character.description,emojis=existing_character.emojis,dialogues=existing_character.dialogues) return CharacterQueryResponse(status="success",message="查询角色成功",data=character_query_data) #删除角色 async def delete_character_handler(character_id: int, db: Session): try: existing_character = db.query(Character).filter(Character.id == character_id).first() except Exception as e: db.rollback() raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e)) if not existing_character: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="角色不存在") try: db.delete(existing_character) db.commit() except Exception as e: db.rollback() raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e)) character_delete_data = CharacterDeleteData(id=character_id,deletedAt=datetime.now().isoformat()) return CharacterDeleteResponse(status="success",message="删除角色成功",data=character_delete_data)