import { requireUser } from "@/lib/auth"; import { createDocument, databaseConfig, listDocuments, query, updateDocument, } from "@/lib/database/server"; import { syncBillLedger } from "@/lib/finance/ledger"; import { parseBillInput } from "@/lib/validation/bills"; import { nowFields, parseBody } from "@/lib/validation/common"; import type { Bill } from "@/types/finance"; export async function GET() { const auth = await requireUser(); if ("response" in auth) return auth.response; const { collections } = databaseConfig(); const result = await listDocuments(collections.bills, [ query.equal("userId", auth.user.id), query.orderAsc("dueDate"), query.limit(5000), ]); return Response.json(result.documents); } export async function POST(request: Request) { const auth = await requireUser(); if ("response" in auth) return auth.response; const parsed = await parseBody(request, parseBillInput); if (!parsed.ok) return Response.json({ error: parsed.error }, { status: 400 }); const { collections } = databaseConfig(); let bill = await createDocument(collections.bills, { ...parsed.data, userId: auth.user.id, ...nowFields(), }); const ledger = await syncBillLedger(bill); if (ledger && bill.linkedPaymentId !== ledger.$id) { bill = await updateDocument(collections.bills, bill.$id, { linkedPaymentId: ledger.$id, updatedAt: new Date().toISOString(), }); } return Response.json(bill, { status: 201 }); }