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:
1 parent
7f42def478
commit
d27526e026
20 files changed
+2133
-40
No files matched your search
@@ -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,
|
||||
},
|
||||
|
||||
Reference in new issue
Block a user