// routes/tenant/onboarding/index.tsx import { define } from "../../../utils.ts"; import { page } from "fresh"; import type { SessionCookie } from "../../auth/callback.ts"; import { getUserById, updateUser } from "../../../services/userService.ts"; import { getOnboardingStatus, markRoleOnboarded, } from "../../../services/onboardingService.ts"; import { User } from "../../../db/interfaces.ts"; import { createPublicId } from "../../../helpers.ts"; export const handler = define.handlers({ async GET(ctx) { const stateData = ctx.state.data as SessionCookie; const { user_id } = stateData; const publicId = stateData.user_id ? await createPublicId(stateData.user_id) : ""; const status = await getOnboardingStatus(user_id); if (status?.onboarded_tenant) { return new Response("", { status: 303, headers: { Location: "/tenant/dashboard" }, }); } const user = await getUserById(user_id); return page({ stateData, user: user ? { ...user, id: publicId } : null }); }, async POST(ctx) { const stateData = ctx.state.data as SessionCookie; const { user_id } = stateData; const publicId = stateData.user_id ? await createPublicId(stateData.user_id) : ""; const status = await getOnboardingStatus(user_id); if (status?.onboarded_tenant) { return new Response("", { status: 303, headers: { Location: "/tenant/dashboard" }, }); } const formData = await ctx.req.formData(); const name = (formData.get("name") || "").toString().trim(); const email = (formData.get("email") || "").toString().trim(); const phone = (formData.get("phone") || "").toString().trim(); if (!name || !email || !phone) { const user = await getUserById(user_id); return page({ stateData, user: user ? { ...user, id: publicId } : null, error: "Name, email, and phone are required.", }); } await updateUser(user_id, { name, email, phone, user_type: "tenant", onboarded_tenant: true, } as Partial); await markRoleOnboarded(user_id, "tenant"); return new Response(null, { status: 303, headers: { Location: "/tenant/dashboard" }, }); }, }); export default define.page(function TenantOnboarding({ data }) { const { stateData: _stateData, user, error } = data as { stateData: SessionCookie; user: User | null; error?: string; }; return (

Complete Your Tenant Profile

We just need a few details to get you started.

{error && (
{error}
)}
); });