From b3260759e1db6db6a0cc79133529a746b28e15a2 Mon Sep 17 00:00:00 2001 From: Bhaskar Date: Tue, 2 Sep 2025 14:38:37 +0530 Subject: [PATCH] Get Cities List Office Name Matches --- src/controllers/admincontroller.js | 57 ++++++++++++++++++++++++++++-- src/routes/adminRoute.js | 16 +++++++++ 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/src/controllers/admincontroller.js b/src/controllers/admincontroller.js index 995602ca..5775accc 100644 --- a/src/controllers/admincontroller.js +++ b/src/controllers/admincontroller.js @@ -858,7 +858,7 @@ exports.getAllOfficesByCity = async (req, reply) => { } const cityRegex = new RegExp(city.trim(), "i"); - + // 🔹 Step 1: Find all headOffices in this city const headOffices = await City.find({ city: cityRegex }).lean(); @@ -1796,4 +1796,57 @@ exports.getOfficeDetails = async (req, reply) => { }, }); } - }; \ No newline at end of file + }; + + + +exports.getCompanyCitiesByOffice = async (request, reply) => { + try { + const { officeName } = request.params; + + let cityList = []; + + if (officeName.toUpperCase() === "ALL") { + // 🔹 Get all cities from both schemas + const branchCities = await Branch.distinct("city"); + const headOfficeCities = await City.distinct("city"); + + cityList = [...branchCities, ...headOfficeCities]; + } else { + // 🔹 Case-insensitive regex for officeName + const nameRegex = new RegExp(`^\\s*${officeName.trim()}\\s*$`, "i"); + + const branchCities = await Branch.distinct("city", { + officeName: nameRegex, + }); + const headOfficeCities = await City.distinct("city", { + officeName: nameRegex, + }); + + cityList = [...branchCities, ...headOfficeCities]; + } + + // 🔹 Remove duplicates + filter out empty/null + cityList = [...new Set(cityList.filter((c) => c && c.trim()))]; + + // 🔹 Always add "ALL" as the first option + if (!cityList.includes("ALL")) { + cityList.unshift("ALL"); + } + + return reply.send({ + status_code: 200, + message: + cityList.length > 0 + ? "Cities fetched successfully" + : "No cities found for given officeName", + data: cityList, + }); + } catch (err) { + console.error("❌ Error fetching cities:", err); + return reply.status(500).send({ + status_code: 500, + message: "Internal server error", + }); + } +}; diff --git a/src/routes/adminRoute.js b/src/routes/adminRoute.js index 08e4ffec..184370ea 100644 --- a/src/routes/adminRoute.js +++ b/src/routes/adminRoute.js @@ -404,6 +404,22 @@ fastify.get("/api/getOfficeDetails/:officeName/:city", { handler: adminController.getOfficeDetails }); +fastify.get("/api/getCompanyCitiesList/:officeName", { + schema: { + tags: ["Admin"], + description: "Get Cities List Office Name Matches", + summary: "Get Cities List Office Name Matches", + params: { + type: "object", + properties: { + officeName: { type: "string" }, + + }, + required: ["officeName"] + }, + }, + handler: adminController.getCompanyCitiesByOffice +}); next(); };