Skip to content

Commit 279d3ab

Browse files
committed
refactor(auth): restructure user schema for enhanced authentication
1 parent 7762fa2 commit 279d3ab

1 file changed

Lines changed: 42 additions & 7 deletions

File tree

apps/backend/prisma/schema.prisma

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,60 @@ model User {
1818
company String?
1919
avatarUrl String? @map("avatar_url")
2020
accentColor String @default("#6366f1") @map("accent_color")
21-
provider String
22-
providerId String @map("provider_id")
21+
emailVerified Boolean @default(false) @map("email_verified")
22+
phoneNumber String? @unique @map("phone_number")
23+
lastSignInAt DateTime? @map("last_sign_in_at")
2324
createdAt DateTime @default(now()) @map("created_at")
2425
updatedAt DateTime @updatedAt @map("updated_at")
26+
isActive Boolean @default(false)
2527
28+
identities UserIdentity[]
29+
refreshTokens RefreshToken[]
2630
platformLinks PlatformLink[]
2731
cards Card[]
2832
oauthTokens OAuthToken[]
2933
ownedViews CardView[] @relation("cardOwner")
3034
viewedCards CardView[] @relation("cardViewer")
3135
followLogs FollowLog[]
32-
organizer Event[]
33-
attendedEvents EventAttendee[]
36+
organizer Event[]
37+
attendedEvents EventAttendee[]
38+
ownedTeams Team[] @relation("TeamOwner")
39+
teamMemberships TeamMember[] @relation("TeamMember")
3440
35-
ownedTeams Team[] @relation("TeamOwner")
36-
teamMemberships TeamMember[] @relation("TeamMember")
41+
@@map("users")
42+
}
43+
44+
model UserIdentity {
45+
id String @id @default(uuid())
46+
userId String @map("user_id")
47+
provider String // "google.com" | "apple.com" | "firebase" | "phone"
48+
providerId String @map("provider_id") // Google sub / Apple sub / Firebase UID
49+
createdAt DateTime @default(now()) @map("created_at")
50+
51+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
3752
3853
@@unique([provider, providerId])
39-
@@map("users")
54+
@@index([userId])
55+
@@map("user_identities")
56+
}
57+
58+
59+
model RefreshToken {
60+
id String @id @default(uuid())
61+
userId String @map("user_id")
62+
tokenHash String @unique @map("token_hash") //SHA-256 hash
63+
family String // token rotation
64+
expiresAt DateTime @map("expires_at")
65+
revokedAt DateTime? @map("revoked_at") // null = still valid
66+
createdAt DateTime @default(now()) @map("created_at")
67+
userAgent String? @map("user_agent")
68+
ip String?
69+
70+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
71+
72+
@@index([userId])
73+
@@index([family])
74+
@@map("refresh_tokens")
4075
}
4176

4277
model PlatformLink {

0 commit comments

Comments
 (0)