Initial SeConectai briefing system
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
"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");
|
||||
}
|
||||
Reference in New Issue
Block a user