Files
kalugin66 00cf2ebd9a
All checks were successful
Deploy sts / deploy-sber (push) Successful in 33s
фикс край 2
2026-08-04 13:22:46 +05:00

89 lines
3.3 KiB
JavaScript

let db;
function init(database) { db = database; }
function loadEquipmentGallery(data) {
return new Promise((resolve) => {
db.all(`SELECT * FROM equipment_gallery ORDER BY equipment_id, sort_order`, (err, rows) => {
if (err || !rows) { data.equipment_gallery = []; resolve(); return; }
data.equipment_gallery = rows;
resolve();
});
});
}
function loadSiteData() {
const data = {};
function loadTable(table, key) {
return new Promise((resolve) => {
db.all(`SELECT * FROM ${table} ORDER BY sort_order`, (err, rows) => {
if (err) { data[key] = []; resolve(); return; }
if (table === 'equipment' || table === 'partners') {
rows = rows.filter(r => r.is_active == 1);
}
if (table === 'services' || table === 'work_schemes') {
rows = rows.filter(r => r.is_active == 1);
}
data[key] = rows;
resolve();
});
});
}
function loadSettings(table, key, transformFn) {
return new Promise((resolve) => {
db.all(`SELECT * FROM ${table} ORDER BY id`, (err, rows) => {
if (err) { data[key] = {}; resolve(); return; }
if (transformFn) {
data[key] = transformFn(rows);
} else {
const obj = {};
rows.forEach(r => { obj[r.key] = r.value; });
data[key] = obj;
}
resolve();
});
});
}
return Promise.all([
loadSettings('hero_settings', 'hero'),
loadTable('hero_stats', 'hero_stats'),
loadSettings('about_settings', 'about'),
loadTable('about_features', 'about_features'),
loadTable('services', 'services'),
loadTable('work_schemes', 'work_schemes'),
loadTable('process_steps', 'process_steps'),
loadTable('equipment', 'equipment'),
loadEquipmentGallery(data),
loadTable('geo_regions', 'geo_regions'),
loadSettings('geo_settings', 'geo'),
loadTable('licenses', 'licenses'),
loadTable('license_gallery', 'license_gallery'),
loadTable('public_activities', 'public_activities'),
loadTable('activity_gallery', 'activity_gallery'),
loadTable('partners', 'partners'),
loadSettings('settings', 'settings')
]).then(() => data);
}
function setupRoutes(app) {
app.get('/api/site-data', (req, res) => {
loadSiteData().then(data => res.json(data));
});
app.post('/api/leads', (req, res) => {
const { name, phone, message } = req.body;
if (!name || !phone) return res.status(400).json({ error: 'Имя и телефон обязательны' });
const stmt = db.prepare(`INSERT INTO leads (name, phone, message) VALUES (?, ?, ?)`);
stmt.run(name.trim(), phone.trim(), (message || '').trim(), function(err) {
if (err) return res.status(500).json({ error: 'Ошибка БД' });
res.status(201).json({ id: this.lastID, message: 'Заявка сохранена' });
});
stmt.finalize();
});
}
module.exports = { init, setupRoutes, loadSiteData };