feat: split Repairs into FM, Repair, and Custody workflows
The old Repairs module had grown ticketing-system features (status lifecycle, comments, assignee, notes) that duplicate what the external ticketing tool already owns. Vector only needs to track whether maintenance is open or closed. - Rename RepairJob -> Fm (OPEN/CLOSED only), drop RepairComment, assignee, notes - New Repair table: persistent log of physical part swaps, with ingest on unknown broken MPN via partModels.upsertByMpn - New custody model: PENDING_DROP_IN_CUSTODY / PENDING_DESTRUCTION_IN_CUSTODY states + Part.custodianId, with a "My Custody" page for drop-off - PartModel.destroyOnFail routes broken parts to the destruction path - Host lookup on /fms and /repairs accepts hostId XOR assetId - Wire the dormant webhook emitter: fm.opened, fm.closed, repair.logged - Single fresh Prisma migration (dev DB was wiped, no backfill) Tests: 60 passing (custody transitions in parts.test.ts; new fms.test.ts, repairs.test.ts, custody.test.ts covering happy paths, validation failures, webhook emissions, and ingest-on-unknown-MPN). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -22,7 +22,9 @@ import partRoutes from './routes/parts.js';
|
||||
import tagRoutes from './routes/tags.js';
|
||||
import categoryRoutes from './routes/categories.js';
|
||||
import hostRoutes from './routes/hosts.js';
|
||||
import fmRoutes from './routes/fms.js';
|
||||
import repairRoutes from './routes/repairs.js';
|
||||
import custodyRoutes from './routes/custody.js';
|
||||
import savedViewRoutes from './routes/saved-views.js';
|
||||
import analyticsRoutes from './routes/analytics.js';
|
||||
import webhookRoutes from './routes/webhooks.js';
|
||||
@@ -88,7 +90,9 @@ app.use('/api/parts', partRoutes);
|
||||
app.use('/api/tags', tagRoutes);
|
||||
app.use('/api/categories', categoryRoutes);
|
||||
app.use('/api/hosts', hostRoutes);
|
||||
app.use('/api/fms', fmRoutes);
|
||||
app.use('/api/repairs', repairRoutes);
|
||||
app.use('/api/custody', custodyRoutes);
|
||||
app.use('/api/saved-views', savedViewRoutes);
|
||||
app.use('/api/analytics', analyticsRoutes);
|
||||
app.use('/api/admin/webhooks', webhookRoutes);
|
||||
|
||||
Reference in New Issue
Block a user