53 lines
1.3 KiB
JavaScript
53 lines
1.3 KiB
JavaScript
// api_v1/scanner/scanFile.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
|
|
|
|
let st;
|
|
try {
|
|
st = await fsp.stat(absFile);
|
|
} catch {
|
|
log(`⛔ Impossibile leggere stat per ${absFile}`);
|
|
return null;
|
|
}
|
|
|
|
const id = sha256(`${userName}/${cartella}/${relPath}`);
|
|
|
|
log(`📄 scanFile → user=${userName} cartella=${cartella} file=${name} id=${id}`);
|
|
|
|
return {
|
|
id,
|
|
user: userName,
|
|
cartella,
|
|
name,
|
|
relPath,
|
|
absPath: absFile,
|
|
ext,
|
|
stat: st,
|
|
path: `/photos/${userName}/original/${cartella}/${relPath}`
|
|
};
|
|
}
|
|
|
|
module.exports = scanFile;
|