feat: 站点提交/返回统一支持多名称多地址数组

- POST /sites/{id}/submit: names[]/urls[] 数组,兼容旧 name/baseUrl 单值
- 已有站点合并新名称/地址(去重+前置)
- 站点列表返回 names[]/urls[]
- API 文档和代码示例同步更新
This commit is contained in:
mediabot-pt
2026-06-30 13:47:56 +08:00
parent 28e6c2882f
commit 04f4af1f2c
4 changed files with 51 additions and 37 deletions

View File

@@ -66,8 +66,8 @@ public class SiteController {
}
/**
* 提交站点收录(需 HMAC 鉴权)
* 创建或更新站点信息,自动设置为活跃状态
* 提交站点收录(需 PSK 鉴权)
* 支持 names[]/urls[] 数组或 name/baseUrl 单值(向后兼容)
*/
@PostMapping("/{siteId}/submit")
public ApiResponse<SiteDTO> submitSite(
@@ -75,22 +75,31 @@ public class SiteController {
@RequestBody Map<String, Object> payload,
HttpServletRequest request) {
String name = (String) payload.get("name");
@SuppressWarnings("unchecked")
List<String> names = (List<String>) payload.get("names");
@SuppressWarnings("unchecked")
List<String> urls = (List<String>) payload.get("urls");
// 向后兼容单值
if ((names == null || names.isEmpty()) && payload.containsKey("name")) {
names = List.of((String) payload.get("name"));
}
if ((urls == null || urls.isEmpty()) && payload.containsKey("baseUrl")) {
urls = List.of((String) payload.get("baseUrl"));
}
if (names == null || names.isEmpty()) {
return ApiResponse.error(400, "names or name is required");
}
if (urls == null || urls.isEmpty()) {
return ApiResponse.error(400, "urls or baseUrl is required");
}
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);
Site site = siteService.submitSite(siteId, names, urls, description, iconUrl, siteType, submitterId);
return ApiResponse.success(siteService.toDTO(site));
}