From 9d6bd673835541731d42f184aa3a274acc3739f6 Mon Sep 17 00:00:00 2001 From: Akhil Meka Date: Thu, 13 Mar 2025 14:47:25 +0530 Subject: [PATCH] unique values route for processed permits --- src/processed/processed.route.ts | 34 +++++++++++++++++++++++++++++- src/processed/processed.service.ts | 28 ++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/processed/processed.route.ts b/src/processed/processed.route.ts index 10c6968..ced04bc 100644 --- a/src/processed/processed.route.ts +++ b/src/processed/processed.route.ts @@ -1,6 +1,9 @@ import { FastifyInstance, FastifyReply, FastifyRequest } from "fastify"; import { PageQueryParams } from "../pagination"; -import { listProcessedPermits } from "./processed.service"; +import { + getUniqueValuesProcessed, + listProcessedPermits, +} from "./processed.service"; import { $processed } from "./processed.schema"; export async function processedRoutes(fastify: FastifyInstance) { @@ -24,4 +27,33 @@ export async function processedRoutes(fastify: FastifyInstance) { } } ); + + fastify.get( + "/fields/:field", + { + schema: { + params: { + type: "object", + properties: { + field: { type: "string" }, + }, + }, + }, + config: { requiredClaims: ["permit:read"] }, + preHandler: [fastify.authorize], + }, + async (req: FastifyRequest, res: FastifyReply) => { + const { field } = req.params as { field: string }; + + try { + const uniqueValues = await getUniqueValuesProcessed( + field, + req.user.tenantId + ); + return res.code(200).send(uniqueValues); + } catch (err) { + return err; + } + } + ); } diff --git a/src/processed/processed.service.ts b/src/processed/processed.service.ts index 91034c4..3477efc 100644 --- a/src/processed/processed.service.ts +++ b/src/processed/processed.service.ts @@ -1,4 +1,6 @@ +import { orgModel } from "../organization/organization.schema"; import { getFilterObject, getSortObject, PageQueryParams } from "../pagination"; +import { userModel } from "../user/user.schema"; import { processedFields, processedModel } from "./processed.schema"; export async function listProcessedPermits( @@ -114,3 +116,29 @@ export async function listProcessedPermits( }, }; } + +export async function getUniqueValuesProcessed( + field: string, + tenenatId: string +) { + let values = await processedModel.distinct(field, { tenantId: tenenatId }); + + let matchedValues = []; + if (field === "county.name") { + matchedValues = await orgModel.find().where("name").in(values).exec(); + } else if (field === "client") { + matchedValues = await orgModel.find().where("_id").in(values).exec(); + } else if (field === "assignedTo") { + matchedValues = await userModel.find().where("name").in(values).exec(); + } + + if (matchedValues.length > 0) { + const newValues = {}; + for (const item of matchedValues) { + newValues[item.id] = item.name; + } + return newValues; + } + + return values; +}