Initial commit: enterprise digital platform with portal SSO, DigiServer, IT Assets, NetworkView, Server Monitor
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
const express = require('express');
|
||||
const { v4: uuidv4 } = require('uuid');
|
||||
const db = require('../db');
|
||||
const { logAudit } = require('../audit');
|
||||
const router = express.Router();
|
||||
|
||||
// GET /api/rooms?siteId=
|
||||
router.get('/', (req, res) => {
|
||||
const { siteId } = req.query;
|
||||
if (!siteId) return res.status(400).json({ error: 'siteId query param required' });
|
||||
|
||||
const rooms = db.prepare(`
|
||||
SELECT r.*, COUNT(ra.id) as rack_count
|
||||
FROM rooms r
|
||||
LEFT JOIN racks ra ON ra.room_id = r.id
|
||||
WHERE r.site_id = ?
|
||||
GROUP BY r.id
|
||||
ORDER BY r.name
|
||||
`).all(siteId);
|
||||
res.json(rooms);
|
||||
});
|
||||
|
||||
// GET /api/rooms/:id
|
||||
router.get('/:id', (req, res) => {
|
||||
const room = db.prepare('SELECT * FROM rooms WHERE id = ?').get(req.params.id);
|
||||
if (!room) return res.status(404).json({ error: 'Room not found' });
|
||||
|
||||
const racks = db.prepare(`
|
||||
SELECT ra.*, COUNT(c.id) as component_count
|
||||
FROM racks ra
|
||||
LEFT JOIN components c ON c.rack_id = ra.id
|
||||
WHERE ra.room_id = ?
|
||||
GROUP BY ra.id
|
||||
ORDER BY ra.name
|
||||
`).all(req.params.id);
|
||||
|
||||
const site = db.prepare('SELECT id, name FROM sites WHERE id = ?').get(room.site_id);
|
||||
res.json({ ...room, racks, site });
|
||||
});
|
||||
|
||||
// POST /api/rooms
|
||||
router.post('/', (req, res) => {
|
||||
const { site_id, name, notes } = req.body;
|
||||
if (!site_id || !name) return res.status(400).json({ error: 'site_id and name are required' });
|
||||
|
||||
const site = db.prepare('SELECT id FROM sites WHERE id = ?').get(site_id);
|
||||
if (!site) return res.status(404).json({ error: 'Site not found' });
|
||||
|
||||
const id = uuidv4();
|
||||
db.prepare('INSERT INTO rooms (id, site_id, name, notes) VALUES (?, ?, ?, ?)').run(
|
||||
id, site_id, name, notes || ''
|
||||
);
|
||||
const created = db.prepare('SELECT * FROM rooms WHERE id = ?').get(id);
|
||||
logAudit(req, { action: 'create', entityType: 'room', entityId: id, entityName: name });
|
||||
res.status(201).json(created);
|
||||
});
|
||||
|
||||
// PUT /api/rooms/:id
|
||||
router.put('/:id', (req, res) => {
|
||||
const room = db.prepare('SELECT * FROM rooms WHERE id = ?').get(req.params.id);
|
||||
if (!room) return res.status(404).json({ error: 'Room not found' });
|
||||
|
||||
const { name, notes } = req.body;
|
||||
const changes = {};
|
||||
if (name != null && name !== room.name) changes.name = { from: room.name, to: name };
|
||||
db.prepare(`
|
||||
UPDATE rooms SET name = ?, notes = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?
|
||||
`).run(name ?? room.name, notes ?? room.notes, req.params.id);
|
||||
|
||||
logAudit(req, { action: 'update', entityType: 'room', entityId: room.id, entityName: name ?? room.name, changes });
|
||||
res.json(db.prepare('SELECT * FROM rooms WHERE id = ?').get(req.params.id));
|
||||
});
|
||||
|
||||
// DELETE /api/rooms/:id
|
||||
router.delete('/:id', (req, res) => {
|
||||
const room = db.prepare('SELECT * FROM rooms WHERE id = ?').get(req.params.id);
|
||||
if (!room) return res.status(404).json({ error: 'Room not found' });
|
||||
|
||||
db.prepare('DELETE FROM rooms WHERE id = ?').run(req.params.id);
|
||||
logAudit(req, { action: 'delete', entityType: 'room', entityId: room.id, entityName: room.name });
|
||||
res.json({ ok: true });
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user