1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| 'use server';
import {z} from 'zod'; import {sql} from '@vercel/postgres'; import { revalidatePath } from 'next/cache'; import { redirect } from 'next/navigation';
const FormSchema = z.object({ id: z.string(), customerId: z.string(), amount: z.coerce.number(), status: z.enum(['pending', 'paid']), date: z.string(), });
const CreateInvoice = FormSchema.omit({id: true, date: true});
export async function createInvoice(formData: FormData) { const {customerId, amount, status} = CreateInvoice.parse({ customerId: formData.get('customerId'), amount: formData.get('amount'), status: formData.get('status'), }); const amountInCents = amount * 100; const date = new Date().toISOString().split('T')[0];
try { await sql` INSERT INTO invoices (customer_id, amount, status, date) VALUES (${customerId}, ${amountInCents}, ${status}, ${date}) `; } catch (error) { return { message: 'Database Error: Failed to Create Invoice.', }; }
revalidatePath('/dashboard/invoices'); redirect('/dashboard/invoices');
}
const UpdateInvoice = FormSchema.omit({ id: true, date: true });
export async function updateInvoice(id: string, formData: FormData) { const { customerId, amount, status } = UpdateInvoice.parse({ customerId: formData.get('customerId'), amount: formData.get('amount'), status: formData.get('status'), });
const amountInCents = amount * 100;
try { await sql` UPDATE invoices SET customer_id = ${customerId}, amount = ${amountInCents}, status = ${status} WHERE id = ${id} `; } catch (error) { return { message: 'Database Error: Failed to Update Invoice.' }; }
revalidatePath('/dashboard/invoices'); redirect('/dashboard/invoices'); }
export async function deleteInvoice(id: string) { try { await sql`DELETE FROM invoices WHERE id = ${id}`; revalidatePath('/dashboard/invoices'); return { message: 'Deleted Invoice' }; } catch (error) { return { message: 'Database Error: Failed to Delete Invoice.' }; } }
|