From 2ca69b04929cdb2094e7ce24f477e6145d6e03d4 Mon Sep 17 00:00:00 2001 From: Bhaskar Date: Fri, 21 Mar 2025 15:07:41 +0530 Subject: [PATCH 1/2] chnages --- src/controllers/departmentController.js | 33 +++++++++++++++---------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/controllers/departmentController.js b/src/controllers/departmentController.js index 0e38bcf2..f8b7eb0f 100644 --- a/src/controllers/departmentController.js +++ b/src/controllers/departmentController.js @@ -60,7 +60,6 @@ const generateDepartmentId = async (city, departmentName) => { return `AW${cityPrefix}${departmentPrefix}${result.seq}`; // Generate ID }; - exports.addCity = async (request, reply) => { try { const { @@ -79,19 +78,27 @@ const generateDepartmentId = async (city, departmentName) => { email } = request.body; - // Generate departmentId based on departmentName - // const prefix = departmentName.substring(0, 2).toUpperCase(); // Extract first two letters and convert to uppercase - const c_id = await generateCityId(); - const cityId = `AWCI${c_id}`; - + // Generate unique cityId + const c_id = await generateCityId(); + const cityId = `AWCI${c_id}`; - // Check for existing department - const existingStore = await City.findOne({ cityId }); - if (existingStore) { - return reply.status(400).send({ message: 'City is already registered' }); + // Check for existing records with specific fields + const existingPhone = await City.findOne({ phone }); + if (existingPhone) { + return reply.status(400).send({ message: 'Phone number already exists' }); } - // Create new department + const existingOfficeName = await City.findOne({ officeName }); + if (existingOfficeName) { + return reply.status(400).send({ message: 'Office name already exists' }); + } + + const existingCityId = await City.findOne({ cityId }); + if (existingCityId) { + return reply.status(400).send({ message: 'City ID already exists' }); + } + + // Create new city record const citys = new City({ cityId, phone, @@ -105,18 +112,18 @@ const generateDepartmentId = async (city, departmentName) => { country, pincode, email, - // departmentName, createdBy, updatedBy, }); await citys.save(); - reply.send({ citys, message: 'Account Created Successfully' }); + reply.send({ citys, message: 'City Created Successfully' }); } catch (err) { reply.status(500).send({ message: err.message }); } }; + exports.addBranch = async (request, reply) => { try { From a13a147ca85463dcc340a318820d017a34c577cc Mon Sep 17 00:00:00 2001 From: Bhaskar Date: Fri, 21 Mar 2025 15:16:53 +0530 Subject: [PATCH 2/2] comany name and city based zones --- src/controllers/departmentController.js | 63 +++++++++++++++++++++++++ src/routes/departmentRoute.js | 14 +++--- 2 files changed, 71 insertions(+), 6 deletions(-) diff --git a/src/controllers/departmentController.js b/src/controllers/departmentController.js index f8b7eb0f..6e7a56d0 100644 --- a/src/controllers/departmentController.js +++ b/src/controllers/departmentController.js @@ -992,6 +992,69 @@ exports.getZonebasedLocations = async (req, reply) => { } }; + const getZonesByCityAndOffice = async (city, officeName) => { + try { + const result = await Zone.aggregate([ + { + $project: { + city: { $trim: { input: "$city" } }, // Trim city field + officeName: { $trim: { input: "$officeName" } }, // Trim officeName field + zone: 1 // Keep zone field + } + }, + { + $match: { + city: { $regex: `^${city.trim()}$`, $options: "i" }, // Case-insensitive match for city + officeName: { $regex: `^${officeName.trim()}$`, $options: "i" } // Case-insensitive match for officeName + } + }, + { + $group: { + _id: { city: { $toUpper: "$city" }, officeName: { $toUpper: "$officeName" } }, // Normalize city and officeName + zones: { $addToSet: "$zone" } // Collect unique zones + } + }, + { + $project: { + _id: 0, // Exclude _id + city: "$_id.city", // Return city name + officeName: "$_id.officeName", // Return officeName + zones: 1 // Return collected zones + } + } + ]); + + // Add "ALL" to the zones array and sort it + result.forEach(item => { + item.zones = ["ALL", ...new Set(item.zones)].sort((a, b) => (a === "ALL" ? -1 : a - b)); + }); + + return result; + } catch (err) { + console.error("Error fetching zones:", err); + throw new Error("Error fetching zones."); + } + }; + + exports.getZonesByCityAndOffice = async (req, reply) => { + try { + const { city, officeName } = req.params; + + if (!city || city.trim() === "" || !officeName || officeName.trim() === "") { + return reply.status(400).send({ message: "City and officeName are required." }); + } + + const zones = await getZonesByCityAndOffice(city.trim(), officeName.trim()); // Trim inputs + + if (zones.length === 0) { + return reply.status(404).send({ message: "No zones found for the specified city and officeName." }); + } + + reply.send({ status_code: 200, data: zones }); + } catch (err) { + reply.status(500).send({ message: err.message }); + } + }; diff --git a/src/routes/departmentRoute.js b/src/routes/departmentRoute.js index 49082a0a..9753a1af 100644 --- a/src/routes/departmentRoute.js +++ b/src/routes/departmentRoute.js @@ -430,21 +430,23 @@ module.exports = function (fastify, opts, next) { fastify.route({ method: "GET", - url: "/api/zonebasedcity/:city", + url: "/api/zonebasedcity/:city/:officeName", schema: { tags: ["Department"], - description: "Get the zones by city", - summary: "Get the zones by city", + description: "Get the zones by city and office name", + summary: "Get the zones by city and office name", params: { type: "object", properties: { - city: { type: "string" }, + city: { type: "string" }, + officeName: { type: "string" }, }, + required: ["city", "officeName"] }, }, - handler:departmentController.getZonesByCity + handler: departmentController.getZonesByCityAndOffice }); - + fastify.route({ method: "GET", url: "/api/departmentNamebaselist/:officeName/:city/:departmentName",