Files
Pickup-Config/services/storeWatchStore.js
2025-11-17 21:37:22 +01:00

96 lines
2.5 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const STORE_WATCH_DIR = path.join(__dirname, '..', 'config');
function ensureDir() {
if (!fs.existsSync(STORE_WATCH_DIR)) {
fs.mkdirSync(STORE_WATCH_DIR, { recursive: true });
}
}
function getStoreWatchPath(profileId = 'shared') {
return path.join(STORE_WATCH_DIR, `${profileId}-store-watch.json`);
}
function sanitizeEntry(entry) {
if (!entry || !entry.storeId) {
return null;
}
const parsedLastCheck = Number(entry.lastStatusCheckAt);
const normalized = {
storeId: String(entry.storeId),
storeName: entry.storeName ? String(entry.storeName).trim() : `Store ${entry.storeId}`,
regionId: entry.regionId ? String(entry.regionId) : '',
regionName: entry.regionName ? String(entry.regionName).trim() : '',
lastTeamSearchStatus:
entry.lastTeamSearchStatus === 1
? 1
: entry.lastTeamSearchStatus === 0
? 0
: null,
lastStatusCheckAt: Number.isFinite(parsedLastCheck) ? parsedLastCheck : null
};
if (!normalized.regionId) {
return null;
}
return normalized;
}
function readStoreWatch(profileId) {
ensureDir();
const filePath = getStoreWatchPath(profileId);
if (!fs.existsSync(filePath)) {
fs.writeFileSync(filePath, JSON.stringify([], null, 2));
return [];
}
try {
const raw = fs.readFileSync(filePath, 'utf8');
const parsed = JSON.parse(raw);
if (!Array.isArray(parsed)) {
return [];
}
const unique = new Map();
parsed.forEach((entry) => {
const sanitized = sanitizeEntry(entry);
if (sanitized) {
unique.set(sanitized.storeId, sanitized);
}
});
return Array.from(unique.values());
} catch (error) {
console.error(`[STORE-WATCH] Konnte Datei ${filePath} nicht lesen:`, error.message);
return [];
}
}
function writeStoreWatch(profileId, entries = []) {
const sanitized = [];
const seen = new Set();
entries.forEach((entry) => {
const normalized = sanitizeEntry(entry);
if (normalized && !seen.has(normalized.storeId)) {
sanitized.push(normalized);
seen.add(normalized.storeId);
}
});
ensureDir();
const filePath = getStoreWatchPath(profileId);
fs.writeFileSync(filePath, JSON.stringify(sanitized, null, 2));
return sanitized;
}
function listWatcherProfiles() {
ensureDir();
return fs
.readdirSync(STORE_WATCH_DIR)
.filter((file) => file.endsWith('-store-watch.json'))
.map((file) => file.replace(/-store-watch\.json$/, ''));
}
module.exports = {
readStoreWatch,
writeStoreWatch,
listWatcherProfiles
};