// api_v1/scanner/scanFileEntry.js const path = require('path'); const fsp = require('fs/promises'); const { sha256 } = require('./utils'); const { SUPPORTED_EXTS } = require('../config'); const { log } = require('./logger'); /** * scanFile: genera informazioni su UN singolo file * Restituisce lo stesso formato di scanCartella, ma senza recursion. * * Parametri: * - userName * - cartella * - absFile (percorso assoluto del file) * - db (opzionale) */ async function scanFile(userName, cartella, absFile, db) { const ext = path.extname(absFile).toLowerCase(); if (!SUPPORTED_EXTS.has(ext)) { log(`⛔ Estensione non supportata: ${ext}`); return null; } const name = path.basename(absFile); const relPath = name; // singolo file → niente struttura ricorsiva // ID deterministico (funziona anche se il file non esiste) const id = sha256(`${userName}/${cartella}/${relPath}`); let st = null; try { st = await fsp.stat(absFile); } catch { // File NON esiste → caso DEL log(`⛔ Impossibile leggere stat per ${absFile} (file mancante)`); // Continuiamo comunque: l'ID è valido e serve per DEL } log(`📄 scanFile → user=${userName} cartella=${cartella} file=${name} id=${id}`); return { id, user: userName, cartella, name, relPath, absPath: absFile, ext, stat: st, // può essere null path: `/photos/${userName}/original/${cartella}/${relPath}` }; } module.exports = scanFile;