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

66 lines
1.6 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 UpdateGroupMemberMuteTimeLogic struct {
ctx context.Context
svc *service.Service
}
func NewUpdateGroupMemberMuteTimeLogic(ctx context.Context, svc *service.Service) *UpdateGroupMemberMuteTimeLogic {
return &UpdateGroupMemberMuteTimeLogic{
ctx: ctx,
svc: svc,
}
}
// UpdateGroupMemberMuteTime 更新群成员禁言时间
func (l *UpdateGroupMemberMuteTimeLogic) UpdateGroupMemberMuteTime(req *pb.UpdateGroupMemberMuteTimeReq) (*pb.UpdateGroupMemberMuteTimeResp, error) {
groupId := req.GroupId
memberIds := req.MemberIds
personId := req.PersonId
muteTime := req.MuteTime
var members []*biz.GroupMember
group, err := l.svc.GetGroupInfoByGroupId(l.ctx, groupId)
if err != nil {
return nil, err
}
person, err := l.svc.GetPersonByMemberIdAndGroupId(l.ctx, personId, groupId)
if err != nil {
return nil, err
}
if err = person.IsAdmin(); err != nil {
return nil, err
}
// 过滤
for _, memberId := range memberIds {
member, err := l.svc.GetMemberByMemberIdAndGroupId(l.ctx, memberId, groupId)
if err != nil {
return nil, err
}
if err := member.IsAdmin(); err == nil {
return nil, xerror.NewError(xerror.GroupMutePermission)
}
members = append(members, member)
}
members, err = l.svc.UpdateMembersMuteTime(l.ctx, group, members, muteTime)
if err != nil {
return nil, err
}
return &pb.UpdateGroupMemberMuteTimeResp{
Members: NewRPCGroupMemberInfos(members),
}, nil
}