Journal für abholungen
This commit is contained in:
83
services/journalStore.js
Normal file
83
services/journalStore.js
Normal file
@@ -0,0 +1,83 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const CONFIG_DIR = path.join(__dirname, '..', 'config');
|
||||
const IMAGE_ROOT = path.join(CONFIG_DIR, 'journal-images');
|
||||
|
||||
function ensureDir(dirPath) {
|
||||
if (!fs.existsSync(dirPath)) {
|
||||
fs.mkdirSync(dirPath, { recursive: true });
|
||||
}
|
||||
}
|
||||
|
||||
function ensureBaseDirs() {
|
||||
ensureDir(CONFIG_DIR);
|
||||
ensureDir(IMAGE_ROOT);
|
||||
}
|
||||
|
||||
function getJournalPath(profileId = 'shared') {
|
||||
return path.join(CONFIG_DIR, `${profileId}-pickup-journal.json`);
|
||||
}
|
||||
|
||||
function getProfileImageDir(profileId = 'shared') {
|
||||
return path.join(IMAGE_ROOT, String(profileId));
|
||||
}
|
||||
|
||||
function hydrateJournalFile(profileId) {
|
||||
ensureBaseDirs();
|
||||
const filePath = getJournalPath(profileId);
|
||||
if (!fs.existsSync(filePath)) {
|
||||
fs.writeFileSync(filePath, JSON.stringify([], null, 2));
|
||||
}
|
||||
return filePath;
|
||||
}
|
||||
|
||||
function readJournal(profileId) {
|
||||
const filePath = hydrateJournalFile(profileId);
|
||||
try {
|
||||
const raw = fs.readFileSync(filePath, 'utf8');
|
||||
const parsed = JSON.parse(raw);
|
||||
return Array.isArray(parsed) ? parsed : [];
|
||||
} catch (error) {
|
||||
console.error(`[JOURNAL] Konnte Journal für ${profileId} nicht lesen:`, error.message);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
function writeJournal(profileId, entries = []) {
|
||||
const filePath = hydrateJournalFile(profileId);
|
||||
fs.writeFileSync(filePath, JSON.stringify(entries, null, 2));
|
||||
return filePath;
|
||||
}
|
||||
|
||||
function saveJournalImage(profileId, { id, filename, buffer }) {
|
||||
ensureBaseDirs();
|
||||
const profileDir = getProfileImageDir(profileId);
|
||||
ensureDir(profileDir);
|
||||
const safeName = filename.replace(/[^a-zA-Z0-9_.-]/g, '_');
|
||||
const filePath = path.join(profileDir, safeName);
|
||||
fs.writeFileSync(filePath, buffer);
|
||||
return {
|
||||
id,
|
||||
filename: safeName,
|
||||
filePath
|
||||
};
|
||||
}
|
||||
|
||||
function deleteJournalImage(profileId, filename) {
|
||||
if (!filename) {
|
||||
return;
|
||||
}
|
||||
const filePath = path.join(getProfileImageDir(profileId), filename);
|
||||
if (fs.existsSync(filePath)) {
|
||||
fs.unlinkSync(filePath);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
readJournal,
|
||||
writeJournal,
|
||||
saveJournalImage,
|
||||
deleteJournalImage,
|
||||
getProfileImageDir
|
||||
};
|
||||
Reference in New Issue
Block a user