73 lines
2 KiB
JavaScript
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 };
|
|
};
|