Changeset 057453c for src/app/api/invoices/route.ts
- Timestamp:
- 02/26/25 10:05:32 (5 weeks ago)
- Branches:
- main
- Children:
- 299af01
- Parents:
- 5d6f37a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/app/api/invoices/route.ts
r5d6f37a r057453c 1 1 import { NextRequest, NextResponse } from 'next/server'; 2 import { invoiceSchema, invoiceTableFiltersSchema } from 'mvpmasters-shared';2 import { createInvoiceSchema, invoiceSchema, invoiceTableFiltersSchema } from 'src/schemas'; 3 3 import prisma from 'src/lib/prisma'; 4 4 import { auth } from 'src/lib/firebase-admin'; 5 import { InvoiceStatus } from '@prisma/client'; 5 6 6 7 // Helper function to get userId from Authorization header … … 41 42 const invoices = await prisma.invoice.findMany({ 42 43 where: { 43 userId, 44 status: validatedFilters.status ? { equals: validatedFilters.status } : undefined, 44 status: validatedFilters.status 45 ? { equals: validatedFilters.status as InvoiceStatus } 46 : undefined, 45 47 createDate: { 46 gte: validatedFilters.startDate,47 lte: validatedFilters.endDate,48 ...(validatedFilters.startDate && { gte: validatedFilters.startDate }), 49 ...(validatedFilters.endDate && { lte: validatedFilters.endDate }), 48 50 }, 49 51 items: … … 77 79 78 80 const body = await request.json(); 79 const validatedData = invoiceSchema.parse(body); 81 const validatedData = createInvoiceSchema.parse(body); 82 83 const tenant = await prisma.tenant.findUnique({ 84 where: { id: validatedData.invoiceFrom.id }, 85 }); 86 87 const toCustomer = await prisma.client.findUnique({ 88 where: { id: validatedData.invoiceTo.id }, 89 }); 90 91 if (!tenant || !toCustomer) { 92 return NextResponse.json({ error: 'Invoice sender or recipient not found' }, { status: 404 }); 93 } 94 95 // Update lastInvoiceNumber in tenant 96 const updatedTenant = await prisma.tenant.update({ 97 where: { id: tenant.id }, 98 data: { 99 lastInvoiceNumber: validatedData.invoiceNumber, 100 }, 101 }); 80 102 81 103 const invoice = await prisma.invoice.create({ 82 104 data: { 83 ...validatedData, 84 userId, 105 dueDate: validatedData.dueDate, 106 status: validatedData.status, 107 currency: validatedData.currency, 108 quantityType: validatedData.quantityType, 109 subTotal: validatedData.subTotal, 110 createDate: validatedData.createDate, 111 month: validatedData.month, 112 discount: validatedData.discount, 113 taxes: validatedData.taxes, 114 totalAmount: validatedData.totalAmount, 115 invoiceNumber: validatedData.invoiceNumber, 116 invoiceFromId: tenant.id, 117 invoiceToId: toCustomer.id, 85 118 items: { 86 create: validatedData.items, 119 create: validatedData.items.map((item) => ({ 120 title: item.title, 121 price: item.price, 122 total: item.total, 123 quantity: item.quantity, 124 description: item.description, 125 service: { 126 connect: { id: item.service.id }, 127 }, 128 })), 87 129 }, 88 130 }, … … 100 142 return NextResponse.json(invoice, { status: 201 }); 101 143 } catch (error) { 144 console.error(error); 102 145 return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 }); 103 146 }
Note:
See TracChangeset
for help on using the changeset viewer.