feat: frontend alumnos sam-pruebas (RUT+clave, rendir y mis resultados)

This commit is contained in:
Nurfog committed 2026-09-28 10:58:45 -03:00
commit e6d283e184
26 files changed
+2555

No files matched your search

+27
View File
@@ -0,0 +1,27 @@
import { NextResponse } from "next/server";
const COOKIE = "sam_pruebas_alumno";
/** Login alumno: reenvía a SAM.API POST /api/sam-pruebas/login-alumno
* (valida idAlumno + Contrasena en sige_sam_v3 o sige_sam_empresa). */
export async function POST(req: Request) {
const body = await req.json().catch(() => ({}));
const base = process.env.API_URL || process.env.NEXT_PUBLIC_API_URL || "http://localhost:5000";
const r = await fetch(`${base}/api/sam-pruebas/login-alumno`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ idAlumno: (body.idAlumno || "").trim(), password: body.password || "" })
});
const data = await r.json().catch(() => null);
if (!r.ok || !data?.success) {
return NextResponse.json({ success: false, message: "Credenciales inválidas" }, { status: 401 });
}
const res = NextResponse.json({ success: true, user: data.user });
res.cookies.set(COOKIE, encodeURIComponent(JSON.stringify(data.user)), {
httpOnly: true,
path: "/",
maxAge: 60 * 60 * 12,
sameSite: "lax"
});
return res;
}
+9
View File
@@ -0,0 +1,9 @@
import { NextResponse } from "next/server";
const COOKIE = "sam_pruebas_alumno";
export async function POST() {
const res = NextResponse.json({ success: true });
res.cookies.set(COOKIE, "", { httpOnly: true, path: "/", maxAge: 0 });
return res;
}
+16
View File
@@ -0,0 +1,16 @@
import { NextResponse } from "next/server";
import { cookies } from "next/headers";
const COOKIE = "sam_pruebas_alumno";
/** Alumno conectado (según cookie de sesión). */
export async function GET() {
const jar = await cookies();
const raw = jar.get(COOKIE)?.value;
if (!raw) return NextResponse.json({ user: null }, { status: 401 });
try {
return NextResponse.json({ user: JSON.parse(decodeURIComponent(raw)) });
} catch {
return NextResponse.json({ user: null }, { status: 401 });
}
}