/// ops_cleanup.mbt —— Archived 过期清理(M4 运维:归档回收)
///
/// 语义参考 FIST(Python) cleanup 模块(Archived 过期任务/历史回传的 DB 级清理):
/// 已归档(Archived)且归档时间(updated_at)早于保留期(retention_days)的任务,
/// 通过 FistEngine::delete_task 物理删除。未归档任务一律不受影响(引擎层已限定)。
/// 清理一轮:删除超过保留期的已归档任务。返回被清理的任务 id 列表。
pub fn cleanup_archived(
engine : FistEngine,
now : String,
retention_days~ : Int = 30,
) -> Result[Array[String], String] {
let now_s = iso_to_secs(now)
if now_s < 0 || retention_days < 0 {
return Err("cleanup: 非法时间戳或保留期")
}
let threshold = now_s - retention_days * 86400
let removed : Array[String] = []
for t in engine.list_all() {
if t.get_status().to_string() == "已归档" {
let ts_s = iso_to_secs(t.get_updated_at())
// 时间戳不可解析(ts_s < 0)时保守不清理,避免误删
if ts_s >= 0 && ts_s < threshold {
match engine.delete_task(t.get_id()) {
Ok(_) => removed.push(t.get_id())
Err(e) => return Err(e)
}
}
}
}
Ok(removed)
}