39647-vm/backend/lib/boxesStore.js
Flatlogic Bot 986d159d20 1
2026-04-15 10:39:38 +00:00

63 lines
1.6 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const BOXES_FILE = path.join(__dirname, '..', 'data', 'boxes.json');
const DEFAULT_BOXES = Array.from({ length: 8 }, (_, index) => ({
id: `box-${index + 1}`,
name: `Box ${index + 1}`,
price: 0,
image: '',
description: '',
}));
function ensureBoxesFile() {
const dir = path.dirname(BOXES_FILE);
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
if (!fs.existsSync(BOXES_FILE)) {
fs.writeFileSync(BOXES_FILE, JSON.stringify(DEFAULT_BOXES, null, 2));
}
}
function normalizeBox(box = {}, index = 0) {
return {
id: box.id || `box-${index + 1}`,
name: String(box.name || `Box ${index + 1}`).trim(),
price: Number(box.price || 0),
image: String(box.image || '').trim(),
description: String(box.description || '').trim(),
};
}
function readBoxes() {
ensureBoxesFile();
try {
const raw = fs.readFileSync(BOXES_FILE, 'utf8');
const parsed = JSON.parse(raw);
if (!Array.isArray(parsed)) {
return DEFAULT_BOXES.map(normalizeBox);
}
const padded = Array.from({ length: 8 }, (_, index) => normalizeBox(parsed[index] || {}, index));
return padded;
} catch (error) {
console.error('Error reading boxes file:', error);
return DEFAULT_BOXES.map(normalizeBox);
}
}
function writeBoxes(boxes = []) {
ensureBoxesFile();
const normalized = Array.from({ length: 8 }, (_, index) => normalizeBox(boxes[index] || {}, index));
fs.writeFileSync(BOXES_FILE, JSON.stringify(normalized, null, 2));
return normalized;
}
module.exports = {
BOXES_FILE,
readBoxes,
writeBoxes,
};