- Replaced static hosts.json and staticConfig.ts with SQLite database (Prisma) - Implemented JWT authentication and Login UI - Added dynamic API routes for hosts, topology, and settings - Updated UI components to fetch and manage state dynamically - Added Settings interface for managing hosts and topology nodes
72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
import { Router } from 'express';
|
|
import { PrismaClient } from '@prisma/client';
|
|
|
|
const router = Router();
|
|
const prisma = new PrismaClient();
|
|
|
|
// GET all nodes and edges
|
|
router.get('/topology', async (req, res) => {
|
|
try {
|
|
const nodes = await prisma.networkNode.findMany();
|
|
const edges = await prisma.networkEdge.findMany();
|
|
res.json({ status: 'success', nodes, edges });
|
|
} catch (error) {
|
|
res.status(500).json({ status: 'error', message: 'Failed to fetch topology' });
|
|
}
|
|
});
|
|
|
|
// POST a new node
|
|
router.post('/topology/nodes', async (req, res) => {
|
|
try {
|
|
const node = await prisma.networkNode.create({ data: req.body });
|
|
res.json({ status: 'success', node });
|
|
} catch (error) {
|
|
res.status(400).json({ status: 'error', message: 'Failed to create node' });
|
|
}
|
|
});
|
|
|
|
// PUT (update) a node
|
|
router.put('/topology/nodes/:id', async (req, res) => {
|
|
try {
|
|
const node = await prisma.networkNode.update({
|
|
where: { id: req.params.id },
|
|
data: req.body,
|
|
});
|
|
res.json({ status: 'success', node });
|
|
} catch (error) {
|
|
res.status(400).json({ status: 'error', message: 'Failed to update node' });
|
|
}
|
|
});
|
|
|
|
// DELETE a node
|
|
router.delete('/topology/nodes/:id', async (req, res) => {
|
|
try {
|
|
await prisma.networkNode.delete({ where: { id: req.params.id } });
|
|
res.json({ status: 'success' });
|
|
} catch (error) {
|
|
res.status(400).json({ status: 'error', message: 'Failed to delete node' });
|
|
}
|
|
});
|
|
|
|
// POST a new edge
|
|
router.post('/topology/edges', async (req, res) => {
|
|
try {
|
|
const edge = await prisma.networkEdge.create({ data: req.body });
|
|
res.json({ status: 'success', edge });
|
|
} catch (error) {
|
|
res.status(400).json({ status: 'error', message: 'Failed to create edge' });
|
|
}
|
|
});
|
|
|
|
// DELETE an edge
|
|
router.delete('/topology/edges/:id', async (req, res) => {
|
|
try {
|
|
await prisma.networkEdge.delete({ where: { id: req.params.id } });
|
|
res.json({ status: 'success' });
|
|
} catch (error) {
|
|
res.status(400).json({ status: 'error', message: 'Failed to delete edge' });
|
|
}
|
|
});
|
|
|
|
export default router;
|