Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 42 additions & 7 deletions apps/backend/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,60 @@ model User {
company String?
avatarUrl String? @map("avatar_url")
accentColor String @default("#6366f1") @map("accent_color")
provider String
providerId String @map("provider_id")
emailVerified Boolean @default(false) @map("email_verified")
phoneNumber String? @unique @map("phone_number")
lastSignInAt DateTime? @map("last_sign_in_at")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
isActive Boolean @default(false)

identities UserIdentity[]
refreshTokens RefreshToken[]
platformLinks PlatformLink[]
cards Card[]
oauthTokens OAuthToken[]
ownedViews CardView[] @relation("cardOwner")
viewedCards CardView[] @relation("cardViewer")
followLogs FollowLog[]
organizer Event[]
attendedEvents EventAttendee[]
organizer Event[]
attendedEvents EventAttendee[]
ownedTeams Team[] @relation("TeamOwner")
teamMemberships TeamMember[] @relation("TeamMember")

ownedTeams Team[] @relation("TeamOwner")
teamMemberships TeamMember[] @relation("TeamMember")
@@map("users")
}

model UserIdentity {
id String @id @default(uuid())
userId String @map("user_id")
provider String // "google.com" | "apple.com" | "firebase" | "phone"
providerId String @map("provider_id") // Google sub / Apple sub / Firebase UID
createdAt DateTime @default(now()) @map("created_at")

user User @relation(fields: [userId], references: [id], onDelete: Cascade)

@@unique([provider, providerId])
@@map("users")
@@index([userId])
@@map("user_identities")
}


model RefreshToken {
id String @id @default(uuid())
userId String @map("user_id")
tokenHash String @unique @map("token_hash") //SHA-256 hash
family String // token rotation
expiresAt DateTime @map("expires_at")
revokedAt DateTime? @map("revoked_at") // null = still valid
createdAt DateTime @default(now()) @map("created_at")
userAgent String? @map("user_agent")
ip String? //hash

user User @relation(fields: [userId], references: [id], onDelete: Cascade)

@@index([userId])
@@index([family])
@@map("refresh_tokens")
}

model PlatformLink {
Expand Down
Loading