import { NextResponse } from "next/server" import { desc, eq } from "drizzle-orm" import { db } from "@/lib/db" import { inspections } from "@/lib/db/schema" import { getSessionUser } from "@/lib/session" import { inspectionSchema } from "@/lib/validations" import { ownsProperty, ownsUnit } from "@/lib/db/ownership" const DEFAULT_ITEMS = [ "Walls & Ceilings", "Floors", "Windows & Blinds", "Doors & Locks", "Kitchen Appliances", "Bathroom Fixtures", "Plumbing", "Electrical Outlets", "HVAC / Heating", "Smoke Detectors", "Cleanliness", "Keys Returned", ] export async function GET() { const user = await getSessionUser() if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 }) try { const data = await db.query.inspections.findMany({ where: eq(inspections.user_id, user.id), with: { property: { columns: { name: true } }, unit: { columns: { unit_number: true } }, }, orderBy: desc(inspections.created_at), }) return NextResponse.json(data) } catch (e) { return NextResponse.json({ error: (e as Error).message }, { status: 500 }) } } export async function POST(request: Request) { const user = await getSessionUser() if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 }) const body = await request.json() const parsed = inspectionSchema.safeParse(body) if (!parsed.success) { return NextResponse.json({ error: parsed.error.issues[0]?.message ?? "Invalid input" }, { status: 400 }) } if ( !(await ownsProperty(user.id, parsed.data.property_id)) || !(await ownsUnit(user.id, parsed.data.unit_id)) ) { return NextResponse.json({ error: "Invalid reference" }, { status: 403 }) } const items = DEFAULT_ITEMS.map(label => ({ label, condition: "good", notes: "" })) try { const [data] = await db .insert(inspections) .values({ user_id: user.id, property_id: parsed.data.property_id, unit_id: parsed.data.unit_id || null, type: parsed.data.type, date: parsed.data.date, items, notes: parsed.data.notes || null, status: "draft", }) .returning() return NextResponse.json(data) } catch (e) { return NextResponse.json({ error: (e as Error).message }, { status: 500 }) } }