"use server"; import { redirect } from "next/navigation"; import bcrypt from "bcryptjs"; import { prisma } from "@/lib/prisma"; import { loginSchema } from "@/lib/validators"; import { clearSessionCookie, setSessionCookie } from "@/lib/auth"; export type LoginState = { error?: string } | undefined; export async function loginAction(_prev: LoginState, formData: FormData): Promise { const parsed = loginSchema.safeParse({ email: formData.get("email"), password: formData.get("password"), }); if (!parsed.success) return { error: "Email atau password tidak valid." }; const user = await prisma.user.findUnique({ where: { email: parsed.data.email } }); if (!user || !user.isActive || !bcrypt.compareSync(parsed.data.password, user.passwordHash)) { return { error: "Email atau password salah." }; } await setSessionCookie({ userId: user.id, name: user.name, email: user.email, role: user.role === "ADMIN" ? "ADMIN" : "TEACHER", }); redirect("/dashboard"); } export async function logoutAction() { await clearSessionCookie(); redirect("/login"); }