diff --git a/prisma/migrations/20261001090000_plate_number/migration.sql b/prisma/migrations/20261001090000_plate_number/migration.sql new file mode 100644 index 0000000..c66b93f --- /dev/null +++ b/prisma/migrations/20261001090000_plate_number/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Stock" ADD COLUMN "plateNumber" TEXT; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index c934d24..0c44c32 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -81,6 +81,7 @@ model Stock { paymentType String? leaseProviderType String? financeCompanyName String? + plateNumber String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/scripts/api-check.js b/scripts/api-check.js index dd2b1fb..08abaa6 100644 --- a/scripts/api-check.js +++ b/scripts/api-check.js @@ -308,6 +308,25 @@ async function run(port) { 'lease with both GCI and finance failed' ); + const registered = await request(port, 'PATCH', '/api/stocks/CH-GREEN/stage', { + token: dealerToken, + body: { stage: 'rmvRegistration' }, + }); + assert(registered.status === 200, 'rmv stage failed'); + const plateMissing = await request(port, 'PATCH', '/api/stocks/CH-GREEN/stage', { + token: dealerToken, + body: { stage: 'plateReceived' }, + }); + assert(plateMissing.status === 400, 'plate received without a number should fail'); + const plated = await request(port, 'PATCH', '/api/stocks/CH-GREEN/stage', { + token: dealerToken, + body: { stage: 'plateReceived', plateNumber: 'WP ABC-1234' }, + }); + assert( + plated.status === 200 && plated.json.data.plateNumber === 'WP ABC-1234', + 'saving the plate number failed' + ); + const outside = await request(port, 'POST', '/api/stocks/CH-YELLOW/transfer', { token: repToken, body: { dealerId: dealerC.json.data.id }, diff --git a/src/lib/stockRules.js b/src/lib/stockRules.js index fd72ac7..cb0fcea 100644 --- a/src/lib/stockRules.js +++ b/src/lib/stockRules.js @@ -52,6 +52,7 @@ function serializeStock(stock) { paymentType: stock.paymentType, leaseProviderType: stock.leaseProviderType, financeCompanyName: stock.financeCompanyName, + plateNumber: stock.plateNumber, ageInDays: days, badge: ageBadge(days), }; diff --git a/src/routes/stocks.js b/src/routes/stocks.js index 4f41b42..a293cec 100644 --- a/src/routes/stocks.js +++ b/src/routes/stocks.js @@ -145,6 +145,11 @@ router.patch( data.financeCompanyName = null; } } + if (stage === 'plateReceived') { + const plateNumber = String(req.body?.plateNumber || '').trim(); + if (!plateNumber) throw httpError(400, 'Plate number is required'); + data.plateNumber = plateNumber; + } const updated = await prisma.stock.update({ where: { id: stock.id },