feat: 添加站点收录提交接口 POST /api/v1/sites/{siteId}/submit

- 支持创建新站点或更新已有站点
- HMAC 签名鉴权保护
- Swagger 文档同步可见
This commit is contained in:
mediabot-pt
2026-06-29 15:09:40 +08:00
parent 20a8983afb
commit c4877f983a

View File

@@ -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<SiteDTO> getSite(@PathVariable String siteId) {
return ApiResponse.success(siteService.toDTO(siteService.findBySiteId(siteId)));
}
/**
* 提交站点收录(需 HMAC 鉴权)
* 创建或更新站点信息,自动设置为活跃状态
*/
@PostMapping("/{siteId}/submit")
public ApiResponse<SiteDTO> submitSite(
@PathVariable String siteId,
@RequestBody Map<String, Object> 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));
}
}