gallery_server_client_s190js/api_v1/scanner/activityOrphanCleanup.js
2026-10-26 11:00:14 +01:00

57 lines
1.4 KiB
JavaScript

const RETENTION_DAYS = 30;
module.exports = function createActivityOrphanCleanup(db) {
async function deleteFromDB(id, user) {
const now = new Date();
const nowIso = now.toISOString();
const rec = await db('activities')
.where({ id, user })
.first();
if (!rec) return false;
// Primo rilevamento: soft delete.
if (!rec.deleted_at) {
await db('activities')
.where({ id, user })
.update({
deleted_at: nowIso,
updated_at: nowIso,
});
console.log(`🟡 Soft delete attività orfana: ${id}`);
return true;
}
// Hard delete solo dopo il periodo di retention.
const deletedAt = new Date(rec.deleted_at);
const ageMs = now.getTime() - deletedAt.getTime();
const retentionMs = RETENTION_DAYS * 24 * 60 * 60 * 1000;
if (!Number.isFinite(deletedAt.getTime()) || ageMs <= retentionMs) {
console.log(`🟡 Attività in retention: ${id}`);
return true;
}
await db.transaction(async (trx) => {
await trx('activities')
.where({ id, user })
.del();
await trx('deleted_hard_activities')
.insert({
id,
user,
deleted_at: nowIso,
})
.onConflict('id')
.merge();
});
console.log(`🔴 Hard delete attività orfana: ${id}`);
return true;
}
return { deleteFromDB };
};