43 lines
1.5 KiB
JavaScript
43 lines
1.5 KiB
JavaScript
/**
|
|
* 后台管理 — 仪表盘
|
|
*/
|
|
const router = require('express').Router();
|
|
const db = require('../db');
|
|
const { buildPushMessage } = require('../utils/pushTemplate');
|
|
|
|
router.get('/', (req, res) => {
|
|
const stats = {
|
|
merchants: db.prepare('SELECT COUNT(*) AS n FROM merchants').get().n,
|
|
products: db.prepare('SELECT COUNT(*) AS n FROM products').get().n,
|
|
channels: db.prepare('SELECT COUNT(*) AS n FROM tg_channels').get().n,
|
|
tasks: db.prepare('SELECT COUNT(*) AS n FROM monitor_tasks').get().n,
|
|
recentLogs: db.prepare(`SELECT COUNT(*) AS n FROM check_logs WHERE created_at >= datetime('now', '-1 day')`).get().n,
|
|
};
|
|
|
|
const sampleProduct = db.prepare(`
|
|
SELECT p.*, m.name AS merchant_name,
|
|
p.generated_aff_url AS product_aff_url,
|
|
(
|
|
SELECT url FROM aff_links a
|
|
WHERE a.product_id = p.id AND a.platform = 'telegram'
|
|
ORDER BY a.id DESC LIMIT 1
|
|
) AS tg_aff_url,
|
|
(
|
|
SELECT url FROM aff_links a
|
|
WHERE a.product_id = p.id
|
|
ORDER BY a.id DESC LIMIT 1
|
|
) AS any_aff_url
|
|
FROM products p
|
|
LEFT JOIN merchants m ON p.merchant_id = m.id
|
|
ORDER BY p.id DESC LIMIT 1
|
|
`).get();
|
|
|
|
const preview = sampleProduct
|
|
? buildPushMessage({ ...sampleProduct, aff_url: sampleProduct.product_aff_url || sampleProduct.tg_aff_url || sampleProduct.any_aff_url || sampleProduct.buy_url || sampleProduct.url || null })
|
|
: null;
|
|
|
|
res.render('admin/index', { stats, preview });
|
|
});
|
|
|
|
module.exports = router;
|