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