changes in get all suppliers

master^2
Varun 4 months ago
parent eab4b908bc
commit fa0af6f37b

@ -1,6 +1,7 @@
//Get the data models //Get the data models
const { Supplier, DeliveryBoy, profilePictureSupplier } = require("../models/supplier"); const { Supplier, DeliveryBoy, profilePictureSupplier } = require("../models/supplier");
const { FriendRequest } = require("../models/supplier"); const { FriendRequest } = require("../models/supplier");
const { Tanker,Tankerbooking } = require("../models/tankers");
const { ProfilePicture, User } = require("../models/User"); const { ProfilePicture, User } = require("../models/User");
const supplierController = require("../controllers/supplierController"); const supplierController = require("../controllers/supplierController");
const customJwtAuth = require("../customAuthJwt"); const customJwtAuth = require("../customAuthJwt");
@ -938,44 +939,104 @@ exports.getCurrentSupplier = async (req, reply) => {
// } // }
// }; // };
exports.getSuppliers = async (req, reply) => {
const customerId = req.params.customerId;
const {
type_of_water,
capacity: requestedCapacityStr,
quantity: requestedQuantityStr,
date
} = req.body;
const parseCapacity = (value) => parseFloat((value || "0").toString().replace(/,/g, ""));
const requestedCapacity = parseCapacity(requestedCapacityStr);
const requestedQuantity = parseInt(requestedQuantityStr || "0");
const totalRequiredCapacity = requestedCapacity * requestedQuantity;
exports.getSuppliers = async (req, reply) => {
const limit = parseInt(req.query.limit) || 100;
const page = parseInt(req.query.page) || 1;
const startindex = (page - 1) * limit;
const customerId = req.params.customerId; // Assuming you have already authenticated the user and stored their ID in the request object
try { try {
const friendRequests = await FriendRequest.find({ customerId }); const tankerBookings = await Tankerbooking.find({ date });
const supplierIdsToExclude = friendRequests.map( const bookedTankerSet = new Set(
(request) => request.supplierId tankerBookings.map(booking => `${booking.supplierId}_${booking.tankerName}`)
); );
const suppliers = await Supplier.find({ supplierId: { $nin: supplierIdsToExclude } })
.limit(limit)
.skip(startindex)
.exec();
const supplierIds = suppliers.map((supplier) => supplier.supplierId); // 1⃣ Only filter typeofwater first
const profilePictures = await profilePictureSupplier.find({ let tankers = await Tanker.find({ typeofwater: type_of_water });
supplierId: { $in: supplierIds },
}).exec();
const data = suppliers.map((supplier) => { // 2⃣ Exclude booked tankers
const profilePicture = profilePictures.find( tankers = tankers.filter(tanker => {
(picture) => picture.supplierId === supplier.supplierId const key = `${tanker.supplierId}_${tanker.tankerName}`;
return !bookedTankerSet.has(key);
});
// 3⃣ Group by supplierId
const supplierTankerMap = {};
for (let tanker of tankers) {
if (!supplierTankerMap[tanker.supplierId]) {
supplierTankerMap[tanker.supplierId] = [];
}
supplierTankerMap[tanker.supplierId].push(tanker);
}
// 4⃣ Aggregate supplier capacities
const qualifiedSuppliers = [];
for (let [supplierId, supplierTankers] of Object.entries(supplierTankerMap)) {
const totalAvailableCapacity = supplierTankers.reduce(
(sum, t) => sum + parseCapacity(t.capacity),
0
); );
return {
...supplier.toObject(), if (totalAvailableCapacity >= totalRequiredCapacity) {
picture: profilePicture ? profilePicture.picture : null, qualifiedSuppliers.push({ supplierId, tankers: supplierTankers });
}
}
const connected_suppliers = [];
const non_connected_suppliers = [];
for (let supplierObj of qualifiedSuppliers) {
const supplierData = await Supplier.findOne({ supplierId: supplierObj.supplierId });
const responseData = {
supplier: supplierData,
tankers: supplierObj.tankers
}; };
// 🔥 The correct friend request check:
const friendRequest = await FriendRequest.findOne({
customerId: customerId,
supplierId: supplierObj.supplierId
});
if (friendRequest && friendRequest.status === "accepted") {
connected_suppliers.push(responseData);
} else {
non_connected_suppliers.push(responseData);
}
}
reply.send({
status_code: 200,
connected_suppliers,
non_connected_suppliers
}); });
reply.send({ status_code: 200, data, count: data.length });
} catch (err) { } catch (err) {
throw boom.boomify(err); console.error(err);
reply.send({
status_code: 500,
message: "Something went wrong",
error: err.message
});
} }
}; };
// Get single user by ID // Get single user by ID
exports.getSingleSupplier = async (req, reply) => { exports.getSingleSupplier = async (req, reply) => {
try { try {

@ -8,7 +8,7 @@ const { profilePictureSupplier } = require("../models/supplier");
module.exports = function (fastify, opts, next) { module.exports = function (fastify, opts, next) {
fastify.get("/api/suppliers/:customerId", { fastify.post("/api/suppliersforbooking/:customerId", {
schema: { schema: {
tags: ["Supplier-Data"], tags: ["Supplier-Data"],
description: "This is for Get All Suppliers", description: "This is for Get All Suppliers",
@ -22,6 +22,16 @@ module.exports = function (fastify, opts, next) {
}, },
}, },
}, },
body: {
type: "object",
properties: {
type_of_water: { type: "string" },
capacity: { type: "string" },
quantity: { type: "string" },
date: { type: "string" },
},
},
security: [ security: [
{ {

Loading…
Cancel
Save