added new fields to permit model, removed changes endpoints

This commit is contained in:
2025-05-23 14:43:18 +05:30
parent 564bfc061e
commit b51e36ebad
4 changed files with 24 additions and 72 deletions

View File

@@ -3,7 +3,6 @@ import { CreatePermitInput, UpdatePermitInput } from "./permit.schema";
import { import {
createPermit, createPermit,
deletePermit, deletePermit,
getchanges,
getPermit, getPermit,
listPermits, listPermits,
searchPermit, searchPermit,
@@ -103,17 +102,3 @@ export async function searchPermitHandler(
return err; 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;
}
}

View File

@@ -1,7 +1,6 @@
import { FastifyInstance } from "fastify"; import { FastifyInstance } from "fastify";
import { import {
deletePermitHandler, deletePermitHandler,
getPermitChangesHandler,
getPermitHandler, getPermitHandler,
listPermitsHandler, listPermitsHandler,
searchPermitHandler, searchPermitHandler,
@@ -121,21 +120,6 @@ 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); await noteRoutes(fastify);
fastify.addHook("onSend", hideFields("permits")); fastify.addHook("onSend", hideFields("permits"));

View File

@@ -1,4 +1,4 @@
import { z } from "zod"; import { string, z } from "zod";
import mongoose from "mongoose"; import mongoose from "mongoose";
import { buildJsonSchemas } from "fastify-zod"; import { buildJsonSchemas } from "fastify-zod";
import { pageMetadata, pageQueryParams } from "../pagination"; import { pageMetadata, pageQueryParams } from "../pagination";
@@ -65,6 +65,10 @@ const permitSchema = new mongoose.Schema({
lastUpdateDate: Date, lastUpdateDate: Date,
statusUpdated: Date, statusUpdated: Date,
issuedDate: Date, issuedDate: Date,
communityName: String,
lot: String,
jobNumber: String,
startDate: Date,
}).index({ tenantId: 1, permitNumber: 1 }, { unique: true }); }).index({ tenantId: 1, permitNumber: 1 }, { unique: true });
export const permitFields = Object.keys(permitSchema.paths).filter( export const permitFields = Object.keys(permitSchema.paths).filter(
@@ -151,26 +155,15 @@ const updatePermitInput = z.object({
.optional(), .optional(),
assignedTo: z.string().optional(), assignedTo: z.string().optional(),
newPayment: z.array(z.any()).optional(), newPayment: z.array(z.any()).optional(),
communityName: z.string().optional(),
lot: z.string().optional(),
jobNumber: z.string().optional(),
startDate: z.date().optional(),
}); });
export type CreatePermitInput = z.infer<typeof createPermitInput>; export type CreatePermitInput = z.infer<typeof createPermitInput>;
export type UpdatePermitInput = z.infer<typeof updatePermitInput>; export type UpdatePermitInput = z.infer<typeof updatePermitInput>;
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( export const { schemas: permitSchemas, $ref: $permit } = buildJsonSchemas(
{ {
createPermitInput, createPermitInput,

View File

@@ -1,9 +1,6 @@
import { orgModel } from "../organization/organization.schema";
import { getFilterObject, getSortObject, PageQueryParams } from "../pagination"; import { getFilterObject, getSortObject, PageQueryParams } from "../pagination";
import { userModel } from "../user/user.schema";
import { generateId } from "../utils/id"; import { generateId } from "../utils/id";
import { import {
changesModel,
CreatePermitInput, CreatePermitInput,
permitFields, permitFields,
permitModel, permitModel,
@@ -13,6 +10,7 @@ import { ChangeEvent, dbEvents } from "../realtime";
import { permitPipeline } from "../utils/pipeline"; import { permitPipeline } from "../utils/pipeline";
import { AuthenticatedUser } from "../auth"; import { AuthenticatedUser } from "../auth";
import mongoose from "mongoose"; import mongoose from "mongoose";
import { noteModel } from "../note/note.schema";
export async function createPermit( export async function createPermit(
input: CreatePermitInput, input: CreatePermitInput,
@@ -121,6 +119,10 @@ export async function listPermits(
lastUpdateDate: 1, lastUpdateDate: 1,
statusUpdated: 1, statusUpdated: 1,
issuedDate: 1, issuedDate: 1,
communityName: 1,
lot: 1,
jobNumber: 1,
startDate: 1,
assignedTo: { assignedTo: {
$let: { $let: {
vars: { assigned: { $arrayElemAt: ["$assignedRec", 0] } }, vars: { assigned: { $arrayElemAt: ["$assignedRec", 0] } },
@@ -180,13 +182,13 @@ export async function updatePermit(
if (updatePermitResult) { if (updatePermitResult) {
for (const key in input) { for (const key in input) {
if (["manualStatus", "utility"].includes(key)) { if (["manualStatus", "utility"].includes(key)) {
await changesModel.create({ await noteModel.create({
tenantId: user.tenantId, tenantId: user.tenantId,
permitId: permitId, pid: generateId(),
field: key, resourceId: permitId,
value: input[key], content: `Updated ${key} to '${input[key]}'`,
updatedBy: user.userId, createdAt: new Date(),
updatedAt: new Date(), createdBy: user.userId,
}); });
} }
} }
@@ -303,6 +305,10 @@ export async function searchPermit(
lastUpdateDate: 1, lastUpdateDate: 1,
statusUpdated: 1, statusUpdated: 1,
issuedDate: 1, issuedDate: 1,
communityName: 1,
lot: 1,
jobNumber: 1,
startDate: 1,
assignedTo: { assignedTo: {
$let: { $let: {
vars: { assigned: { $arrayElemAt: ["$assignedRec", 0] } }, vars: { assigned: { $arrayElemAt: ["$assignedRec", 0] } },
@@ -340,19 +346,3 @@ 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" });
}