"use server"; import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; import { z } from "zod"; import type { StatusBriefing } from "@prisma/client"; import { db } from "@/lib/db"; import { requireAdmin, revelarCpfCliente, atualizarStatusBriefing } from "@/lib/admin-service"; import { reabrirBriefing } from "@/lib/briefing-service"; export type AdminActionState = { ok: boolean; message?: string; value?: string; }; export async function revelarCpfAction( clienteId: string, _state: AdminActionState ): Promise { const cpf = await revelarCpfCliente(clienteId); return { ok: true, value: cpf }; } export async function mudarStatusAction(formData: FormData) { await requireAdmin(); const briefingId = String(formData.get("briefingId") ?? ""); const status = String(formData.get("status") ?? "") as StatusBriefing; if (!["ENVIADO", "EM_ANALISE", "CONCLUIDO"].includes(status)) { return; } await atualizarStatusBriefing(briefingId, status); revalidatePath(`/admin/briefings/${briefingId}`); } export async function reabrirBriefingAction(formData: FormData) { await requireAdmin(); const briefingId = String(formData.get("briefingId") ?? ""); await reabrirBriefing(briefingId); revalidatePath(`/admin/briefings/${briefingId}`); } export async function adicionarNotaInternaAction(formData: FormData) { const admin = await requireAdmin(); const briefingId = String(formData.get("briefingId") ?? ""); const texto = String(formData.get("texto") ?? "").trim(); if (!texto) { return; } await db.notaInterna.create({ data: { briefingId, adminId: admin.id, texto } }); revalidatePath(`/admin/briefings/${briefingId}`); } const perguntaSchema = z.object({ perguntaId: z.string().min(1), rotulo: z.string().trim().min(1), dica: z.string().trim().optional(), ordem: z.coerce.number().int().positive(), ativo: z.boolean(), obrigatoria: z.boolean(), oQueResponder: z.string().trim().min(1), porQuePerguntamos: z.string().trim().min(1), miniExemplo: z.string().trim().min(1) }); export async function salvarPerguntaAction(formData: FormData) { await requireAdmin(); const parsed = perguntaSchema.safeParse({ perguntaId: formData.get("perguntaId"), rotulo: formData.get("rotulo"), dica: formData.get("dica") || undefined, ordem: formData.get("ordem"), ativo: formData.get("ativo") === "on", obrigatoria: formData.get("obrigatoria") === "on", oQueResponder: formData.get("oQueResponder"), porQuePerguntamos: formData.get("porQuePerguntamos"), miniExemplo: formData.get("miniExemplo") }); if (!parsed.success) { return; } await db.pergunta.update({ where: { id: parsed.data.perguntaId }, data: { rotulo: parsed.data.rotulo, dica: parsed.data.dica ?? null, ordem: parsed.data.ordem, ativo: parsed.data.ativo, obrigatoria: parsed.data.obrigatoria, ajuda: { upsert: { update: { oQueResponder: parsed.data.oQueResponder, porQuePerguntamos: parsed.data.porQuePerguntamos, miniExemplo: parsed.data.miniExemplo }, create: { oQueResponder: parsed.data.oQueResponder, porQuePerguntamos: parsed.data.porQuePerguntamos, miniExemplo: parsed.data.miniExemplo } } } } }); revalidatePath("/admin/perguntas"); } export async function irParaClientes(formData: FormData) { const busca = String(formData.get("busca") ?? "").trim(); const tipo = String(formData.get("tipo") ?? "").trim(); const params = new URLSearchParams(); if (busca) params.set("busca", busca); if (tipo) params.set("tipo", tipo); redirect(`/admin/clientes${params.size ? `?${params.toString()}` : ""}`); }