feat(ecommerce): cuentas de cliente reales (registro + login)
Conecta el dialogo 'Tu cuenta ARI' (antes solo ofrecia WhatsApp) al Store API real de Medusa. Flujo verificado en vivo con un cliente de prueba real antes de escribir el codigo: registro -> crear customer -> login -> /store/customers/me, todo confirmado funcionando. Detalle no documentado que se confirmo en vivo: el token que devuelve /auth/customer/emailpass/register sirve para crear el customer via POST /store/customers, pero no queda como sesion real -- hay que loguear de nuevo (/auth/customer/emailpass) para obtener el token de sesion. Mensajes de error tambien verificados: correo repetido -> 401 'Identity with email already exists'; credenciales invalidas -> 401 'Invalid email or password'. Mismo patron arquitectonico que el carrito real (ADR 0009): rutas puente /api/customer/* (MEDUSA_BACKEND_URL es DNS interno, no resuelve desde el navegador), store de Zustand con sesion persistida y resincronizada contra el servidor al rehidratar. WhatsApp se mantiene como opcion secundaria, ya no es la unica salida.
This commit is contained in:
1 parent
73f9424331
commit
3b748cc014
7 files changed
+353
-15
No files matched your search
@@ -0,0 +1,14 @@
|
||||
import { loginCustomer } from "@/lib/headless/providers/medusa-customer";
|
||||
|
||||
export async function POST(request: Request) {
|
||||
const { email, password } = await request.json();
|
||||
if (!email || !password) {
|
||||
return Response.json({ error: "Correo y contraseña son obligatorios" }, { status: 400 });
|
||||
}
|
||||
try {
|
||||
const customer = await loginCustomer(email, password);
|
||||
return Response.json(customer);
|
||||
} catch (error) {
|
||||
return Response.json({ error: (error as Error).message }, { status: 400 });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import { getCurrentCustomer } from "@/lib/headless/providers/medusa-customer";
|
||||
|
||||
export async function GET(request: Request) {
|
||||
const token = new URL(request.url).searchParams.get("token");
|
||||
if (!token) {
|
||||
return Response.json({ error: "token es obligatorio" }, { status: 400 });
|
||||
}
|
||||
try {
|
||||
const customer = await getCurrentCustomer(token);
|
||||
return Response.json(customer);
|
||||
} catch (error) {
|
||||
return Response.json({ error: (error as Error).message }, { status: 401 });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import { registerCustomer } from "@/lib/headless/providers/medusa-customer";
|
||||
|
||||
export async function POST(request: Request) {
|
||||
const { email, password, firstName, lastName } = await request.json();
|
||||
if (!email || !password || !firstName || !lastName) {
|
||||
return Response.json({ error: "Faltan campos obligatorios" }, { status: 400 });
|
||||
}
|
||||
try {
|
||||
const customer = await registerCustomer(email, password, firstName, lastName);
|
||||
return Response.json(customer);
|
||||
} catch (error) {
|
||||
return Response.json({ error: (error as Error).message }, { status: 400 });
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user