package logic import ( "context" xerror "gitlab.33.cn/chat/dtalk/pkg/error" pb "gitlab.33.cn/chat/dtalk/service/group/api" "gitlab.33.cn/chat/dtalk/service/group/model/biz" "gitlab.33.cn/chat/dtalk/service/group/service" ) type InviteGroupMembersLogic struct { ctx context.Context svc *service.Service } func NewInviteGroupMembersLogic(ctx context.Context, svc *service.Service) *InviteGroupMembersLogic { return &InviteGroupMembersLogic{ ctx: ctx, svc: svc, } } // InviteGroupMembers 邀请新成员 func (l *InviteGroupMembersLogic) InviteGroupMembers(req *pb.InviteGroupMembersReq) (*pb.InviteGroupMembersResp, error) { //personId := req.Inviter.MemberId groupId := req.GroupId inviterId := req.InviterId newMemberIds := FilteredMemberIds(req.MemberIds) group, err := l.svc.GetGroupInfoByGroupId(l.ctx, groupId) if err != nil { return nil, err } if inviterId == "" { switch group.GroupJoinType { case biz.GroupJoinTypeAny: err = l.svc.InviteMembers(l.ctx, group, newMemberIds) if err != nil { return nil, err } return &pb.InviteGroupMembersResp{}, nil default: return nil, xerror.NewError(xerror.GroupInvitePermissionDenied) } } // 得到邀请人信息 inviter, err := l.svc.GetPersonByMemberIdAndGroupId(l.ctx, inviterId, groupId) if err != nil { return nil, err } switch inviter.TryInvite(group) { case biz.InviteOk: err = l.svc.InviteMembers(l.ctx, group, newMemberIds) if err != nil { return nil, err } return &pb.InviteGroupMembersResp{}, nil case biz.InviteApply: return nil, xerror.NewError(xerror.GroupInvitePermissionDenied) case biz.InviteFail: return nil, xerror.NewError(xerror.GroupInvitePermissionDenied) default: return nil, xerror.NewError(xerror.GroupInvitePermissionDenied) } }