From d548ee4385142bdf3710d8a233bded23c30a8087 Mon Sep 17 00:00:00 2001 From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:23:35 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20SubmitResult=20sealed=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=BC=BA=E7=B1=BB=E5=9E=8B=E6=9B=BF=E4=BB=A3ApiRespon?= =?UTF-8?q?se?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../par/api/controller/AccessResultController.java | 7 ++++--- .../main/java/com/par/core/dto/SubmitResult.java | 13 +++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 par-core/src/main/java/com/par/core/dto/SubmitResult.java diff --git a/par-api/src/main/java/com/par/api/controller/AccessResultController.java b/par-api/src/main/java/com/par/api/controller/AccessResultController.java index fa0ca73..426850e 100644 --- a/par-api/src/main/java/com/par/api/controller/AccessResultController.java +++ b/par-api/src/main/java/com/par/api/controller/AccessResultController.java @@ -3,6 +3,7 @@ package com.par.api.controller; import com.par.core.dto.AccessResultDTO; import com.par.core.dto.ApiResponse; import com.par.core.dto.SiteAccessSummaryDTO; +import com.par.core.dto.SubmitResult; import com.par.core.entity.AccessResult; import com.par.core.service.AccessResultService; import jakarta.servlet.http.HttpServletRequest; @@ -30,7 +31,7 @@ public class AccessResultController { * mediabot 提交访问站点的返回数据 */ @PostMapping("/api/v1/sites/{siteId}/access-result") - public ApiResponse submitAccessResult( + public ApiResponse submitAccessResult( @PathVariable("siteId") String siteId, @RequestBody Map payload, HttpServletRequest request) { @@ -58,9 +59,9 @@ public class AccessResultController { AccessResult result = accessResultService.submit( siteId, configVersion, clientId, contentType, content, url, statusCode, responseTimeMs, submitterId); - return ApiResponse.success(accessResultService.toDTO(result)); + return ApiResponse.success(new SubmitResult.Success(accessResultService.toDTO(result))); } catch (com.par.core.exception.DuplicateSubmissionException e) { - return ApiResponse.success(Map.of("skipped", true, "reason", "duplicate")); + return ApiResponse.success(new SubmitResult.Skipped("duplicate")); } } diff --git a/par-core/src/main/java/com/par/core/dto/SubmitResult.java b/par-core/src/main/java/com/par/core/dto/SubmitResult.java new file mode 100644 index 0000000..4a3a33f --- /dev/null +++ b/par-core/src/main/java/com/par/core/dto/SubmitResult.java @@ -0,0 +1,13 @@ +package com.par.core.dto; + +/** + * 访问结果提交返回类型,统一处理"正常存储"和"去重跳过"两种场景 + */ +public sealed interface SubmitResult permits SubmitResult.Success, SubmitResult.Skipped { + + /** 正常存储,返回 DTO */ + record Success(AccessResultDTO dto) implements SubmitResult {} + + /** 内容重复,跳过存储 */ + record Skipped(String reason) implements SubmitResult {} +}