'use server' import { prisma } from '@innungsapp/shared' import { revalidatePath } from 'next/cache' import { z } from 'zod' const createOrgSchema = z.object({ name: z.string().min(2, 'Name muss mindestens 2 Zeichen lang sein'), slug: z.string().min(2, 'Slug muss mindestens 2 Zeichen lang sein').regex(/^[a-z0-9-]+$/, 'Slug darf nur Kleinbuchstaben, Zahlen und Bindestriche enthalten'), contactEmail: z.string().email('Ungültige E-Mail Adresse').optional().or(z.literal('')), }) export async function createOrganization(prevState: any, formData: FormData) { try { const rawData = { name: formData.get('name') as string, slug: (formData.get('slug') as string).toLowerCase(), contactEmail: formData.get('contactEmail') as string, } const validatedData = createOrgSchema.parse(rawData) // Check if slug exists const existingOrg = await prisma.organization.findUnique({ where: { slug: validatedData.slug } }) if (existingOrg) { return { success: false, error: 'Diese Kurzbezeichnung (Slug) existiert bereits.' } } await prisma.organization.create({ data: { name: validatedData.name, slug: validatedData.slug, contactEmail: validatedData.contactEmail || null, plan: 'pilot', } }) revalidatePath('/superadmin') return { success: true, error: '' } } catch (error) { if (error instanceof z.ZodError) { return { success: false, error: error.errors[0].message } } return { success: false, error: 'Ein unerwarteter Fehler ist aufgetreten.' } } }