'use server'; import { redirect } from 'next/navigation'; import { prisma } from '@/lib/prisma'; import { sendProofEmail } from '@/lib/mail'; import { saveUploadedFile } from '@/lib/storage'; export async function createProof(formData: FormData) { const productId = String(formData.get('productId') ?? ''); const customerName = String(formData.get('customerName') ?? '').trim(); const customerEmail = String(formData.get('customerEmail') ?? '').trim(); const color = String(formData.get('color') ?? ''); const quantity = Math.max(1, Number(formData.get('quantity') ?? 1)); const note = String(formData.get('note') ?? '').trim(); const priceOverride = formData.get('price'); const file = formData.get('image') as File | null; if (!productId || !customerEmail || !color || !file || file.size === 0) { throw new Error('Missing required fields: product, customer email, color, and an image are all required.'); } const product = await prisma.product.findUnique({ where: { id: productId } }); if (!product) throw new Error('Product not found.'); const imageUrl = await saveUploadedFile(file, 'proofs'); const unitPrice = priceOverride && String(priceOverride).trim() !== '' ? Math.round(Number(priceOverride) * 100) : product.basePrice; const proof = await prisma.designProof.create({ data: { productId, customerName: customerName || null, customerEmail, color, quantity, unitPrice, imageUrl, note: note || null, }, }); const siteUrl = process.env.NEXT_PUBLIC_SITE_URL ?? 'http://localhost:3000'; const link = `${siteUrl}/proofs/${proof.id}`; const result = await sendProofEmail({ to: customerEmail, customerName: customerName || null, link, productName: product.name, note: note || null, }); redirect(`/admin/proofs/${proof.id}/sent?emailed=${result.sent ? '1' : '0'}`); }