Add duplicate pattern check when adding budget rules

Client side catches it immediately (case-insensitive match against
existing rules) and shows an inline error. API also rejects with 409
as the authoritative guard.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
jerick
2026-05-25 18:01:45 +00:00
parent 0014db3aea
commit 4a0f036d01
2 changed files with 26 additions and 11 deletions

View File

@@ -29,6 +29,11 @@ export async function POST(req: Request) {
const budget = await prisma.budget.findFirst({ where: { id: budgetId, userId: session.user.id } })
if (!budget) return NextResponse.json({ error: 'Budget not found' }, { status: 404 })
const existing = await prisma.budgetRule.findFirst({
where: { budgetId, pattern: { equals: pattern, mode: 'insensitive' } },
})
if (existing) return NextResponse.json({ error: 'Duplicate rule pattern' }, { status: 409 })
const rule = await prisma.budgetRule.create({
data: { userId: session.user.id, budgetId, pattern },
select: { id: true, budgetId: true, pattern: true },