You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
2.3 KiB

2 years ago
/**
* @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
}