From 564bfc061e9955c072b4081db578f51605cde132 Mon Sep 17 00:00:00 2001 From: Akhil Meka Date: Fri, 23 May 2025 10:06:37 +0530 Subject: [PATCH] created changes endpoint --- src/permit/permit.controller.ts | 15 +++++++++++++++ src/permit/permit.route.ts | 16 ++++++++++++++++ src/permit/permit.schema.ts | 15 +++++++++++++++ src/permit/permit.service.ts | 30 ++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+) diff --git a/src/permit/permit.controller.ts b/src/permit/permit.controller.ts index a1cd75f..caa3ff2 100644 --- a/src/permit/permit.controller.ts +++ b/src/permit/permit.controller.ts @@ -3,6 +3,7 @@ import { CreatePermitInput, UpdatePermitInput } from "./permit.schema"; import { createPermit, deletePermit, + getchanges, getPermit, listPermits, searchPermit, @@ -102,3 +103,17 @@ export async function searchPermitHandler( return err; } } + +export async function getPermitChangesHandler( + req: FastifyRequest, + res: FastifyReply +) { + const { permitId } = req.params as { permitId: string }; + + try { + const changes = await getchanges(permitId, req.user); + return res.code(200).send(changes); + } catch (err) { + return err; + } +} diff --git a/src/permit/permit.route.ts b/src/permit/permit.route.ts index 05e0886..2124410 100644 --- a/src/permit/permit.route.ts +++ b/src/permit/permit.route.ts @@ -1,6 +1,7 @@ import { FastifyInstance } from "fastify"; import { deletePermitHandler, + getPermitChangesHandler, getPermitHandler, listPermitsHandler, searchPermitHandler, @@ -120,6 +121,21 @@ export async function permitRoutes(fastify: FastifyInstance) { } ); + fastify.get( + "/:permitId/changes", + { + schema: { + params: { + type: "object", + properties: { permitId: { type: "string" } }, + }, + }, + config: { requiredClaims: ["permit:read"] }, + preHandler: [fastify.authorize], + }, + getPermitChangesHandler + ); + await noteRoutes(fastify); fastify.addHook("onSend", hideFields("permits")); diff --git a/src/permit/permit.schema.ts b/src/permit/permit.schema.ts index ffdc74c..0c438d1 100644 --- a/src/permit/permit.schema.ts +++ b/src/permit/permit.schema.ts @@ -156,6 +156,21 @@ const updatePermitInput = z.object({ export type CreatePermitInput = z.infer; export type UpdatePermitInput = z.infer; +export const changesModel = mongoose.model( + "change", + new mongoose.Schema({ + tenantId: String, + permitId: String, + field: String, + value: String, + updatedBy: { + type: mongoose.Types.ObjectId, + ref: "user", + }, + updatedAt: Date, + }) +); + export const { schemas: permitSchemas, $ref: $permit } = buildJsonSchemas( { createPermitInput, diff --git a/src/permit/permit.service.ts b/src/permit/permit.service.ts index ac17942..74fb3ab 100644 --- a/src/permit/permit.service.ts +++ b/src/permit/permit.service.ts @@ -3,6 +3,7 @@ import { getFilterObject, getSortObject, PageQueryParams } from "../pagination"; import { userModel } from "../user/user.schema"; import { generateId } from "../utils/id"; import { + changesModel, CreatePermitInput, permitFields, permitModel, @@ -177,6 +178,19 @@ export async function updatePermit( .populate({ path: "createdBy", select: "pid name avatar" }); if (updatePermitResult) { + for (const key in input) { + if (["manualStatus", "utility"].includes(key)) { + await changesModel.create({ + tenantId: user.tenantId, + permitId: permitId, + field: key, + value: input[key], + updatedBy: user.userId, + updatedAt: new Date(), + }); + } + } + dbEvents.emit( "change", { @@ -326,3 +340,19 @@ export async function searchPermit( }, }; } + +export async function getchanges(permitId: string, user: AuthenticatedUser) { + if (user.role == "client") { + const permit = await permitModel.findOne({ + pid: permitId, + tenantId: user.tenantId, + }); + if (!permit || permit.client.toString() !== user.orgId) return []; + } + + return await changesModel + .find({ + $and: [{ tenantId: user.tenantId }, { permitId: permitId }], + }) + .populate({ path: "updatedBy", select: "_id pid name avatar" }); +}