Files
permit-api/src/permit/permit.route.ts

155 lines
3.1 KiB
TypeScript

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"));
}