forked from killua/TakwayPlatform
88 lines
4.2 KiB
Python
88 lines
4.2 KiB
Python
from ..schemas.character_schema 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.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) |