/** * @Auth:ShenZ * @Description: * @CreateDate:2022/06/15 14:57:55 */ package models import ( "ginchat/utils" "gorm.io/gorm" ) //人员关系 type Contact struct { gorm.Model OwnerId uint //谁的关系信息 TargetId uint //对应的谁 /群 ID Type int //对应的类型 1好友 2群 3xx Desc string } func (table *Contact) TableName() string { return "contact" } func SearchFriend(userId uint) []UserBasic { contacts := make([]Contact, 0) objIds := make([]uint64, 0) utils.DB.Where("owner_id = ? and type=1", userId).Find(&contacts) for _, v := range contacts { objIds = append(objIds, uint64(v.TargetId)) } users := make([]UserBasic, 0) utils.DB.Where("id in ?", objIds).Find(&users) return users } //添加好友 自己的ID , 好友的ID func AddFriend(userId uint, targetName string) (int, string) { //user := UserBasic{} if targetName != "" { targetUser := FindUserByName(targetName) //fmt.Println(targetUser, " userId ", ) if targetUser.Salt != "" { if targetUser.ID == userId { return -1, "不能加自己" } contact0 := Contact{} utils.DB.Where("owner_id =? and target_id =? and type=1", userId, targetUser.ID).Find(&contact0) if contact0.ID != 0 { return -1, "不能重复添加" } tx := utils.DB.Begin() //事务一旦开始,不论什么异常最终都会 Rollback defer func() { if r := recover(); r != nil { tx.Rollback() } }() contact := Contact{} contact.OwnerId = userId contact.TargetId = targetUser.ID contact.Type = 1 if err := utils.DB.Create(&contact).Error; err != nil { tx.Rollback() return -1, "添加好友失败" } contact1 := Contact{} contact1.OwnerId = targetUser.ID contact1.TargetId = userId contact1.Type = 1 if err := utils.DB.Create(&contact1).Error; err != nil { tx.Rollback() return -1, "添加好友失败" } tx.Commit() return 0, "添加好友成功" } return -1, "没有找到此用户" } return -1, "好友ID不能为空" } func SearchUserByGroupId(communityId uint) []uint { contacts := make([]Contact, 0) objIds := make([]uint, 0) utils.DB.Where("target_id = ? and type=2", communityId).Find(&contacts) for _, v := range contacts { objIds = append(objIds, uint(v.OwnerId)) } return objIds }