70 lines
2.1 KiB
Java
70 lines
2.1 KiB
Java
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")
|
|
@RequiredArgsConstructor
|
|
public class SiteController {
|
|
|
|
private final SiteService siteService;
|
|
|
|
/**
|
|
* 列出所有活跃站点
|
|
*/
|
|
@GetMapping
|
|
public ApiResponse<List<SiteDTO>> listSites() {
|
|
return ApiResponse.success(siteService.listActiveSites());
|
|
}
|
|
|
|
/**
|
|
* 获取单个站点信息
|
|
*/
|
|
@GetMapping("/{siteId}")
|
|
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));
|
|
}
|
|
}
|