Initial commit of CK-QR Platform

This commit is contained in:
Mohan Ki
2026-07-27 13:42:18 +05:30
commit 60dcb029dc
19 changed files with 2582 additions and 0 deletions
+91
View File
@@ -0,0 +1,91 @@
const express = require('express');
const router = express.Router();
const { Pool } = require('pg');
// In a real app, you would have an admin middleware protecting this
// const { verifyAdminToken } = require('../middleware/adminAuth');
const pgPool = new Pool({
host: process.env.PGHOST || 'postgres',
port: process.env.PGPORT || 5432,
user: process.env.PGUSER || 'postgres',
password: process.env.PGPASSWORD || 'postgres',
database: process.env.PGDATABASE || 'ckqr',
});
// List all users
router.get('/users', async (req, res) => {
try {
const result = await pgPool.query('SELECT id, email, role, created_at FROM users ORDER BY created_at DESC');
res.json(result.rows);
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Server Error' });
}
});
// Update a user's tier
router.put('/users/:id/tier', async (req, res) => {
const { id } = req.params;
const { role } = req.body; // 'free', 'pro', 'enterprise'
if (!['free', 'pro', 'enterprise'].includes(role)) {
return res.status(400).json({ error: 'Invalid role specified' });
}
try {
const result = await pgPool.query(
'UPDATE users SET role = $1 WHERE id = $2 RETURNING id, email, role',
[role, id]
);
if (result.rows.length === 0) {
return res.status(404).json({ error: 'User not found' });
}
res.json({ message: 'User tier updated successfully', user: result.rows[0] });
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Server Error' });
}
});
// Get all API settings
router.get('/settings', async (req, res) => {
try {
const result = await pgPool.query('SELECT * FROM app_settings ORDER BY category, key');
res.json(result.rows);
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Server Error fetching settings' });
}
});
// Update multiple API settings
router.put('/settings', async (req, res) => {
const { settings } = req.body; // Array of { key, value }
if (!Array.isArray(settings)) return res.status(400).json({ error: 'Invalid settings format' });
const client = await pgPool.connect();
try {
await client.query('BEGIN');
for (const setting of settings) {
await client.query(
`INSERT INTO app_settings (key, value)
VALUES ($1, $2)
ON CONFLICT (key) DO UPDATE SET value = $2, updated_at = CURRENT_TIMESTAMP`,
[setting.key, setting.value]
);
}
await client.query('COMMIT');
res.json({ message: 'Settings updated successfully' });
} catch (err) {
await client.query('ROLLBACK');
console.error(err);
res.status(500).json({ error: 'Server Error updating settings' });
} finally {
client.release();
}
});
module.exports = router;