/// // // M16 — Create user-scoped vehicles collection. // // Customer vehicles were previously inferred from repairOrders/quotes only. // The Customers page already has add/edit/delete vehicle UI, so this collection // stores explicit vehicle records keyed by customerId and userId. migrate( (db) => { let existing = null; try { existing = db.findCollectionByNameOrId('vehicles'); } catch {} if (existing) { console.log('[M16] vehicles already exists — skipping'); return; } const col = new Collection(); col.name = 'vehicles'; col.type = 'base'; col.system = false; col.fields.add(new TextField({ name: 'userId', required: true })); col.fields.add(new TextField({ name: 'customerId', required: true })); col.fields.add(new TextField({ name: 'make', required: true })); col.fields.add(new TextField({ name: 'model', required: true })); col.fields.add(new TextField({ name: 'year', required: false })); col.fields.add(new TextField({ name: 'vin', required: false })); col.fields.add(new TextField({ name: 'licensePlate', required: false })); col.fields.add(new TextField({ name: 'mileage', required: false })); col.fields.add(new TextField({ name: 'color', required: false })); col.fields.add(new TextField({ name: 'engine', required: false })); const rule = 'userId = @request.auth.id'; col.listRule = rule; col.viewRule = rule; col.createRule = rule; col.updateRule = rule; col.deleteRule = rule; db.save(col); console.log('[M16] created vehicles collection'); }, (db) => { let col = null; try { col = db.findCollectionByNameOrId('vehicles'); } catch {} if (col) { db.deleteCollection(col); console.log('[M16] deleted vehicles collection'); } } );