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 AccountService accountService;
|
||||||
private final PskService pskService;
|
private final PskService pskService;
|
||||||
private final CachedStorageService storageService;
|
private final CachedStorageService storageService;
|
||||||
|
private final com.par.core.service.SiteService siteService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取所有用户列表
|
* 获取所有用户列表
|
||||||
@@ -255,6 +256,32 @@ public class AdminController {
|
|||||||
return ApiResponse.success();
|
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) {
|
private void checkAdmin(HttpServletRequest request) {
|
||||||
TrustLevel level = (TrustLevel) request.getAttribute("trustLevel");
|
TrustLevel level = (TrustLevel) request.getAttribute("trustLevel");
|
||||||
if (level == null || level != TrustLevel.ADMIN) {
|
if (level == null || level != TrustLevel.ADMIN) {
|
||||||
|
|||||||
@@ -26,8 +26,17 @@ public interface SiteService {
|
|||||||
SiteDTO toDTO(Site site);
|
SiteDTO toDTO(Site site);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 提交站点信息(创建/更新,需审核)
|
* 提交站点信息(创建 pending,更新保持原状态)
|
||||||
*/
|
*/
|
||||||
Site submitSite(String siteId, String name, String description, String baseUrl,
|
Site submitSite(String siteId, String name, String description, String baseUrl,
|
||||||
String iconUrl, String siteType, Long submitterId);
|
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.setIconUrl(iconUrl);
|
||||||
site.setSiteType(siteType != null ? com.par.core.enums.SiteType.fromValue(siteType) : com.par.core.enums.SiteType.UNKNOWN);
|
site.setSiteType(siteType != null ? com.par.core.enums.SiteType.fromValue(siteType) : com.par.core.enums.SiteType.UNKNOWN);
|
||||||
site.setSchemaVersion("1.0.0");
|
site.setSchemaVersion("1.0.0");
|
||||||
site.setStatus(SiteStatus.ACTIVE);
|
site.setStatus(SiteStatus.PENDING); // 新站点需审核
|
||||||
site.setSubmitterId(submitterId);
|
site.setSubmitterId(submitterId);
|
||||||
siteMapper.insert(site);
|
siteMapper.insert(site);
|
||||||
return 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