88 lines
2.6 KiB
TypeScript
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");
|
|
}
|