photo_server_json_con_aves22/api_v1/scanner/deleteFolder.js
2026-04-18 20:14:42 +02:00

73 lines
2 KiB
JavaScript

// api_v1/scanner/deleteFolder.js
const path = require('path');
const fsp = require('fs/promises');
const { WEB_ROOT } = require('../config');
module.exports = function createDeleteFolderFunctions(db, RETENTION_DAYS = 30) {
const createCleanupFunctions = require('./orphanCleanup');
const { deleteFromDB, deleteThumbsById } = createCleanupFunctions(db, RETENTION_DAYS);
/**
* Cancella una cartella per un utente:
* - soft delete immediato di tutte le foto
* - hard delete se retention scaduta
* - registra hard delete in deleted_hard
* - elimina thumbs solo per hard delete
*/
async function deleteFolderForUser(userName, folderName) {
// 1) Recupera tutti gli ID nel DB
const rows = await db('photos')
.where({ user: userName, cartella: folderName })
.select('id');
let softCount = 0;
let hardCount = 0;
// 2) Soft delete / Hard delete per ogni foto
for (const r of rows) {
const id = r.id;
const result = await deleteFromDB(id, userName);
if (result === true) {
// deleteFromDB decide se è soft o hard
// possiamo verificare se la foto esiste ancora nel DB
const stillExists = await db("photos")
.where({ id, user: userName })
.first();
if (stillExists) {
softCount++;
} else {
hardCount++;
}
}
}
// 3) Cancella la cartella thumbs residua (solo se hard delete totale)
const thumbsDir = path.join(
WEB_ROOT,
userName,
"thumbs",
folderName
);
try {
await fsp.rm(thumbsDir, { recursive: true, force: true });
console.log(`🧹 Rimossa cartella thumbs residua: ${thumbsDir}`);
} catch (err) {
console.log(`⚠️ Errore rimozione thumbs dir: ${thumbsDir}`, err);
}
return {
totalPhotos: rows.length,
softDeleted: softCount,
hardDeleted: hardCount,
removedThumbsDir: thumbsDir
};
}
return { deleteFolderForUser };
};