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

+38
View File
@@ -7,6 +7,41 @@ datasource db {
url = env("DATABASE_URL_APP")
}
model SubscriptionTier {
subscription_tier_id Int @id @default(autoincrement())
name String @db.VarChar(100)
slug String @unique @db.VarChar(50)
description String? @db.Text
level Int @default(0)
price_monthly Decimal? @db.Decimal(10, 2)
price_yearly Decimal? @db.Decimal(10, 2)
is_active Boolean @default(true)
created_at DateTime @default(now())
updated_at DateTime @default(now()) @updatedAt
users User[]
features SubscriptionTierFeature[]
@@index([slug])
@@index([level])
@@map("subscription_tiers")
}
model SubscriptionTierFeature {
feature_id Int @id @default(autoincrement())
subscription_tier_id Int
feature_key String @db.VarChar(100)
label String @db.VarChar(255)
description String? @db.Text
sort_order Int @default(0)
created_at DateTime @default(now())
updated_at DateTime @default(now()) @updatedAt
tier SubscriptionTier @relation(fields: [subscription_tier_id], references: [subscription_tier_id], onDelete: Cascade)
@@unique([subscription_tier_id, feature_key], map: "subscription_tier_features_unique")
@@index([subscription_tier_id, sort_order], map: "subscription_tier_features_sort_idx")
@@map("subscription_tier_features")
}
model User {
user_id Int @id @default(autoincrement())
username String @unique @db.VarChar(50)
@@ -35,10 +70,13 @@ model User {
favorites UserFavorite[]
telemetry_events TelemetryEvent[]
purchaseIntentions PurchaseIntention[] @relation("BuyerIntentions")
subscription_tier_id Int?
subscription_tier SubscriptionTier? @relation(fields: [subscription_tier_id], references: [subscription_tier_id], onDelete: SetNull)
@@index([email])
@@index([username])
@@index([cpf])
@@index([subscription_tier_id])
@@map("users")
}