From 4153bd24122d3ac03bc313394702982692f502b5 Mon Sep 17 00:00:00 2001 From: Akhil Meka Date: Fri, 2 May 2025 12:52:57 +0530 Subject: [PATCH] expose cleanStatus field --- src/permit/permit.service.ts | 110 +++++++++++++++-------------- src/processed/processed.schema.ts | 27 +++---- src/processed/processed.service.ts | 57 +++++++-------- 3 files changed, 99 insertions(+), 95 deletions(-) diff --git a/src/permit/permit.service.ts b/src/permit/permit.service.ts index 45d8c1c..9cab538 100644 --- a/src/permit/permit.service.ts +++ b/src/permit/permit.service.ts @@ -1,16 +1,16 @@ -import { orgModel } from "../organization/organization.schema"; -import { getFilterObject, getSortObject, PageQueryParams } from "../pagination"; -import { userModel } from "../user/user.schema"; -import { generateId } from "../utils/id"; +import { orgModel } from '../organization/organization.schema'; +import { getFilterObject, getSortObject, PageQueryParams } from '../pagination'; +import { userModel } from '../user/user.schema'; +import { generateId } from '../utils/id'; import { CreatePermitInput, permitFields, permitModel, UpdatePermitInput, -} from "./permit.schema"; -import { ChangeEvent, dbEvents } from "../realtime"; -import { permitPipeline } from "../utils/pipeline"; -import { AuthenticatedUser } from "../auth"; +} from './permit.schema'; +import { ChangeEvent, dbEvents } from '../realtime'; +import { permitPipeline } from '../utils/pipeline'; +import { AuthenticatedUser } from '../auth'; export async function createPermit( input: CreatePermitInput, @@ -32,13 +32,13 @@ export async function createPermit( }); dbEvents.emit( - "change", + 'change', { - type: "insert", - collection: "permits", + type: 'insert', + collection: 'permits', document: permit, } as ChangeEvent, - ["permit:read"] + ['permit:read'] ); return permit; @@ -51,8 +51,8 @@ export async function getPermit(permitId: string, tenantId: string) { }) //.populate({ path: "county", select: "pid name avatar" }) //.populate({ path: "client", select: "pid name avatar" }) - .populate({ path: "assignedTo", select: "pid name avatar" }) - .populate({ path: "createdBy", select: "pid name avatar" }); + .populate({ path: 'assignedTo', select: 'pid name avatar' }) + .populate({ path: 'createdBy', select: 'pid name avatar' }); } export async function listPermits(params: PageQueryParams, tenantId: string) { @@ -67,10 +67,10 @@ export async function listPermits(params: PageQueryParams, tenantId: string) { }, { $lookup: { - from: "users", - localField: "assignedTo", - foreignField: "_id", - as: "assignedRec", + from: 'users', + localField: 'assignedTo', + foreignField: '_id', + as: 'assignedRec', }, }, { @@ -82,6 +82,7 @@ export async function listPermits(params: PageQueryParams, tenantId: string) { stage: 1, status: 1, manualStatus: 1, + cleanStatus: 1, utility: 1, link: 1, address: 1, @@ -111,12 +112,12 @@ export async function listPermits(params: PageQueryParams, tenantId: string) { statusUpdated: 1, assignedTo: { $let: { - vars: { assigned: { $arrayElemAt: ["$assignedRec", 0] } }, + vars: { assigned: { $arrayElemAt: ['$assignedRec', 0] } }, in: { - _id: "$$assigned._id", - pid: "$$assigned.pid", - name: "$$assigned.name", - avatar: "$$assigned.avatar", + _id: '$$assigned._id', + pid: '$$assigned.pid', + name: '$$assigned.name', + avatar: '$$assigned.avatar', }, }, }, @@ -124,7 +125,7 @@ export async function listPermits(params: PageQueryParams, tenantId: string) { }, { $facet: { - metadata: [{ $count: "count" }], + metadata: [{ $count: 'count' }], data: [ { $sort: sortObj }, { $skip: (page - 1) * pageSize }, @@ -160,20 +161,20 @@ export async function updatePermit( { ...input, lastUpdateDate: new Date() }, { new: true } ) - .populate({ path: "county", select: "pid name avatar" }) - .populate({ path: "client", select: "pid name avatar" }) - .populate({ path: "assignedTo", select: "pid name avatar" }) - .populate({ path: "createdBy", select: "pid name avatar" }); + .populate({ path: 'county', select: 'pid name avatar' }) + .populate({ path: 'client', select: 'pid name avatar' }) + .populate({ path: 'assignedTo', select: 'pid name avatar' }) + .populate({ path: 'createdBy', select: 'pid name avatar' }); if (updatePermitResult) { dbEvents.emit( - "change", + 'change', { - type: "update", - collection: "permits", + type: 'update', + collection: 'permits', document: updatePermitResult, } as ChangeEvent, - ["permit:read"] + ['permit:read'] ); } @@ -186,15 +187,15 @@ export async function deletePermit(permitId: string, tenantId: string) { }); dbEvents.emit( - "change", + 'change', { - type: "delete", - collection: "permits", + type: 'delete', + collection: 'permits', document: { pid: permitId, }, } as ChangeEvent, - ["permit:read"] + ['permit:read'] ); return res; @@ -209,7 +210,7 @@ export async function searchPermit(params: PageQueryParams, tenantId: string) { if (!params.searchToken) return { permits: [], metadata: { count: 0, page, pageSize } }; - const regex = new RegExp(params.searchToken, "i"); + const regex = new RegExp(params.searchToken, 'i'); const permitsList = await permitModel.aggregate([ { @@ -220,16 +221,16 @@ export async function searchPermit(params: PageQueryParams, tenantId: string) { $or: [ { permitNumber: { $regex: regex } }, { link: { $regex: regex } }, - { "address.full_address": { $regex: regex } }, + { 'address.full_address': { $regex: regex } }, ], }, }, { $lookup: { - from: "users", - localField: "assignedTo", - foreignField: "_id", - as: "assignedRec", + from: 'users', + localField: 'assignedTo', + foreignField: '_id', + as: 'assignedRec', }, }, { @@ -241,6 +242,7 @@ export async function searchPermit(params: PageQueryParams, tenantId: string) { stage: 1, status: 1, manualStatus: 1, + cleanStatus: 1, utility: 1, link: 1, address: 1, @@ -270,12 +272,12 @@ export async function searchPermit(params: PageQueryParams, tenantId: string) { statusUpdated: 1, assignedTo: { $let: { - vars: { assigned: { $arrayElemAt: ["$assignedRec", 0] } }, + vars: { assigned: { $arrayElemAt: ['$assignedRec', 0] } }, in: { - _id: "$$assigned._id", - pid: "$$assigned.pid", - name: "$$assigned.name", - avatar: "$$assigned.avatar", + _id: '$$assigned._id', + pid: '$$assigned.pid', + name: '$$assigned.name', + avatar: '$$assigned.avatar', }, }, }, @@ -283,7 +285,7 @@ export async function searchPermit(params: PageQueryParams, tenantId: string) { }, { $facet: { - metadata: [{ $count: "count" }], + metadata: [{ $count: 'count' }], data: [ { $sort: sortObj }, { $skip: (page - 1) * pageSize }, @@ -310,12 +312,12 @@ export async function getUniqueValuesPermit(field: string, tenenatId: string) { let values = await permitModel.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 (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) { diff --git a/src/processed/processed.schema.ts b/src/processed/processed.schema.ts index b676c3f..2d62c69 100644 --- a/src/processed/processed.schema.ts +++ b/src/processed/processed.schema.ts @@ -1,7 +1,7 @@ -import z from "zod"; -import mongoose from "mongoose"; -import { pageQueryParams } from "../pagination"; -import { buildJsonSchemas } from "fastify-zod"; +import z from 'zod'; +import mongoose from 'mongoose'; +import { pageQueryParams } from '../pagination'; +import { buildJsonSchemas } from 'fastify-zod'; const processedSchema = new mongoose.Schema({ tenantId: { @@ -16,7 +16,7 @@ const processedSchema = new mongoose.Schema({ county: Object, client: { type: mongoose.Types.ObjectId, - ref: "organization", + ref: 'organization', }, clientData: Object, permitDate: Date, @@ -29,10 +29,11 @@ const processedSchema = new mongoose.Schema({ ), status: String, manualStatus: String, + cleanStatus: String, utility: String, assignedTo: { type: mongoose.Types.ObjectId, - ref: "user", + ref: 'user', }, link: String, address: Object, @@ -50,7 +51,7 @@ const processedSchema = new mongoose.Schema({ createdAt: Date, createdBy: { type: mongoose.Types.ObjectId, - ref: "user", + ref: 'user', }, newProcessingStatus: Array, newPayment: Array, @@ -66,22 +67,22 @@ const processedSchema = new mongoose.Schema({ }).index({ tenantId: 1, permitNumber: 1 }, { unique: true }); export const processedFields = Object.keys(processedSchema.paths).filter( - (path) => path !== "__v" + (path) => path !== '__v' ); export const processedModel = mongoose.model( - "processed", + 'processed', processedSchema, - "processed" + 'processed' ); const updateProcessedInput = z.object({ manualStatus: z - .enum(["Ready To Issue", "Issued", "Invoiced", "Paid", "Closed"]) + .enum(['Ready To Issue', 'Issued', 'Invoiced', 'Paid', 'Closed']) .nullable() .optional(), utility: z - .enum(["Submitted", "Pending", "Applied", "Rejected", "Paid"]) + .enum(['Submitted', 'Pending', 'Applied', 'Rejected', 'Paid']) .nullable() .optional(), }); @@ -93,5 +94,5 @@ export const { schemas: processedSchemas, $ref: $processed } = buildJsonSchemas( pageQueryParams, updateProcessedInput, }, - { $id: "processed" } + { $id: 'processed' } ); diff --git a/src/processed/processed.service.ts b/src/processed/processed.service.ts index 9121a3e..c2045fd 100644 --- a/src/processed/processed.service.ts +++ b/src/processed/processed.service.ts @@ -1,12 +1,12 @@ -import { AuthenticatedUser } from "../auth"; -import { orgModel } from "../organization/organization.schema"; -import { getFilterObject, getSortObject, PageQueryParams } from "../pagination"; -import { userModel } from "../user/user.schema"; +import { AuthenticatedUser } from '../auth'; +import { orgModel } from '../organization/organization.schema'; +import { getFilterObject, getSortObject, PageQueryParams } from '../pagination'; +import { userModel } from '../user/user.schema'; import { processedFields, processedModel, UpdateProcessedInput, -} from "./processed.schema"; +} from './processed.schema'; export async function getProcessedPermit(permitId: String, tenantId: String) { return await processedModel.findOne({ @@ -27,10 +27,10 @@ export async function updateProcessed( { ...input, lastUpdateDate: new Date() }, { new: true } ) - .populate({ path: "county", select: "pid name avatar" }) - .populate({ path: "client", select: "pid name avatar" }) - .populate({ path: "assignedTo", select: "pid name avatar" }) - .populate({ path: "createdBy", select: "pid name avatar" }); + .populate({ path: 'county', select: 'pid name avatar' }) + .populate({ path: 'client', select: 'pid name avatar' }) + .populate({ path: 'assignedTo', select: 'pid name avatar' }) + .populate({ path: 'createdBy', select: 'pid name avatar' }); } export async function listProcessedPermits( @@ -48,14 +48,14 @@ export async function listProcessedPermits( }, ]; - if (params.searchToken && params.searchToken != "") { - const regex = new RegExp(params.searchToken, "i"); + if (params.searchToken && params.searchToken != '') { + const regex = new RegExp(params.searchToken, 'i'); pipeline.push({ $match: { $or: [ { permitNumber: { $regex: regex } }, { link: { $regex: regex } }, - { "address.full_address": { $regex: regex } }, + { 'address.full_address': { $regex: regex } }, ], }, }); @@ -65,10 +65,10 @@ export async function listProcessedPermits( ...[ { $lookup: { - from: "users", - localField: "assignedTo", - foreignField: "_id", - as: "assignedRec", + from: 'users', + localField: 'assignedTo', + foreignField: '_id', + as: 'assignedRec', }, }, { @@ -80,6 +80,7 @@ export async function listProcessedPermits( stage: 1, status: 1, manualStatus: 1, + cleanStatus: 1, utility: 1, link: 1, address: 1, @@ -110,12 +111,12 @@ export async function listProcessedPermits( transferDate: 1, assignedTo: { $let: { - vars: { assigned: { $arrayElemAt: ["$assignedRec", 0] } }, + vars: { assigned: { $arrayElemAt: ['$assignedRec', 0] } }, in: { - _id: "$$assigned._id", - pid: "$$assigned.pid", - name: "$$assigned.name", - avatar: "$$assigned.avatar", + _id: '$$assigned._id', + pid: '$$assigned.pid', + name: '$$assigned.name', + avatar: '$$assigned.avatar', }, }, }, @@ -123,7 +124,7 @@ export async function listProcessedPermits( }, { $facet: { - metadata: [{ $count: "count" }], + metadata: [{ $count: 'count' }], data: [ { $sort: sortObj }, { $skip: (page - 1) * pageSize }, @@ -156,12 +157,12 @@ export async function getUniqueValuesProcessed( 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 (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) {