1
0
Fork 0
TakwayPlatform/app/controllers/character_controller.py

88 lines
4.2 KiB
Python
Raw Normal View History

from ..schemas.character_schema import *
2024-05-01 17:18:30 +08:00
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.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)