feat: 站点提交改为待审核(pending),管理员审核通过/拒绝

- submitSite: 新站点 status=PENDING
- AdminController: GET /admin/sites/pending, POST /admin/sites/{id}/approve|reject
- reject 物理删除站点记录
This commit is contained in:
mediabot-pt
2026-06-29 23:34:14 +08:00
parent d1445d3920
commit b829fc68fe
3 changed files with 61 additions and 2 deletions

View File

@@ -40,6 +40,7 @@ public class AdminController {
private final AccountService accountService;
private final PskService pskService;
private final CachedStorageService storageService;
private final com.par.core.service.SiteService siteService;
/**
* 获取所有用户列表
@@ -255,6 +256,32 @@ public class AdminController {
return ApiResponse.success();
}
// ===================== 站点审核 =====================
@GetMapping("/sites/pending")
public ApiResponse<List<com.par.core.dto.SiteDTO>> listPendingSites(HttpServletRequest request) {
checkAdmin(request);
return ApiResponse.success(siteService.listPendingSites().stream()
.map(siteService::toDTO).toList());
}
@PostMapping("/sites/{id}/approve")
public ApiResponse<Void> approveSite(@PathVariable Long id, HttpServletRequest request) {
checkAdmin(request);
Long reviewerId = (Long) request.getAttribute("accountId");
siteService.approveSite(id, reviewerId);
log.info("Site approved: id={}, reviewer={}", id, reviewerId);
return ApiResponse.success();
}
@PostMapping("/sites/{id}/reject")
public ApiResponse<Void> rejectSite(@PathVariable Long id, HttpServletRequest request) {
checkAdmin(request);
siteService.rejectSite(id);
log.info("Site rejected: id={}", id);
return ApiResponse.success();
}
private void checkAdmin(HttpServletRequest request) {
TrustLevel level = (TrustLevel) request.getAttribute("trustLevel");
if (level == null || level != TrustLevel.ADMIN) {

View File

@@ -26,8 +26,17 @@ public interface SiteService {
SiteDTO toDTO(Site site);
/**
* 提交站点信息(创建/更新,需审核)
* 提交站点信息(创建 pending,更新保持原状态)
*/
Site submitSite(String siteId, String name, String description, String baseUrl,
String iconUrl, String siteType, Long submitterId);
/** 待审核站点列表 */
List<Site> listPendingSites();
/** 审核通过 */
void approveSite(Long id, Long reviewerId);
/** 拒绝(删除) */
void rejectSite(Long id);
}

View File

@@ -77,9 +77,32 @@ public class SiteServiceImpl implements SiteService {
site.setIconUrl(iconUrl);
site.setSiteType(siteType != null ? com.par.core.enums.SiteType.fromValue(siteType) : com.par.core.enums.SiteType.UNKNOWN);
site.setSchemaVersion("1.0.0");
site.setStatus(SiteStatus.ACTIVE);
site.setStatus(SiteStatus.PENDING); // 新站点需审核
site.setSubmitterId(submitterId);
siteMapper.insert(site);
return site;
}
@Override
public List<Site> listPendingSites() {
return siteMapper.selectList(
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Site>()
.eq(Site::getStatus, SiteStatus.PENDING)
.eq(Site::getDeleted, 0));
}
@Override
public void approveSite(Long id, Long reviewerId) {
Site site = siteMapper.selectById(id);
if (site != null) {
site.setStatus(SiteStatus.ACTIVE);
siteMapper.updateById(site);
}
}
@Override
public void rejectSite(Long id) {
siteMapper.deleteById(id); // 物理删除
}
}
}