From 529740a2382bacd75c96129570803f729ceddece Mon Sep 17 00:00:00 2001
From: guqing <38999863+guqing@users.noreply.github.com>
Date: Fri, 30 Jun 2023 11:04:16 +0800
Subject: [PATCH] fix: creating a draft cannot be displayed in the post list
(#4155)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
#### What this PR does / why we need it:
此改动为还原 AbstractContentService 的 getContent 逻辑
当将 AbstractContentService 的 getContent 的查询改为 client.get 时会影响到文章 reconciler 的调用导致出错后一直requeue 所以无法完成文章逻辑处理。
reconciler 这里获取 releaseSnapshot 时可能文章还是草稿,所以会导致调用 getContent 时多一次查询,所以最好是后续判断一下,当然这里已经在 getContent 判断了
#### Which issue(s) this PR fixes:
Fixes #4154
#### Does this PR introduce a user-facing change?
```release-note
None
```
---
.../app/content/AbstractContentService.java | 17 ++++++++++++++---
.../app/theme/router/PreviewRouterFunction.java | 4 ++--
2 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/application/src/main/java/run/halo/app/content/AbstractContentService.java b/application/src/main/java/run/halo/app/content/AbstractContentService.java
index 17873479b..ea3add8d4 100644
--- a/application/src/main/java/run/halo/app/content/AbstractContentService.java
+++ b/application/src/main/java/run/halo/app/content/AbstractContentService.java
@@ -4,6 +4,7 @@ import java.security.Principal;
import java.time.Instant;
import java.util.UUID;
import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.lang.Nullable;
import org.springframework.security.core.context.ReactiveSecurityContextHolder;
@@ -20,22 +21,32 @@ import run.halo.app.extension.ReactiveExtensionClient;
* @author guqing
* @since 2.0.0
*/
+@Slf4j
@AllArgsConstructor
public abstract class AbstractContentService {
private final ReactiveExtensionClient client;
public Mono getContent(String snapshotName, String baseSnapshotName) {
- return client.get(Snapshot.class, baseSnapshotName)
+ if (StringUtils.isBlank(snapshotName) || StringUtils.isBlank(baseSnapshotName)) {
+ return Mono.empty();
+ }
+ // TODO: refactor this method to use client.get instead of fetch but please be careful
+ return client.fetch(Snapshot.class, baseSnapshotName)
.doOnNext(this::checkBaseSnapshot)
.flatMap(baseSnapshot -> {
if (StringUtils.equals(snapshotName, baseSnapshotName)) {
var contentWrapper = ContentWrapper.patchSnapshot(baseSnapshot, baseSnapshot);
return Mono.just(contentWrapper);
}
- return client.get(Snapshot.class, snapshotName)
+ return client.fetch(Snapshot.class, snapshotName)
.map(snapshot -> ContentWrapper.patchSnapshot(snapshot, baseSnapshot));
- });
+ })
+ .switchIfEmpty(Mono.defer(() -> {
+ log.error("The content snapshot [{}] or base snapshot [{}] not found.",
+ snapshotName, baseSnapshotName);
+ return Mono.empty();
+ }));
}
protected void checkBaseSnapshot(Snapshot snapshot) {
diff --git a/application/src/main/java/run/halo/app/theme/router/PreviewRouterFunction.java b/application/src/main/java/run/halo/app/theme/router/PreviewRouterFunction.java
index f60342cd5..56b149c4c 100644
--- a/application/src/main/java/run/halo/app/theme/router/PreviewRouterFunction.java
+++ b/application/src/main/java/run/halo/app/theme/router/PreviewRouterFunction.java
@@ -70,7 +70,7 @@ public class PreviewRouterFunction {
.flatMap(post -> canPreview(post.getContributors())
.doOnNext(canPreview -> {
if (!canPreview) {
- throw new NotFoundException("Page not found.");
+ throw new NotFoundException("Post not found.");
}
})
.thenReturn(post)
@@ -138,7 +138,7 @@ public class PreviewRouterFunction {
.flatMap(singlePageVo -> canPreview(singlePageVo.getContributors())
.doOnNext(canPreview -> {
if (!canPreview) {
- throw new NotFoundException("Page not found.");
+ throw new NotFoundException("Single page not found.");
}
})
.thenReturn(singlePageVo)