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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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