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

+30 -2
View File
@@ -18,6 +18,10 @@ import {
} from "@/lib/prisma/queries/users";
import { setSession } from "@/lib/redis/session";
import { randomUUID } from "crypto";
import {
getDefaultSubscriptionTier,
getSubscriptionTierById,
} from "@/lib/prisma/queries/subscription-tiers";
export async function POST(request: NextRequest) {
try {
@@ -125,8 +129,20 @@ export async function POST(request: NextRequest) {
await updateLastLogin(user.user_id);
// Gerar tokens
const accessToken = generateAccessToken(user.user_id, user.username);
const refreshToken = generateRefreshToken(user.user_id, user.username);
const tierInfo =
user.subscription_tier ??
(user.subscription_tier_id
? await getSubscriptionTierById(user.subscription_tier_id)
: await getDefaultSubscriptionTier());
const accessToken = generateAccessToken(user.user_id, user.username, {
tierSlug: tierInfo?.slug ?? undefined,
tierLevel: tierInfo?.level ?? undefined,
});
const refreshToken = generateRefreshToken(user.user_id, user.username, {
tierSlug: tierInfo?.slug ?? undefined,
tierLevel: tierInfo?.level ?? undefined,
});
// Criar sessão no Redis
const sessionId = randomUUID();
@@ -136,6 +152,10 @@ export async function POST(request: NextRequest) {
email: user.email,
accessToken,
createdAt: Date.now(),
subscriptionTierId: tierInfo?.subscription_tier_id ?? null,
subscriptionTierSlug: tierInfo?.slug ?? null,
subscriptionTierName: tierInfo?.name ?? null,
subscriptionTierLevel: tierInfo?.level ?? null,
});
// Criar resposta
@@ -150,6 +170,14 @@ export async function POST(request: NextRequest) {
lastName: user.last_name,
accountLevel: user.account_level,
hasDonated: user.has_donated,
subscriptionTier: tierInfo
? {
id: tierInfo.subscription_tier_id,
name: tierInfo.name,
slug: tierInfo.slug,
level: tierInfo.level,
}
: null,
},
accessToken,
},