I have completed the character creation screen on the avatar branch and am preparing to merge it into main.
72 lines
1.6 KiB
TypeScript
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;
|
|
}
|