Files
SeConectai_Web/app/(cliente)/minha-conta/actions.ts
T

88 lines
2.6 KiB
TypeScript

"use server";
import { revalidatePath } from "next/cache";
import { z } from "zod";
import { getClienteConta } from "@/lib/account-service";
import { db } from "@/lib/db";
import { normalizeWhatsapp } from "@/lib/validators";
export type ContaState = {
ok: boolean;
message?: string;
};
const atualizarContaSchema = z.object({
nomeCompleto: z.string().trim().min(3),
whatsapp: z.string().trim().min(10),
razaoSocial: z.string().trim().optional(),
cep: z.string().trim().optional(),
logradouro: z.string().trim().optional(),
numero: z.string().trim().optional(),
complemento: z.string().trim().optional(),
bairro: z.string().trim().optional(),
cidade: z.string().trim().optional(),
uf: z.string().trim().max(2).optional()
});
export async function atualizarConta(
_state: ContaState,
formData: FormData
): Promise<ContaState> {
const cliente = await getClienteConta();
const parsed = atualizarContaSchema.safeParse({
nomeCompleto: formData.get("nomeCompleto"),
whatsapp: formData.get("whatsapp"),
razaoSocial: formData.get("razaoSocial") || undefined,
cep: formData.get("cep") || undefined,
logradouro: formData.get("logradouro") || undefined,
numero: formData.get("numero") || undefined,
complemento: formData.get("complemento") || undefined,
bairro: formData.get("bairro") || undefined,
cidade: formData.get("cidade") || undefined,
uf: formData.get("uf") || undefined
});
if (!parsed.success) {
return { ok: false, message: "Revise os dados informados." };
}
const whatsapp = normalizeWhatsapp(parsed.data.whatsapp);
if (!whatsapp) {
return { ok: false, message: "Informe um WhatsApp com DDD." };
}
await db.cliente.update({
where: { id: cliente.id },
data: {
nomeCompleto: parsed.data.nomeCompleto,
whatsapp,
razaoSocial: parsed.data.razaoSocial ?? null,
cep: parsed.data.cep ?? null,
logradouro: parsed.data.logradouro ?? null,
numero: parsed.data.numero ?? null,
complemento: parsed.data.complemento ?? null,
bairro: parsed.data.bairro ?? null,
cidade: parsed.data.cidade ?? null,
uf: parsed.data.uf?.toUpperCase() ?? null
}
});
revalidatePath("/minha-conta");
return { ok: true, message: "Dados atualizados." };
}
export async function solicitarExclusao(formData: FormData) {
const cliente = await getClienteConta();
const motivo = String(formData.get("motivo") ?? "").trim();
await db.solicitacaoExclusao.create({
data: {
clienteId: cliente.id,
motivo: motivo || null
}
});
revalidatePath("/minha-conta");
}