95 lines
2.9 KiB
JavaScript
95 lines
2.9 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const CONFIG_DIR = path.join(__dirname, '..', 'config');
|
|
const SETTINGS_FILE = path.join(CONFIG_DIR, 'admin-settings.json');
|
|
|
|
const DEFAULT_SETTINGS = {
|
|
scheduleCron: '*/10 7-22 * * *',
|
|
randomDelayMinSeconds: 10,
|
|
randomDelayMaxSeconds: 120,
|
|
initialDelayMinSeconds: 5,
|
|
initialDelayMaxSeconds: 30,
|
|
ignoredSlots: [
|
|
{
|
|
storeId: '51450',
|
|
description: 'TVS'
|
|
}
|
|
]
|
|
};
|
|
|
|
function ensureDir() {
|
|
if (!fs.existsSync(CONFIG_DIR)) {
|
|
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
}
|
|
}
|
|
|
|
function sanitizeNumber(value, fallback) {
|
|
const num = Number(value);
|
|
if (Number.isFinite(num) && num >= 0) {
|
|
return num;
|
|
}
|
|
return fallback;
|
|
}
|
|
|
|
function sanitizeIgnoredSlots(slots = []) {
|
|
if (!Array.isArray(slots)) {
|
|
return DEFAULT_SETTINGS.ignoredSlots;
|
|
}
|
|
return slots
|
|
.map((slot) => ({
|
|
storeId: slot?.storeId ? String(slot.storeId) : '',
|
|
description: slot?.description ? String(slot.description) : ''
|
|
}))
|
|
.filter((slot) => slot.storeId);
|
|
}
|
|
|
|
function readSettings() {
|
|
ensureDir();
|
|
if (!fs.existsSync(SETTINGS_FILE)) {
|
|
fs.writeFileSync(SETTINGS_FILE, JSON.stringify(DEFAULT_SETTINGS, null, 2));
|
|
return { ...DEFAULT_SETTINGS };
|
|
}
|
|
|
|
try {
|
|
const raw = fs.readFileSync(SETTINGS_FILE, 'utf8');
|
|
const parsed = JSON.parse(raw);
|
|
return {
|
|
scheduleCron: parsed.scheduleCron || DEFAULT_SETTINGS.scheduleCron,
|
|
randomDelayMinSeconds: sanitizeNumber(parsed.randomDelayMinSeconds, DEFAULT_SETTINGS.randomDelayMinSeconds),
|
|
randomDelayMaxSeconds: sanitizeNumber(parsed.randomDelayMaxSeconds, DEFAULT_SETTINGS.randomDelayMaxSeconds),
|
|
initialDelayMinSeconds: sanitizeNumber(parsed.initialDelayMinSeconds, DEFAULT_SETTINGS.initialDelayMinSeconds),
|
|
initialDelayMaxSeconds: sanitizeNumber(parsed.initialDelayMaxSeconds, DEFAULT_SETTINGS.initialDelayMaxSeconds),
|
|
ignoredSlots: sanitizeIgnoredSlots(parsed.ignoredSlots)
|
|
};
|
|
} catch (error) {
|
|
console.error('Konnte Admin-Einstellungen nicht lesen:', error.message);
|
|
return { ...DEFAULT_SETTINGS };
|
|
}
|
|
}
|
|
|
|
function writeSettings(patch = {}) {
|
|
const current = readSettings();
|
|
const next = {
|
|
scheduleCron: patch.scheduleCron || current.scheduleCron,
|
|
randomDelayMinSeconds: sanitizeNumber(patch.randomDelayMinSeconds, current.randomDelayMinSeconds),
|
|
randomDelayMaxSeconds: sanitizeNumber(patch.randomDelayMaxSeconds, current.randomDelayMaxSeconds),
|
|
initialDelayMinSeconds: sanitizeNumber(patch.initialDelayMinSeconds, current.initialDelayMinSeconds),
|
|
initialDelayMaxSeconds: sanitizeNumber(patch.initialDelayMaxSeconds, current.initialDelayMaxSeconds),
|
|
ignoredSlots:
|
|
patch.ignoredSlots !== undefined
|
|
? sanitizeIgnoredSlots(patch.ignoredSlots)
|
|
: current.ignoredSlots
|
|
};
|
|
|
|
ensureDir();
|
|
fs.writeFileSync(SETTINGS_FILE, JSON.stringify(next, null, 2));
|
|
return next;
|
|
}
|
|
|
|
module.exports = {
|
|
DEFAULT_SETTINGS,
|
|
readSettings,
|
|
writeSettings
|
|
};
|