b0e9c5d1d0
Add /hosts/:id detail page with unified timeline (HostEvents + FMs + Repairs + part arrivals/departures) and a deployed-parts table. Hosts list rows now link to the page. FM list + detail surface inline State/Stack badges next to the asset ID, with the asset ID linking to the host page. HostEvent audit model added; create/update in the hosts service now diff and log state, stack, and field changes the same way parts.ts does. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
23 lines
937 B
TypeScript
23 lines
937 B
TypeScript
import { Router } from 'express';
|
|
import {
|
|
CreateHostRequest,
|
|
HostListQuery,
|
|
HostTimelineQuery,
|
|
UpdateHostRequest,
|
|
} from '@vector/shared';
|
|
import * as ctrl from '../controllers/hosts.js';
|
|
import { requireAuth, requireRole } from '../middleware/auth.js';
|
|
import { validate } from '../middleware/validate.js';
|
|
|
|
const router = Router();
|
|
|
|
router.get('/', requireAuth, validate('query', HostListQuery), ctrl.list);
|
|
router.post('/', requireAuth, requireRole('ADMIN'), validate('body', CreateHostRequest), ctrl.create);
|
|
router.get('/:id', requireAuth, ctrl.get);
|
|
router.get('/:id/deployed-parts', requireAuth, ctrl.listDeployedParts);
|
|
router.get('/:id/timeline', requireAuth, validate('query', HostTimelineQuery), ctrl.getTimeline);
|
|
router.patch('/:id', requireAuth, requireRole('ADMIN'), validate('body', UpdateHostRequest), ctrl.update);
|
|
router.delete('/:id', requireAuth, requireRole('ADMIN'), ctrl.remove);
|
|
|
|
export default router;
|