Files
pagodera/app/[locale]/admin/subscriptions/page.tsx
T
Evandro Fonseca Junior d27526e026 feat(auth): include subscription tier in token and session payload
- Adds subscription tier info to access/refresh tokens.
- Stores tier details in session Redis record.
- Returns tier data in login/register response.
- Uses default tier when user has none.
2025-11-07 21:03:19 -03:00

65 lines
2.0 KiB
TypeScript

import type { Metadata } from "next";
import { redirect } from "next/navigation";
import { cookies } from "next/headers";
import Header from "@/components/Header";
import { getSession } from "@/lib/redis/session";
import { getAllSubscriptionTiers } from "@/lib/prisma/queries/subscription-tiers";
import { AdminSubscriptionDashboard } from "@/components/admin/subscription-dashboard";
import { getUserById } from "@/lib/prisma/queries/users";
export async function generateMetadata(): Promise<Metadata> {
return {
title: "Assinaturas e Permissões",
description:
"Gerencie os planos de assinatura, recursos avançados e permissões dos usuários.",
};
}
export default async function AdminSubscriptionsPage({
params,
}: {
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
const cookieStore = await cookies();
const sessionId = cookieStore.get("sessionId")?.value;
if (!sessionId) {
redirect(`/${locale}`);
}
const session = await getSession(sessionId);
if (!session || session.userId !== 1) {
redirect(`/${locale}`);
}
const tiers = await getAllSubscriptionTiers(true);
const adminUser = await getUserById(session.userId);
return (
<div className="min-h-screen bg-background text-foreground">
<Header />
<main className="container mx-auto px-4 py-10 space-y-8">
<section className="space-y-2">
<h1 className="text-3xl font-bold">Assinaturas & Permissões</h1>
<p className="text-muted-foreground">
Configure planos, recursos e vincule usuários às assinaturas disponíveis.
</p>
{adminUser?.subscription_tier && (
<p className="text-sm text-muted-foreground">
Seu plano atual:{" "}
<span className="font-semibold uppercase">
{adminUser.subscription_tier.name} ({adminUser.subscription_tier.slug})
</span>
</p>
)}
</section>
<AdminSubscriptionDashboard initialTiers={tiers} />
</main>
</div>
);
}