139 lines
3.2 KiB
TypeScript
139 lines
3.2 KiB
TypeScript
import { FastifyReply, FastifyRequest } from "fastify";
|
|
import { CreatePermitInput, UpdatePermitInput } from "./permit.schema";
|
|
import {
|
|
bulkImport,
|
|
createPermit,
|
|
deletePermit,
|
|
getPermit,
|
|
listPermits,
|
|
searchPermit,
|
|
searchPermitByAddress,
|
|
updatePermit,
|
|
} from "./permit.service";
|
|
import { PageQueryParams } from "../pagination";
|
|
import { csv2json } from "json-2-csv";
|
|
|
|
export async function createPermitHandler(
|
|
req: FastifyRequest,
|
|
res: FastifyReply
|
|
) {
|
|
const input = req.body as CreatePermitInput;
|
|
|
|
try {
|
|
const permit = await createPermit(input, req.user);
|
|
return res.code(201).send(permit);
|
|
} catch (err) {
|
|
return err;
|
|
}
|
|
}
|
|
|
|
export async function getPermitHandler(req: FastifyRequest, res: FastifyReply) {
|
|
const { permitId } = req.params as { permitId: string };
|
|
|
|
try {
|
|
const permit = await getPermit(permitId, req.user);
|
|
if (permit === null)
|
|
return res.code(404).send({ error: "resource not found" });
|
|
|
|
return res.code(200).send(permit);
|
|
} catch (err) {
|
|
return err;
|
|
}
|
|
}
|
|
|
|
export async function listPermitsHandler(
|
|
req: FastifyRequest,
|
|
res: FastifyReply
|
|
) {
|
|
const queryParams = req.query as PageQueryParams;
|
|
|
|
try {
|
|
const authUser = req.user;
|
|
const orgList = await listPermits(queryParams, authUser);
|
|
return res.code(200).send(orgList);
|
|
} catch (err) {
|
|
return err;
|
|
}
|
|
}
|
|
|
|
export async function updatePermitHandler(
|
|
req: FastifyRequest,
|
|
res: FastifyReply
|
|
) {
|
|
const input = req.body as CreatePermitInput;
|
|
const { permitId } = req.params as { permitId: string };
|
|
|
|
try {
|
|
const updatedPermit = await updatePermit(input, permitId, req.user);
|
|
if (!updatedPermit)
|
|
return res.code(404).send({ error: "resource not found" });
|
|
|
|
return res.code(200).send(updatedPermit);
|
|
} catch (err) {
|
|
return err;
|
|
}
|
|
}
|
|
|
|
export async function deletePermitHandler(
|
|
req: FastifyRequest,
|
|
res: FastifyReply
|
|
) {
|
|
const { permitId } = req.params as { permitId: string };
|
|
|
|
try {
|
|
const deleteResult = await deletePermit(permitId, req.user.tenantId);
|
|
if (deleteResult.deletedCount === 0)
|
|
return res.code(404).send({ error: "resource not found" });
|
|
|
|
return res.code(204).send();
|
|
} catch (err) {
|
|
return err;
|
|
}
|
|
}
|
|
|
|
export async function searchPermitHandler(
|
|
req: FastifyRequest,
|
|
res: FastifyReply
|
|
) {
|
|
const queryParams = req.query as PageQueryParams;
|
|
|
|
try {
|
|
const authUser = req.user;
|
|
const permitList = await searchPermit(queryParams, authUser);
|
|
return res.code(200).send(permitList);
|
|
} catch (err) {
|
|
return err;
|
|
}
|
|
}
|
|
|
|
export async function searchPermitByAddressHandler(
|
|
req: FastifyRequest,
|
|
res: FastifyReply
|
|
) {
|
|
const { address } = req.body as { address: string };
|
|
|
|
try {
|
|
const permitList = await searchPermitByAddress(address);
|
|
return res.code(200).send(permitList);
|
|
} catch (err) {
|
|
return err;
|
|
}
|
|
}
|
|
|
|
export async function bulkImportHandler(
|
|
req: FastifyRequest,
|
|
res: FastifyReply
|
|
) {
|
|
try {
|
|
const data = await req.file();
|
|
const csvString = (await data.toBuffer()).toString("utf-8");
|
|
|
|
const parsedCSV = csv2json(csvString, { delimiter: { eol: "\r\n" } });
|
|
const result = await bulkImport(parsedCSV, req.user);
|
|
|
|
return res.code(200).send(result);
|
|
} catch (err) {
|
|
return err;
|
|
}
|
|
}
|