feat: 添加站点收录提交接口 POST /api/v1/sites/{siteId}/submit
- 支持创建新站点或更新已有站点 - HMAC 签名鉴权保护 - Swagger 文档同步可见
This commit is contained in:
@@ -2,14 +2,18 @@ package com.par.api.controller;
|
|||||||
|
|
||||||
import com.par.core.dto.ApiResponse;
|
import com.par.core.dto.ApiResponse;
|
||||||
import com.par.core.dto.SiteDTO;
|
import com.par.core.dto.SiteDTO;
|
||||||
|
import com.par.core.entity.Site;
|
||||||
import com.par.core.service.SiteService;
|
import com.par.core.service.SiteService;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 站点控制器(读取公开)
|
* 站点控制器
|
||||||
|
* 读取公开,提交需 HMAC 鉴权
|
||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/v1/sites")
|
@RequestMapping("/api/v1/sites")
|
||||||
@@ -33,4 +37,33 @@ public class SiteController {
|
|||||||
public ApiResponse<SiteDTO> getSite(@PathVariable String siteId) {
|
public ApiResponse<SiteDTO> getSite(@PathVariable String siteId) {
|
||||||
return ApiResponse.success(siteService.toDTO(siteService.findBySiteId(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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user