Files
sts-avto-v2/modules/database/crud.js
kalugin66 11fb813a09
All checks were successful
Deploy sts / deploy-sber (push) Successful in 42s
модификация
2026-07-20 00:27:48 +05:00

66 lines
3.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
function createCrudRoutes(app, auth, table, options = {}) {
const { authenticateToken, requireAdmin } = auth;
const prefix = options.prefix || `/api/admin/${table}`;
const allowedFields = options.fields || [];
const extraRoutes = options.extraRoutes || null;
app.get(prefix, authenticateToken, requireAdmin, (req, res) => {
const orderBy = options.orderBy || 'sort_order';
db.all(`SELECT * FROM ${table} ORDER BY ${orderBy}`, (err, rows) => {
if (err) { console.error(err); return res.status(500).json({ error: 'Ошибка БД' }); }
res.json(rows);
});
});
app.post(prefix, authenticateToken, requireAdmin, (req, res) => {
const values = allowedFields.map(f => req.body[f] !== undefined ? req.body[f] : null);
const placeholders = values.map(() => '?').join(', ');
const cols = allowedFields.join(', ');
const stmt = db.prepare(`INSERT INTO ${table} (${cols}) VALUES (${placeholders})`);
stmt.run(...values, function(err) {
if (err) { console.error(err); return res.status(500).json({ error: 'Ошибка создания' }); }
db.get(`SELECT * FROM ${table} WHERE id = ?`, [this.lastID], (err2, row) => {
if (err2) return res.status(500).json({ error: 'Ошибка получения' });
res.status(201).json(row);
});
});
stmt.finalize();
});
app.put(`${prefix}/:id`, authenticateToken, requireAdmin, (req, res) => {
const id = parseInt(req.params.id);
if (isNaN(id)) return res.status(400).json({ error: 'Неверный ID' });
const setClauses = allowedFields.map(f => `${f} = ?`).join(', ');
const values = allowedFields.map(f => req.body[f] !== undefined ? req.body[f] : null);
values.push(id);
const stmt = db.prepare(`UPDATE ${table} SET ${setClauses} WHERE id = ?`);
stmt.run(...values, function(err) {
if (err) { console.error(err); return res.status(500).json({ error: 'Ошибка обновления' }); }
if (this.changes === 0) return res.status(404).json({ error: 'Не найдено' });
db.get(`SELECT * FROM ${table} WHERE id = ?`, [id], (err2, row) => {
if (err2) return res.status(500).json({ error: 'Ошибка получения' });
res.json(row);
});
});
stmt.finalize();
});
app.delete(`${prefix}/:id`, authenticateToken, requireAdmin, (req, res) => {
const id = parseInt(req.params.id);
if (isNaN(id)) return res.status(400).json({ error: 'Неверный ID' });
const stmt = db.prepare(`DELETE FROM ${table} WHERE id = ?`);
stmt.run(id, function(err) {
if (err) { console.error(err); return res.status(500).json({ error: 'Ошибка удаления' }); }
if (this.changes === 0) return res.status(404).json({ error: 'Не найдено' });
res.json({ message: 'Удалено' });
});
stmt.finalize();
});
if (extraRoutes) extraRoutes(app, authenticateToken, requireAdmin);
}
let db;
function init(database) { db = database; }
module.exports = { createCrudRoutes, init };