import { NextResponse } from "next/server" import { and, eq } from "drizzle-orm" import { db } from "@/lib/db" import { vendors } from "@/lib/db/schema" import { getSessionUser } from "@/lib/session" import { ownsProperty } from "@/lib/db/ownership" import { getAccountContext } from "@/lib/account" export async function PATCH(request: Request, { params }: { params: Promise<{ id: string }> }) { const user = await getSessionUser() if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 }) const ctx = await getAccountContext(user.id) const ownerId = ctx.ownerId if (!ctx.canWrite) return NextResponse.json({ error: "Forbidden" }, { status: 403 }) const { id } = await params const body = await request.json() const allowed: Partial = {} if (body.name !== undefined) allowed.name = body.name if (body.trade !== undefined) allowed.trade = body.trade || null if (body.phone !== undefined) allowed.phone = body.phone || null if (body.email !== undefined) allowed.email = body.email || null if (body.notes !== undefined) allowed.notes = body.notes || null if (body.property_id !== undefined) allowed.property_id = body.property_id || null if (!(await ownsProperty(ownerId, allowed.property_id))) { return NextResponse.json({ error: "Invalid reference" }, { status: 403 }) } try { const [data] = await db .update(vendors) .set(allowed) .where(and(eq(vendors.id, id), eq(vendors.user_id, ownerId))) .returning() return NextResponse.json(data) } catch (e) { return NextResponse.json({ error: (e as Error).message }, { status: 500 }) } } export async function DELETE(_: Request, { params }: { params: Promise<{ id: string }> }) { const user = await getSessionUser() if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 }) const ctx = await getAccountContext(user.id) const ownerId = ctx.ownerId if (!ctx.canWrite) return NextResponse.json({ error: "Forbidden" }, { status: 403 }) const { id } = await params await db.delete(vendors).where(and(eq(vendors.id, id), eq(vendors.user_id, ownerId))) return NextResponse.json({ ok: true }) }