- Add ComplianceStatus.PENDING and configVersion to DeviceComplianceInfo - Add ComplianceReport + ComplianceDeviceResult types to ConfigurationEngine - Expose evaluateSpecific() as public (used by compliance + dry-run) - Add complianceReport() method: filter matching devices, evaluate each - Fix matchesCriteria: skip parameterCriteria entries with null/empty name - Fix getDeviceParameterValue: fallback to plain object arrays (DeviceRecord) - Fix findDevice: support lookup by both identifier and deviceId.id - ConfigurationService.update: version is now auto-managed (no user input) - behavioral changes (criteria/params/policy/priority/…) → patch bump - bumpType field allows 'patch' | 'minor' | 'major' - cosmetic changes (name/tags) → no bump - Add sanitizeCriteria: filter null/empty parameterCriteria names silently - Add isBehavioralChange helper - Add DeviceModel.resetComplianceForConfiguration call on behavioral update - Add ConfigurationModel.distinctTags() + controller endpoint GET /tags - Add controller endpoint GET /configurations/:id/compliance - Add DeviceModel.getDistinctValues for inventory fields - Fix unit tests: mock DeviceModel, remove obsolete version-validation test - Add 14 new unit tests (engine: 5, service: 9) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
79 lines
4.6 KiB
TypeScript
79 lines
4.6 KiB
TypeScript
import router from '@adonisjs/core/services/router'
|
|
|
|
import { middleware } from '#start/kernel'
|
|
|
|
const DevicesController = () => import('#controllers/devices_controller')
|
|
const CommandsController = () => import('#controllers/commands_controller')
|
|
const ConfigurationsV1Controller = () => import('#controllers/configurations_v1_controller')
|
|
const FirmwareCatalogController = () => import('#controllers/firmware_catalog_controller')
|
|
const HealthController = () => import('#controllers/health_controller')
|
|
const PagesController = () => import('#controllers/pages_controller')
|
|
const CwmpController = () => import('#controllers/cwmp_controller')
|
|
|
|
// CWMP/TR-069 endpoint (SOAP/XML) - uses dedicated middleware for XML parsing
|
|
router.post('/cwmp10', [CwmpController, 'handle']).use([middleware.cwmpLogger(), middleware.cwmp()])
|
|
|
|
// Health checks
|
|
router.get('/api/v1/checklife', [HealthController, 'checklife'])
|
|
router.get('/api/v1/checkservice', [HealthController, 'checkservice'])
|
|
|
|
// REST API routes
|
|
router.group(() => {
|
|
// Devices
|
|
router.get('/devices', [DevicesController, 'index'])
|
|
router.get('/devices/criteria-values', [DevicesController, 'criteriaValues'])
|
|
router.get('/devices/:identifier', [DevicesController, 'show'])
|
|
router.delete('/devices/:identifier', [DevicesController, 'destroy'])
|
|
router.post('/devices/:identifier/command', [DevicesController, 'executeCommand'])
|
|
router.post('/devices/:identifier/refresh', [DevicesController, 'refresh'])
|
|
|
|
// Commands
|
|
router.get('/commands', [CommandsController, 'index'])
|
|
router.get('/commands/:id', [CommandsController, 'show'])
|
|
router.post('/commands', [CommandsController, 'store'])
|
|
|
|
// Unified Configuration API (v1)
|
|
router.get('/configurations', [ConfigurationsV1Controller, 'index'])
|
|
router.get('/configurations/tags', [ConfigurationsV1Controller, 'listTags'])
|
|
router.post('/configurations', [ConfigurationsV1Controller, 'store'])
|
|
router.get('/configurations/:id', [ConfigurationsV1Controller, 'show'])
|
|
router.put('/configurations/:id', [ConfigurationsV1Controller, 'update'])
|
|
router.delete('/configurations/:id', [ConfigurationsV1Controller, 'destroy'])
|
|
router.patch('/configurations/:id/toggle', [ConfigurationsV1Controller, 'toggleEnabled'])
|
|
router.patch('/configurations/:id/tags', [ConfigurationsV1Controller, 'manageTags'])
|
|
router.get('/configurations/:id/history', [ConfigurationsV1Controller, 'history'])
|
|
router.post('/configurations/:id/dry-run', [ConfigurationsV1Controller, 'dryRun'])
|
|
router.get('/configurations/:id/compliance', [ConfigurationsV1Controller, 'compliance'])
|
|
|
|
// Firmware Catalog API (v1)
|
|
router.get('/firmware-catalog', [FirmwareCatalogController, 'index'])
|
|
router.get('/firmware-catalog/entries', [FirmwareCatalogController, 'listEntries'])
|
|
router.get('/firmware-catalog/entries/:id', [FirmwareCatalogController, 'showEntry'])
|
|
router.get('/firmware-catalog/routes', [FirmwareCatalogController, 'listRoutes'])
|
|
router.post('/firmware-catalog/entries', [FirmwareCatalogController, 'createEntry'])
|
|
router.put('/firmware-catalog/entries/:id', [FirmwareCatalogController, 'updateEntry'])
|
|
router.delete('/firmware-catalog/entries/:id', [FirmwareCatalogController, 'deleteEntry'])
|
|
router.post('/firmware-catalog/routes', [FirmwareCatalogController, 'createRoute'])
|
|
router.put('/firmware-catalog/routes/:id', [FirmwareCatalogController, 'updateRoute'])
|
|
router.delete('/firmware-catalog/routes/:id', [FirmwareCatalogController, 'deleteRoute'])
|
|
}).prefix('/api/v1')
|
|
|
|
// Inertia page routes
|
|
router.get('/', [PagesController, 'home'])
|
|
router.get('/devices/:identifier', [PagesController, 'deviceDetail'])
|
|
router.post('/devices/:identifier/refresh', [PagesController, 'refreshDevice'])
|
|
router.post('/devices/:identifier/get-model', [PagesController, 'getModel'])
|
|
router.get('/commands', [PagesController, 'commands']).as('commands.page')
|
|
router.get('/commands/fleet', [PagesController, 'commandsFleet'])
|
|
router.post('/commands/fleet', [PagesController, 'storeFleetDevices'])
|
|
router.post('/commands/fleet/command', [PagesController, 'storeFleetCommand'])
|
|
|
|
// Unified Configuration System Inertia routes
|
|
router.get('/configurations', [PagesController, 'configurationsList'])
|
|
router.get('/configurations/create', [PagesController, 'configurationCreate'])
|
|
router.get('/configurations/:id/edit', [PagesController, 'configurationEdit'])
|
|
router.get('/configurations/:id/detail', [PagesController, 'configurationDetail'])
|
|
router.get('/firmware-catalog', [PagesController, 'firmwareCatalog'])
|
|
router.get('/firmware-catalog/create', [PagesController, 'firmwareCatalogCreate'])
|
|
router.get('/firmware-catalog/:id/edit', [PagesController, 'firmwareCatalogEdit'])
|