Files
full/module/social/relation/internal/logic/friend/apply_do_pass.go
2026-09-22 21:15:34 +08:00

66 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package friend
import (
"context"
"time"
"bsm/full/module/social/relation/internal/impl"
"bsm/full/module/social/relation/internal/logic/common"
"bsm/full/module/social/relation/internal/models"
pb "bsm/full/module/social/relation/pb"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/printer"
"git.apinb.com/bsm-sdk/core/service"
"git.apinb.com/bsm-sdk/core/utils"
"git.apinb.com/bsm-sdk/core/vars"
)
// 好友申请Do:确认
func ApplyDoPass(ctx context.Context, in *pb.ApplyDoPassRequest) (reply *pb.DataStatusReply, err error) {
auth, err := service.ParseMetaCtx(ctx, nil)
if err != nil {
return nil, err
}
if in.FriendRelationIdentity == "" || in.ApplyIdentity == "" || in.FriendRelationId == 0 {
return nil, errcode.ErrInvalidArgument
}
// 通过前先按 identity 查出属于当前调用者(被申请方)的申请记录
var apply models.FriendApply
err = impl.DBService.Where("identity=? and to_identity=?", in.ApplyIdentity, auth.Identity).First(&apply).Error
if err != nil {
printer.Error(err.Error())
return nil, errcode.ErrPermissionDenied
}
// 申请记录里的申请人必须与请求要加为好友的对象一致,否则视为无申请依据
if apply.FromIdentity != in.FriendRelationIdentity {
return nil, errcode.ErrPermissionDenied
}
//写入好友表
friend := &models.RelationFriend{FriendrelationID: apply.FromID, FriendrelationIdentity: apply.FromIdentity}
friend.Identity = utils.UUID()
friend.PassportID = auth.ID
friend.PassportIdentity = auth.Identity
friend.SessionID = common.UniqueSessionID(auth.Identity, apply.FromIdentity)
err = impl.DBService.Create(&friend).Error
if err != nil {
printer.Error(err.Error())
return nil, errcode.ErrDB
}
//EventMQ向mesh MQ中心发送报文请求推送消息以及更新Cache.
err = impl.DBService.Model(models.FriendApply{}).Where("to_identity=? and identity=?", auth.Identity, apply.Identity).UpdateColumn("status", 1).Error
if err != nil {
printer.Error(err.Error())
return nil, errcode.ErrDB
}
return &pb.DataStatusReply{
Data: vars.OK,
Timeseq: time.Now().UnixMilli(),
}, nil
}