refactor: extract PDF rendering and storage logic into dedicated service classes

This commit is contained in:
ɧσℓσ
2025-12-10 20:03:33 +01:00
parent 29f51ff6d3
commit 9d2c4170d2
3 changed files with 125 additions and 104 deletions

View File

@@ -0,0 +1,60 @@
const fs = require('fs');
const path = require('path');
const axios = require('axios');
const logger = require('../utils/logger');
class PdfStorage {
constructor(baseDir) {
this.baseDir = baseDir || path.join(process.cwd(), 'data', 'pdfs');
this.sessionFile = path.join(this.baseDir, 'sessions.json');
this.ensureDir();
}
ensureDir() {
fs.mkdirSync(this.baseDir, { recursive: true });
}
async downloadPdf(url) {
const response = await axios.get(url, { responseType: 'arraybuffer' });
const fileName = `pdf-${Date.now()}-${Math.random().toString(36).slice(2)}.pdf`;
const targetPath = path.join(this.baseDir, fileName);
fs.writeFileSync(targetPath, response.data);
return targetPath;
}
writeImageFile(buffer, pageIndex) {
const fileName = `page-${pageIndex}-${Date.now()}-${Math.random().toString(36).slice(2)}.png`;
const targetPath = path.join(this.baseDir, fileName);
fs.writeFileSync(targetPath, buffer);
return targetPath;
}
loadSessions() {
try {
if (!fs.existsSync(this.sessionFile)) return [];
const raw = fs.readFileSync(this.sessionFile, 'utf8');
return JSON.parse(raw);
} catch (e) {
logger.error('Erreur lors du chargement des sessions PDF persistées:', e);
return [];
}
}
saveSessions(data) {
try {
fs.writeFileSync(this.sessionFile, JSON.stringify(data, null, 2), 'utf8');
} catch (e) {
logger.error('Erreur lors de la sauvegarde des sessions PDF:', e);
}
}
deleteFiles(paths) {
paths.forEach(p => {
if (p && fs.existsSync(p)) {
try { fs.unlinkSync(p); } catch (e) { logger.warn('Erreur suppression fichier PDF/PNG', e); }
}
});
}
}
module.exports = PdfStorage;