package models import ( "WorldEpcho/src/datasource" "errors" "fmt" "github.com/go-xorm/xorm" "strings" ) type WorldConversation struct { Id int64 `xorm:"'id' pk autoincr"` IsLiuId string Uid int64 WorldId int64 `xorm:"'world_id' unique"` WorldName string `xorm:"'world_name' unique"` Title string UserInfo string `xorm:" 'user_info'"` BgInfo string } // AddWorld 添加一个新的世界到数据库 func AddWorldConversation(session *xorm.Session, conversation *WorldConversation) error { // 插入数据 _, err := session.Insert(conversation) if err != nil { return err } return nil } // AddWorld 添加一个新的世界到数据库,并返回对象 func AddWorldConversation1(world WorldConversation) (*WorldConversation, error) { // 插入数据 _, err := datasource.Engine.Insert(&world) if err != nil { return nil, err } return &world, nil } // GetDigitalPersonsByUserID 根据用户ID查询对应的数字人ID和名字 func GetWorldsByUserID(userID int64) ([]WorldInfo, error) { var worlds []WorldInfo err := datasource.Engine.Table("world_info").Join("INNER", "world_conversation", "world_info.id = world_conversation.world_id"). Where("world_conversation.uid = ?", userID). //Select("digital_person.id, digital_person.name,digital_person.gender,catchphrases"). Select("*"). Find(&worlds) if err != nil { return nil, err } return worlds, nil } func GetWorldConversationsByUser(userID int64, worldName string) ([]WorldInfo, error) { var worlds []WorldInfo err := datasource.Engine.Table("world_info"). Join("INNER", "world_conversation", "world_info.id = world_conversation.world_id"). Where("world_conversation.uid = ?", userID). And("world_info.name LIKE ?", "%"+strings.TrimSpace(worldName)+"%"). Select("*"). Find(&worlds) if err != nil { return nil, fmt.Errorf("failed to fetch world conversations: %v", err) } return worlds, nil } // GetIsLiuIdByUidAndWorldName 根据用户id和WorldName查询IsLiuId func GetWorldConversationByUidAndWorldName_Tx(session *xorm.Session, uid int64, worldName string) (*WorldConversation, bool, error) { // 检查输入有效性 if uid == 0 || worldName == "" { return nil, false, errors.New("invalid parameters") } // 定义一个WorldConversation对象用于接收查询结果 var world WorldConversation has, err := session.Where("uid = ? AND world_name = ?", uid, worldName).Get(&world) if err != nil { // 处理查询错误 return nil, false, err } if !has { // 没有找到对应的记录 return nil, false, nil } // 返回查找到的IsLiuId return &world, true, nil } // 根据用户id和世界id查询世界会话 func GetWorldConversationByUidAndWorldId_Tx(session *xorm.Session, uid, worldId int64) (*WorldConversation, bool, error) { // 检查输入有效性 if uid == 0 || worldId == 0 { return nil, false, errors.New("invalid parameters") } // 定义一个WorldConversation对象用于接收查询结果 var world WorldConversation has, err := session.Where("uid = ? AND world_id = ?", uid, worldId).Get(&world) if err != nil { // 处理查询错误 return nil, false, err } if !has { // 没有找到对应的记录 return nil, false, nil } // 返回查找到的IsLiuId return &world, true, nil } func GetWorldConversationByUidAndWorldName(uid int64, worldName string) (*WorldConversation, bool, error) { // 检查输入有效性 if uid == 0 || worldName == "" { return nil, false, errors.New("invalid parameters") } // 定义一个WorldConversation对象用于接收查询结果 var world WorldConversation has, err := datasource.Engine.Where("uid = ? AND world_name = ?", uid, worldName).Get(&world) if err != nil { // 处理查询错误 return nil, false, err } if !has { // 没有找到对应的记录 return nil, false, nil } // 返回查找到的IsLiuId return &world, true, nil } // GetWorldConversationByUidAndWorldId 根据用户id和WorldId查询世界会话信息 func GetWorldConversationByUidAndWorldId(uid, worldId int64) (*WorldConversation, bool, error) { // 检查输入有效性 if uid == 0 || worldId == 0 { return nil, false, errors.New("invalid parameters") } // 定义一个WorldConversation对象用于接收查询结果 var world WorldConversation has, err := datasource.Engine.Where("uid = ? AND world_id = ?", uid, worldId).Get(&world) if err != nil { // 处理查询错误 return nil, false, err } if !has { // 没有找到对应的记录 return nil, false, nil } // 返回查找到的IsLiuId return &world, true, nil } // UpdateDpConversations 更新会话信息 func UpdateWorldConversation(session *xorm.Session, WorldConversation *WorldConversation) error { _, err := session.ID(WorldConversation.Id).Update(WorldConversation) return err }