Added opaque join-token support across backend and frontend: new migration/model/service/endpoints, guest controllers now resolve tokens, and the demo seeder seeds a token. Tenant event details list/manage tokens with copy/revoke actions, and the guest PWA uses tokens end-to-end (routing, storage, uploads, achievements, etc.). Docs TODO updated to reflect completed steps.

This commit is contained in:
Codex Agent
2025-10-12 10:32:37 +02:00
parent d04e234ca0
commit 9394c3171e
73 changed files with 3277 additions and 911 deletions

View File

@@ -20,9 +20,9 @@ import LegalPage from './pages/LegalPage';
import NotFoundPage from './pages/NotFoundPage';
function HomeLayout() {
const { slug } = useParams();
const { token } = useParams();
if (!slug) {
if (!token) {
return (
<div className="pb-16">
<Header title="Event" />
@@ -35,10 +35,10 @@ function HomeLayout() {
}
return (
<GuestIdentityProvider slug={slug}>
<EventStatsProvider slug={slug}>
<GuestIdentityProvider eventKey={token}>
<EventStatsProvider eventKey={token}>
<div className="pb-16">
<Header slug={slug} />
<Header slug={token} />
<div className="px-4 py-3">
<Outlet />
</div>
@@ -52,14 +52,14 @@ function HomeLayout() {
export const router = createBrowserRouter([
{ path: '/event', element: <SimpleLayout title="Event"><LandingPage /></SimpleLayout> },
{
path: '/setup/:slug',
path: '/setup/:token',
element: <SetupLayout />,
children: [
{ index: true, element: <ProfileSetupPage /> },
],
},
{
path: '/e/:slug',
path: '/e/:token',
element: <HomeLayout />,
children: [
{ index: true, element: <HomePage /> },
@@ -79,13 +79,13 @@ export const router = createBrowserRouter([
]);
function SetupLayout() {
const { slug } = useParams<{ slug: string }>();
if (!slug) return null;
const { token } = useParams<{ token: string }>();
if (!token) return null;
return (
<GuestIdentityProvider slug={slug}>
<EventStatsProvider slug={slug}>
<GuestIdentityProvider eventKey={token}>
<EventStatsProvider eventKey={token}>
<div className="pb-0">
<Header slug={slug} />
<Header slug={token} />
<Outlet />
</div>
</EventStatsProvider>