From c4877f983a5e5fa734d7edbc5f730dcd1b72f4cf Mon Sep 17 00:00:00 2001 From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com> Date: Mon, 29 Jun 2026 15:09:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=AB=99=E7=82=B9?= =?UTF-8?q?=E6=94=B6=E5=BD=95=E6=8F=90=E4=BA=A4=E6=8E=A5=E5=8F=A3=20POST?= =?UTF-8?q?=20/api/v1/sites/{siteId}/submit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 支持创建新站点或更新已有站点 - HMAC 签名鉴权保护 - Swagger 文档同步可见 --- .../par/api/controller/SiteController.java | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/par-api/src/main/java/com/par/api/controller/SiteController.java b/par-api/src/main/java/com/par/api/controller/SiteController.java index a7ab5d0..fe815d9 100644 --- a/par-api/src/main/java/com/par/api/controller/SiteController.java +++ b/par-api/src/main/java/com/par/api/controller/SiteController.java @@ -2,14 +2,18 @@ package com.par.api.controller; import com.par.core.dto.ApiResponse; import com.par.core.dto.SiteDTO; +import com.par.core.entity.Site; import com.par.core.service.SiteService; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; /** - * 站点控制器(读取公开) + * 站点控制器 + * 读取公开,提交需 HMAC 鉴权 */ @RestController @RequestMapping("/api/v1/sites") @@ -33,4 +37,33 @@ public class SiteController { public ApiResponse getSite(@PathVariable String siteId) { return ApiResponse.success(siteService.toDTO(siteService.findBySiteId(siteId))); } + + /** + * 提交站点收录(需 HMAC 鉴权) + * 创建或更新站点信息,自动设置为活跃状态 + */ + @PostMapping("/{siteId}/submit") + public ApiResponse submitSite( + @PathVariable String siteId, + @RequestBody Map payload, + HttpServletRequest request) { + + String name = (String) payload.get("name"); + String description = (String) payload.get("description"); + String baseUrl = (String) payload.get("baseUrl"); + String iconUrl = (String) payload.get("iconUrl"); + String siteType = (String) payload.get("siteType"); + + if (name == null || name.isBlank()) { + return ApiResponse.error(400, "name is required"); + } + if (baseUrl == null || baseUrl.isBlank()) { + return ApiResponse.error(400, "baseUrl is required"); + } + + Long submitterId = (Long) request.getAttribute("accountId"); + + Site site = siteService.submitSite(siteId, name, description, baseUrl, iconUrl, siteType, submitterId); + return ApiResponse.success(siteService.toDTO(site)); + } }