public Mono<List<GroupMember>> addGroupMembers(
            @NotNull Long groupId,
            @NotNull Set<Long> userIds,
            @NotNull @ValidGroupMemberRole GroupMemberRole groupMemberRole,
            @Nullable String name,
            @Nullable @PastOrPresent Date joinDate,
            @Nullable Date muteEndDate,
            @Nullable ClientSession session) {
        try {
            Validator.notNull(groupId, "groupId");
            Validator.notNull(userIds, "userIds");
            // TODO: configurable
            Validator.maxSize(userIds, "userIds", 100);
            Validator.notNull(groupMemberRole, "groupMemberRole");
            DataValidator.validGroupMemberRole(groupMemberRole);
            Validator.pastOrPresent(joinDate, "joinDate");
        } catch (ResponseException e) {
            return Mono.error(e);
        }
        if (userIds.isEmpty()) {
            return PublisherPool.emptyList();
        }
        if (joinDate == null) {
            joinDate = new Date();
        }
        List<GroupMember> groupMembers = new ArrayList<>(userIds.size());
        for (Long userId : userIds) {
            groupMembers.add(
                    new GroupMember(groupId, userId, name, groupMemberRole, joinDate, muteEndDate));
        }
        return groupMemberRepository.insertAllOfSameType(groupMembers, session)
                .then(groupVersionService.updateMembersVersion(groupId)
                        .onErrorResume(t -> {
                            LOGGER.error(
                                    "Caught an error while updating the members version of the group ({}) after adding a group member",
                                    groupId,
                                    t);
                            return Mono.empty();
                        }))
                .thenReturn(groupMembers);
    }
@param groupService          is lazy because: GroupService -> GroupMemberService ->
                             GroupService
@param groupBlocklistService is lazy because: GroupMemberService -> GroupBlocklistService ->
                             GroupMemberService
turms-service/src/main/java/im/turms/service/domain/group/service/GroupMemberService.java