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

+24 -2
View File
@@ -23,6 +23,7 @@ import { setSession } from "@/lib/redis/session";
import { randomUUID } from "crypto";
import { createUser } from "@/lib/prisma/queries/users";
import { createCharacter } from "@/lib/prisma/queries/characters";
import { getDefaultSubscriptionTier } from "@/lib/prisma/queries/subscription-tiers";
export async function POST(request: NextRequest) {
try {
@@ -186,10 +187,19 @@ export async function POST(request: NextRequest) {
});
// Gerar tokens
const accessToken = generateAccessToken(newUser.userId, newUser.username);
const defaultTier = await getDefaultSubscriptionTier();
const accessToken = generateAccessToken(newUser.userId, newUser.username, {
tierSlug: defaultTier?.slug ?? undefined,
tierLevel: defaultTier?.level ?? undefined,
});
const refreshToken = generateRefreshToken(
newUser.userId,
newUser.username
newUser.username,
{
tierSlug: defaultTier?.slug ?? undefined,
tierLevel: defaultTier?.level ?? undefined,
}
);
// Criar sessão no Redis
@@ -200,6 +210,10 @@ export async function POST(request: NextRequest) {
email: newUser.email,
accessToken,
createdAt: Date.now(),
subscriptionTierId: defaultTier?.subscription_tier_id ?? null,
subscriptionTierSlug: defaultTier?.slug ?? null,
subscriptionTierName: defaultTier?.name ?? null,
subscriptionTierLevel: defaultTier?.level ?? null,
});
// Criar resposta
@@ -210,6 +224,14 @@ export async function POST(request: NextRequest) {
userId: newUser.userId,
username: newUser.username,
email: newUser.email,
subscriptionTier: defaultTier
? {
id: defaultTier.subscription_tier_id,
name: defaultTier.name,
slug: defaultTier.slug,
level: defaultTier.level,
}
: null,
},
accessToken,
},