From f95adb6042de2fc08ac54a009a8f4cd5d6243c93 Mon Sep 17 00:00:00 2001 From: Varun Date: Tue, 16 Sep 2025 11:06:19 +0530 Subject: [PATCH] tanker booking accept or reject by user for particular supplier --- src/controllers/userController.js | 55 +++++++++++++++++++++++++++++++ src/routes/usersRoute.js | 40 ++++++++++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/src/controllers/userController.js b/src/controllers/userController.js index 18c9422f..2fda58fa 100644 --- a/src/controllers/userController.js +++ b/src/controllers/userController.js @@ -1997,3 +1997,58 @@ exports.updateQuotedAmountForSupplier = async (req, reply) => { } }; +exports.updatestatusForSupplier = async (req, reply) => { + try { + const { _id } = req.params; + const { supplierId, status } = req.body; + + if (!_id) { + return reply.code(400).send({ status_code: 400, message: '_id (param) is required' }); + } + if (!supplierId) { + return reply.code(400).send({ status_code: 400, message: 'supplierId (body) is required' }); + } + if (typeof status === 'undefined' || status === null || String(status).trim() === '') { + return reply.code(400).send({ status_code: 400, message: 'status (body) is required' }); + } + + // Map short keywords to the stored values + let statusToSave = String(status).trim().toLowerCase(); + if (statusToSave === 'accept') statusToSave = 'accepted_by_user'; + else if (statusToSave === 'reject') statusToSave = 'rejected_by_user'; + // otherwise keep the original (but normalized) value + + // Atomic update using positional $ operator + const filter = { _id, 'requested_suppliers.supplierId': supplierId }; + const update = { $set: { 'requested_suppliers.$.status': statusToSave } }; + + const updated = await RequestedBooking.findOneAndUpdate(filter, update, { + new: true, + runValidators: true, + }).lean(); + + if (!updated) { + // either booking _id not found OR supplierId not found inside requested_suppliers + const bookingExists = await RequestedBooking.findById(_id).lean(); + if (!bookingExists) { + return reply.code(404).send({ status_code: 404, message: `Booking with _id ${_id} not found` }); + } + + // booking exists but supplier entry missing + return reply.code(404).send({ + status_code: 404, + message: `Supplier ${supplierId} not found in requested_suppliers for booking ${_id}`, + }); + } + + return reply.code(200).send({ + status_code: 200, + message: `status updated for supplier ${supplierId}`, + data: updated, + }); + } catch (err) { + console.error('updatestatusForSupplier error:', err); + throw boom.boomify(err); + } +}; + diff --git a/src/routes/usersRoute.js b/src/routes/usersRoute.js index 84039bb8..ea6165d1 100644 --- a/src/routes/usersRoute.js +++ b/src/routes/usersRoute.js @@ -1412,5 +1412,45 @@ fastify.route({ handler: userController.updateQuotedAmountForSupplier, }); + fastify.route({ + method: 'PUT', + url: '/api/request-booking-status/:_id/supplier/quotestatus', + schema: { + description: + 'Update status for a supplier inside requested_suppliers for a requested booking', + tags: ['User'], + summary: 'Update tanker booking of pearticular supplier status by User', + params: { + type: 'object', + properties: { + _id: { type: 'string', description: 'Booking _id' }, + }, + required: ['_id'], + }, + body: { + type: 'object', + properties: { + supplierId: { type: 'string' }, + status: { type:'string'}, + }, + + }, + response: { + 200: { + type: 'object', + }, + 400: { type: 'object' }, + 404: { type: 'object' }, + }, + security: [ + { + basicAuth: [], + }, + ], + }, + // preHandler: fastify.auth([fastify.authenticate]), // enable if needed + handler: userController.updatestatusForSupplier, + }); + next(); };