63 lines
1.6 KiB
JavaScript
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,
|
|
};
|