feat: 新增 access-result 删除接口,同时清理存储文件

This commit is contained in:
mediabot-pt
2026-07-01 09:27:31 +08:00
parent daa84cf82a
commit 47b96c3937
4 changed files with 31 additions and 1 deletions

View File

@@ -136,4 +136,17 @@ public class AccessResultController {
int affected = accessResultService.batchValidateUrl(siteId, url, isValid);
return ApiResponse.success(Map.of("affected", affected));
}
/**
* 删除访问结果(含存储文件)
*/
@DeleteMapping("/api/v1/admin/access-results/{id}")
public ApiResponse<Void> delete(@PathVariable("id") Long id) {
try {
accessResultService.delete(id);
return ApiResponse.success();
} catch (IllegalArgumentException e) {
return ApiResponse.error(404, e.getMessage());
}
}
}

View File

@@ -103,7 +103,7 @@ public class AdapterController {
try { adapterConfig = objectMapper.readValue(configJson, AdapterConfig.class); }
catch (Exception e) { return ApiResponse.error(400, "配置格式无效: " + e.getMessage()); }
// 获取该站点所有结果,按URL分组取最新(过滤无URL的旧数据)
// 获取该站点所有结果,按URL分组取最新
List<AccessResult> allResults = accessResultMapper.selectBySiteId(siteId);
Map<String, AccessResult> latestByUrl = allResults.stream()
.filter(r -> r.getUrl() != null && !r.getUrl().isBlank())
@@ -112,6 +112,8 @@ public class AdapterController {
r -> r,
(a, b) -> a.getCreatedAt().isAfter(b.getCreatedAt()) ? a : b));
int skippedNoUrl = (int) allResults.stream().filter(r -> r.getUrl() == null || r.getUrl().isBlank()).count();
// 批量解析
Map<String, Object> response = new LinkedHashMap<>();
response.put("configId", configId);

View File

@@ -43,6 +43,11 @@ public interface AccessResultService {
*/
List<SiteAccessSummaryDTO> listSiteSummaries();
/**
* 删除访问结果(含存储文件)
*/
void delete(Long id);
/**
* 批量标记站点某个URL的所有未验证结果为有效/无效
*/

View File

@@ -191,6 +191,16 @@ public class AccessResultServiceImpl implements AccessResultService {
return new ArrayList<>(siteMap.values());
}
@Override
public void delete(Long id) {
AccessResult result = mapper.selectById(id);
if (result == null) throw new IllegalArgumentException("访问结果不存在: " + id);
// 删除存储文件
try { storageService.delete(result.getStoragePath()); } catch (Exception ignored) {}
mapper.deleteById(id);
log.info("Access result deleted: id={}, siteId={}", id, result.getSiteId());
}
@Override
public int batchValidateUrl(String siteId, String url, Boolean isValid) {
int affected = mapper.batchValidateUrl(siteId, url, isValid);