Files
HaBit/lib/auth-helpers.ts
pricewowen 61f98866e8 avatar to main merge
I have completed the character creation screen on the avatar branch and am preparing to merge it into main.
2026-05-23 23:24:36 -06:00

72 lines
1.6 KiB
TypeScript

import { redirect } from "next/navigation";
import {
fetchOnboardingStatusForUser,
getRedirectPathFromStatus,
} from "@/lib/onboarding-status";
import { routes } from "@/lib/routes";
import { createClient } from "@/lib/supabase/server";
export async function getSessionUser() {
const supabase = await createClient();
const {
data: { user },
error,
} = await supabase.auth.getUser();
if (error || !user) {
return null;
}
return user;
}
export async function requireSessionUser() {
const user = await getSessionUser();
if (!user) {
redirect(routes.login);
}
return user;
}
export async function getOnboardingStatusForCurrentUser() {
const user = await requireSessionUser();
const supabase = await createClient();
return fetchOnboardingStatusForUser(user.id, supabase);
}
export async function getOnboardingRedirectPath() {
const status = await getOnboardingStatusForCurrentUser();
return getRedirectPathFromStatus(status);
}
export async function requireOnboardingComplete() {
const user = await requireSessionUser();
const supabase = await createClient();
const status = await fetchOnboardingStatusForUser(user.id, supabase);
if (!status.appComplete) {
redirect(getRedirectPathFromStatus(status));
}
return user;
}
export async function requireOnboardingQuizComplete() {
const user = await requireSessionUser();
const supabase = await createClient();
const status = await fetchOnboardingStatusForUser(user.id, supabase);
if (status.appComplete) {
redirect(routes.avatar);
}
if (!status.quizComplete) {
redirect(routes.onboardingQuiz);
}
return user;
}