'use server' import { redirect } from 'next/navigation' import { z } from 'zod' import { requireUser } from '@/lib/auth/current' import { AccessError } from '@/lib/errors' import { createChannel } from '@/lib/chat/service' import { de } from '@/lib/i18n/de' export type ActionResult = { ok: true } | { ok: false; error: string } const schema = z.object({ key: z.string().min(2).max(40), name: z.string().min(2).max(120), description: z.string().max(500).optional(), minClearance: z.coerce.number().int().min(0).max(5), }) export async function createChannelAction( _prev: ActionResult | null, formData: FormData, ): Promise { const user = await requireUser() const parsed = schema.safeParse(Object.fromEntries(formData)) if (!parsed.success) return { ok: false, error: de.actionErrors.default! } let key: string try { const kanal = await createChannel(user.permissions, parsed.data) key = kanal.key } catch (error) { if (error instanceof AccessError) { return { ok: false, error: de.actionErrors[error.code] ?? de.actionErrors.default! } } console.error('[kanaele] unerwartet', error) return { ok: false, error: de.actionErrors.default! } } redirect(`/kanaele/${key}`) }