task-163: 引用中文件不清契约(job/result 引用跳过、引用解除后可清、判定失败保守跳过、批量混合、幂等)+ 8 条测试
This commit is contained in:
+58
@@ -0,0 +1,58 @@
|
||||
package com.nanri.aiimage.modules.file.service;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
* 引用感知清理决策(task-163)。
|
||||
*
|
||||
* 清理流程对每个文件先做引用判定:被引用(job/result/chunk/scope 引用)→ 跳过;
|
||||
* 仅未引用文件进入清理。本类固化决策逻辑(清理执行本身由各清理服务负责)。
|
||||
*/
|
||||
@Service
|
||||
public class ReferenceAwareCleaner {
|
||||
|
||||
public enum CleanDecision {
|
||||
/** 被引用,跳过清理。 */
|
||||
SKIP_REFERENCED,
|
||||
/** 未引用,可清理。 */
|
||||
CLEAN,
|
||||
}
|
||||
|
||||
public record FileDecision(File file, CleanDecision decision) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 单文件决策:引用判定抛异常时保守跳过(宁可保留不可误删)。
|
||||
*/
|
||||
public CleanDecision decide(File file, Predicate<String> isReferenced) {
|
||||
if (file == null || isReferenced == null) {
|
||||
return CleanDecision.CLEAN;
|
||||
}
|
||||
try {
|
||||
return isReferenced.test(file.getName())
|
||||
? CleanDecision.SKIP_REFERENCED
|
||||
: CleanDecision.CLEAN;
|
||||
} catch (Exception ex) {
|
||||
return CleanDecision.SKIP_REFERENCED;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量决策:混合批次中仅未引用文件 CLEAN;引用判定失败的文件保守跳过。
|
||||
*/
|
||||
public List<FileDecision> decideBatch(List<File> files, Predicate<String> isReferenced) {
|
||||
List<FileDecision> decisions = new ArrayList<>();
|
||||
if (files == null) {
|
||||
return decisions;
|
||||
}
|
||||
for (File file : files) {
|
||||
decisions.add(new FileDecision(file, decide(file, isReferenced)));
|
||||
}
|
||||
return decisions;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user