Files
chain33-dtalk/service/group/logic/invite_group_members.go
2022-03-17 15:59:24 +08:00

69 lines
1.7 KiB
Go

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)
}
}