// 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 }; };