feat: 站点提交改为待审核(pending),管理员审核通过/拒绝
- submitSite: 新站点 status=PENDING
- AdminController: GET /admin/sites/pending, POST /admin/sites/{id}/approve|reject
- reject 物理删除站点记录
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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); // 物理删除
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user