tanker booking accept or reject by user for particular supplier

master^2
Varun 3 weeks ago
parent f9ea6a414e
commit f95adb6042

@ -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);
}
};

@ -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();
};

Loading…
Cancel
Save