Files
setrip/features/auth/actions.ts
T
2026-05-05 15:00:14 +07:00

54 lines
1.6 KiB
TypeScript

"use server";
import { getServerSession } from "next-auth";
import { authOptions } from "@/lib/auth";
import { registerSchema } from "./schemas";
import { authService } from "@/server/services/auth.service";
import { userRepo } from "@/server/repositories/user.repo";
export async function registerAction(formData: FormData) {
const raw = {
name: formData.get("name") as string,
email: formData.get("email") as string,
password: formData.get("password") as string,
confirmPassword: formData.get("confirmPassword") as string,
acceptedTermsAndPrivacy: formData.get("acceptedTermsAndPrivacy") === "on",
};
const result = registerSchema.safeParse(raw);
if (!result.success) {
return { error: result.error.issues[0].message };
}
try {
await authService.register({
name: result.data.name,
email: result.data.email,
password: result.data.password,
acceptedTermsAndPrivacy: result.data.acceptedTermsAndPrivacy,
});
return { success: true };
} catch (err) {
return { error: (err as Error).message };
}
}
export async function acceptTermsAction(input: { accepted: boolean }) {
if (input?.accepted !== true) {
return {
error:
"Kamu harus mencentang persetujuan Syarat & Ketentuan dan Kebijakan Privasi",
};
}
const session = await getServerSession(authOptions);
if (!session?.user) {
return { error: "Kamu harus login terlebih dahulu" };
}
try {
await userRepo.markAcceptedTerms(session.user.id);
return { success: true };
} catch (err) {
return { error: (err as Error).message };
}
}