first build commit

This commit is contained in:
2026-04-19 00:44:43 -04:00
parent bc271b7ce1
commit 55debd082b
82 changed files with 6217 additions and 97 deletions

View File

@@ -0,0 +1,47 @@
import { auth } from '@/lib/auth'
import { prisma } from '@/lib/prisma'
import { BudgetList } from '@/components/budgets/BudgetList'
export default async function BudgetsPage() {
const session = await auth()
if (!session?.user?.id) return null
const now = new Date()
const monthStart = new Date(now.getFullYear(), now.getMonth(), 1)
const monthEnd = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59, 999)
const [budgets, spendRows] = await Promise.all([
prisma.budget.findMany({
where: { userId: session.user.id },
orderBy: { createdAt: 'asc' },
}),
prisma.$queryRaw<{ budgetId: string; total: bigint }[]>`
SELECT t."budgetId", COALESCE(SUM(t."amountCents"), 0)::bigint AS total
FROM "Transaction" t
JOIN "Account" a ON t."accountId" = a.id
WHERE a."userId" = ${session.user.id}
AND t."budgetId" IS NOT NULL
AND t.type = 'DEBIT'
AND t.date >= ${monthStart}
AND t.date <= ${monthEnd}
GROUP BY t."budgetId"
`,
])
const spendMap = new Map(spendRows.map((r) => [r.budgetId, Number(r.total)]))
const budgetsWithSpend = budgets.map((b) => ({
id: b.id,
name: b.name,
limitCents: b.limitCents,
color: b.color,
isActive: b.isActive,
spendCents: spendMap.get(b.id) ?? 0,
}))
return (
<div className="p-6">
<BudgetList budgets={budgetsWithSpend} />
</div>
)
}