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.
This commit is contained in:
Evandro Fonseca Junior committed 2025-11-07 21:03:19 -03:00
1 parent 7f42def478
commit d27526e026
20 files changed
+2133 -40

No files matched your search

+15 -2
View File
@@ -31,6 +31,7 @@ import { useSession } from "@/lib/hooks/use-session";
import Link from "next/link";
import { useState, useEffect } from "react";
import { LogOut, User } from "lucide-react";
import { Badge } from "@/components/ui/badge";
export default function Header() {
const t = useTranslations("header.nav");
@@ -53,6 +54,13 @@ export default function Header() {
{ href: `/${locale}/apoiar`, label: t("support"), highlight: true },
];
const navLinks = [
...links,
...(isAuthenticated && user?.userId === 1
? [{ href: `/${locale}/admin/subscriptions`, label: "Admin" }]
: []),
];
const handleLogout = async () => {
await logout();
};
@@ -73,7 +81,7 @@ export default function Header() {
{/* Desktop Navigation */}
<NavigationMenu className="hidden md:flex">
<NavigationMenuList>
{links.map(({ href, label, highlight }) => (
{navLinks.map(({ href, label, highlight }) => (
<NavigationMenuItem key={href}>
<NavigationMenuLink asChild>
<Link
@@ -103,6 +111,11 @@ export default function Header() {
{/* Notifications */}
{mounted && isAuthenticated && <NotificationBell />}
{mounted && isAuthenticated && user?.subscriptionTier && (
<Badge variant="outline" className="uppercase">
{user.subscriptionTier.slug}
</Badge>
)}
{/* Auth Section */}
{!mounted ? (
@@ -172,7 +185,7 @@ export default function Header() {
{/* Mobile Menu */}
<div className="md:hidden">
<MobileMenu links={links} />
<MobileMenu links={navLinks} />
</div>
</div>