From e7f4419131a398489382a942e150685c4dfd687e Mon Sep 17 00:00:00 2001
From: guqing <38999863+guqing@users.noreply.github.com>
Date: Mon, 1 Jul 2024 14:59:17 +0800
Subject: [PATCH] chore: compatibility support for null for sort parameter of
 listAll (#6230)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

#### What type of PR is this?
/area core
/milestone 2.17.x

#### What this PR does / why we need it:
由于2.17.0 修改了 listAll 的实现导致出现了不兼容 Sort 参数为 null 的情况,考虑到给开发者适应的时间因此先兼容并给出警告日志

see also #6219

#### Which issue(s) this PR fixes:
Fixes #6219

#### Does this PR introduce a user-facing change?
```release-note
None
```
---
 .../app/extension/ReactiveExtensionClientImpl.java    | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/application/src/main/java/run/halo/app/extension/ReactiveExtensionClientImpl.java b/application/src/main/java/run/halo/app/extension/ReactiveExtensionClientImpl.java
index 822a13847..8c655ac0a 100644
--- a/application/src/main/java/run/halo/app/extension/ReactiveExtensionClientImpl.java
+++ b/application/src/main/java/run/halo/app/extension/ReactiveExtensionClientImpl.java
@@ -11,6 +11,7 @@ import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -112,9 +113,17 @@ public class ReactiveExtensionClientImpl implements ReactiveExtensionClient {
 
     @Override
     public <E extends Extension> Flux<E> listAll(Class<E> type, ListOptions options, Sort sort) {
+        var nullSafeSort = Optional.ofNullable(sort)
+            .orElseGet(() -> {
+                log.warn("The sort parameter is null, it is recommended to use Sort.unsorted() "
+                    + "instead and the compatibility support for null will be removed in the "
+                    + "subsequent version.");
+                return Sort.unsorted();
+            });
         var scheme = schemeManager.get(type);
         return Mono.fromSupplier(
-                () -> indexedQueryEngine.retrieveAll(scheme.groupVersionKind(), options, sort))
+                () -> indexedQueryEngine.retrieveAll(scheme.groupVersionKind(), options,
+                    nullSafeSort))
             .doOnSuccess(objectKeys -> {
                 if (log.isDebugEnabled()) {
                     if (objectKeys.size() > 500) {