46 lines
1.8 KiB
JavaScript
46 lines
1.8 KiB
JavaScript
let db;
|
||
|
||
function init(database) { db = database; }
|
||
|
||
function setupRoutes(app, auth) {
|
||
const { authenticateToken, requireAdmin } = auth;
|
||
|
||
app.get('/api/admin/leads', authenticateToken, requireAdmin, (req, res) => {
|
||
const page = parseInt(req.query.page) || 1;
|
||
const limit = 20;
|
||
const offset = (page - 1) * limit;
|
||
const search = req.query.search || '';
|
||
|
||
let where = '';
|
||
const params = [];
|
||
if (search) {
|
||
where = `WHERE name LIKE ? OR phone LIKE ? OR message LIKE ?`;
|
||
params.push(`%${search}%`, `%${search}%`, `%${search}%`);
|
||
}
|
||
|
||
db.get(`SELECT COUNT(*) as total FROM leads ${where}`, params, (err, countRow) => {
|
||
if (err) return res.status(500).json({ error: 'Ошибка БД' });
|
||
const total = countRow.total;
|
||
db.all(`SELECT * FROM leads ${where} ORDER BY created_at DESC LIMIT ? OFFSET ?`,
|
||
[...params, limit, offset], (err2, rows) => {
|
||
if (err2) return res.status(500).json({ error: 'Ошибка БД' });
|
||
res.json({ data: rows, total, page, totalPages: Math.ceil(total / limit) });
|
||
});
|
||
});
|
||
});
|
||
|
||
app.delete('/api/admin/leads/: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 leads WHERE id = ?`);
|
||
stmt.run(id, function(err) {
|
||
if (err) return res.status(500).json({ error: 'Ошибка удаления' });
|
||
if (this.changes === 0) return res.status(404).json({ error: 'Не найдено' });
|
||
res.json({ message: 'Заявка удалена' });
|
||
});
|
||
stmt.finalize();
|
||
});
|
||
}
|
||
|
||
module.exports = { init, setupRoutes };
|