refactor: extract PDF rendering and storage logic into dedicated service classes
This commit is contained in:
60
src/services/PdfStorage.js
Normal file
60
src/services/PdfStorage.js
Normal 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;
|
||||
Reference in New Issue
Block a user