import { FastifyInstance } from "fastify"; import { bulkImportHandler, createPermitHandler, deletePermitHandler, getPermitHandler, listPermitsHandler, searchPermitByAddressHandler, searchPermitHandler, updatePermitHandler, } from "./permit.controller"; import { $permit } from "./permit.schema"; import { hideFields } from "../auth"; import { noteRoutes } from "../note/note.route"; import { getUniqueFields } from "../unique"; export async function permitRoutes(fastify: FastifyInstance) { fastify.post( "/", { schema: { body: $permit("createPermitInput"), }, config: { requiredClaims: ["permit:write"] }, preHandler: [fastify.authorize], }, createPermitHandler ); fastify.get( "/:permitId", { schema: { params: { type: "object", properties: { permitId: { type: "string" }, }, }, }, config: { requiredClaims: ["permit:read"] }, preHandler: [fastify.authorize], }, getPermitHandler ); fastify.get( "/", { schema: { querystring: $permit("pageQueryParams"), }, config: { requiredClaims: ["permit:read"] }, preHandler: [fastify.authorize], }, listPermitsHandler ); fastify.patch( "/:permitId", { schema: { params: { type: "object", properties: { permitId: { type: "string" } }, }, body: $permit("createPermitInput"), }, }, updatePermitHandler ); fastify.delete( "/:permitId", { schema: { params: { type: "object", properties: { permitId: { type: "string" } }, }, }, config: { requiredClaims: ["permit:delete"] }, preHandler: [fastify.authorize], }, deletePermitHandler ); fastify.get( "/search", { schema: { querystring: $permit("pageQueryParams"), }, config: { requiredClaims: ["permit:read"] }, preHandler: [fastify.authorize], }, searchPermitHandler ); fastify.post( "/searchByAddress", { schema: { body: { type: "object", properties: { address: { type: "string" } }, }, }, config: { requiredClaims: ["permit:read"] }, preHandler: [fastify.authorize], }, searchPermitByAddressHandler ); fastify.get( "/fields/:field", { schema: { params: { type: "object", properties: { field: { type: "string" } }, }, }, config: { requiredClaims: ["permit:read"] }, preHandler: [fastify.authorize], }, async (req, res) => { const { field } = req.params as { field: string }; try { const uniqueValues = await getUniqueFields(field, "permits", req.user); return res.code(200).send(uniqueValues); } catch (err) { return err; } } ); fastify.post( "/bulkImport", { config: { requiredClaims: ["permit:write"] }, preHandler: [fastify.authorize], }, bulkImportHandler ); await noteRoutes(fastify); fastify.addHook("onSend", hideFields("permits")); }