public Mono<GroupMemberRole> queryGroupMemberRole(
            @NotNull Long userId,
            @NotNull Long groupId,
            boolean preferCache) {
        try {
            Validator.notNull(userId, "userId");
            Validator.notNull(groupId, "groupId");
        } catch (ResponseException e) {
            return Mono.error(e);
        }
        if (preferCache && isMemberCacheEnabled) {
            Map<GroupMember.Key, GroupMember> keyToMember =
                    groupIdToMembersCache.getIfPresent(groupId);
            if (keyToMember != null) {
                GroupMember member = keyToMember.get(new GroupMember.Key(groupId, userId));
                return member == null
                        ? Mono.empty()
                        : Mono.just(member.getRole());
            }
        }
        return groupMemberRepository.findGroupMemberRole(userId, groupId);
    }
@return Possible codes: {@link ResponseStatusCode#OK}
        {@link ResponseStatusCode#SEND_MESSAGE_TO_MUTED_GROUP}
        {@link ResponseStatusCode#SEND_MESSAGE_TO_INACTIVE_GROUP}
        {@link ResponseStatusCode#MUTED_GROUP_MEMBER_SEND_MESSAGE}
turms-service/src/main/java/im/turms/service/domain/group/service/GroupMemberService.java