feat: migrate from static config to database and add authentication
- 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
This commit is contained in:
71
server/routes/topology.ts
Normal file
71
server/routes/topology.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user