60 lines
2.2 KiB
TypeScript
60 lines
2.2 KiB
TypeScript
|
|
import type { Metadata } from "next"
|
|||
|
|
import { cookies } from "next/headers"
|
|||
|
|
import { redirect } from "next/navigation"
|
|||
|
|
import { Velkommen } from "@/components/teecup/velkommen"
|
|||
|
|
|
|||
|
|
export const metadata: Metadata = {
|
|||
|
|
title: "Velkommen – TeeCup",
|
|||
|
|
description: "Fullfør profilen din for å komme i gang med TeeCup.",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Server-side, IKKE nettleser-fetch -- går derfor IKKE gjennom
|
|||
|
|
// next.config.mjs sin rewrites() (samme mønster som /logg-inn/page.tsx og
|
|||
|
|
// den tidligere app/page.tsx). Peker direkte på API-et.
|
|||
|
|
const API_ORIGIN = process.env.TEECUP_API_ORIGIN || "http://localhost:8000"
|
|||
|
|
// Må matche SESSION_COOKIE_NAME i app/auth.py -- ingen delt konstant på
|
|||
|
|
// tvers av Python/TypeScript, samme mønster som andre API-kontrakt-felt
|
|||
|
|
// som dupliseres bevisst i frontend-koden.
|
|||
|
|
const SESSION_COOKIE_NAME = "teecup_session"
|
|||
|
|
|
|||
|
|
export default async function VelkommenPage() {
|
|||
|
|
const cookieStore = await cookies()
|
|||
|
|
const session = cookieStore.get(SESSION_COOKIE_NAME)
|
|||
|
|
let authenticated = false
|
|||
|
|
let profileComplete = true
|
|||
|
|
let firstName: string | null = null
|
|||
|
|
let displayName = ""
|
|||
|
|
if (session) {
|
|||
|
|
try {
|
|||
|
|
const res = await fetch(`${API_ORIGIN}/auth/me`, {
|
|||
|
|
headers: { Cookie: `${SESSION_COOKIE_NAME}=${session.value}` },
|
|||
|
|
cache: "no-store",
|
|||
|
|
})
|
|||
|
|
authenticated = res.ok
|
|||
|
|
if (res.ok) {
|
|||
|
|
const data = await res.json()
|
|||
|
|
profileComplete = Boolean(data.profile_complete)
|
|||
|
|
firstName = data.first_name ?? null
|
|||
|
|
displayName = data.display_name ?? ""
|
|||
|
|
}
|
|||
|
|
} catch {
|
|||
|
|
// API utilgjengelig -- send til innlogging i stedet for å henge.
|
|||
|
|
authenticated = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// redirect() kaster en egen NEXT_REDIRECT-kontrollflyt-exception som MÅ
|
|||
|
|
// boble videre til Next.js -- må derfor stå UTENFOR try/catch-en over
|
|||
|
|
// (reell bug funnet 2026-08-08 i /logg-inn/page.tsx av nøyaktig denne
|
|||
|
|
// fallgruven, se CHANGELOG.md -- unngås her fra start).
|
|||
|
|
if (!authenticated) {
|
|||
|
|
redirect("/logg-inn")
|
|||
|
|
}
|
|||
|
|
// Denne siden finnes KUN for innlogget-men-ikke-fullført-profil -- en
|
|||
|
|
// bruker med komplett profil skal aldri se den (send rett til dashbordet).
|
|||
|
|
if (profileComplete) {
|
|||
|
|
redirect("/dashboard")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return <Velkommen firstName={firstName} displayName={displayName} />
|
|||
|
|
}
|