// routes/api/update/lease_invite.ts import { define } from "../../../utils.ts"; import { getLeaseById } from "../../../services/leaseService.ts"; import { createTenantInvite } from "../../../services/tenantInviteService.ts"; import { SessionCookie } from "../../auth/callback.ts"; export const handler = define.handlers({ async POST(ctx) { try { const stateData: SessionCookie = ctx.state.data; const { user_id } = stateData || {}; if (!user_id) { return new Response(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "Content-Type": "application/json" }, }); } const contentType = ctx.req.headers.get("content-type") || ""; let data: Record = {}; if (contentType.includes("application/json")) { data = await ctx.req.json(); } else { const form = await ctx.req.formData(); for (const [k, v] of form.entries()) { data[k] = typeof v === "string" ? v : String(v); } } const lease_id = (data.lease_id as string) || (data["lease_id"] as string); if (!lease_id) { return new Response(JSON.stringify({ error: "lease_id is required" }), { status: 400, headers: { "Content-Type": "application/json" }, }); } const lease = await getLeaseById(lease_id); if (!lease) { return new Response(JSON.stringify({ error: "lease not found" }), { status: 404, headers: { "Content-Type": "application/json" }, }); } const property_id = lease.property_id as string | undefined; if (!property_id) { return new Response(JSON.stringify({ error: "lease has no property_id" }), { status: 400, headers: { "Content-Type": "application/json" }, }); } const invite = await createTenantInvite(user_id as string, property_id); return new Response(JSON.stringify({ success: true, invite }), { status: 200, headers: { "Content-Type": "application/json" }, }); } catch (err) { return new Response(JSON.stringify({ error: String(err) }), { status: 500, headers: { "Content-Type": "application/json" }, }); } }, });