generator client { provider = "prisma-client-js" } datasource db { provider = "sqlite" url = env("DATABASE_URL") } model User { id String @id @default(uuid()) metaId String? @unique facebookId String? @unique displayName String email String? avatarUrl String? bio String @default("") isPublic Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt linkedAccounts LinkedAccount[] streamPlans StreamPlan[] sessions Session[] followers Follow[] @relation("following") following Follow[] @relation("follower") likes Like[] } model Session { id String @id @default(uuid()) userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade) refreshToken String @unique expiresAt DateTime deviceInfo String? createdAt DateTime @default(now()) @@index([userId]) } model LinkedAccount { id String @id @default(uuid()) userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade) serviceId String displayName String accountId String avatarUrl String? accessTokenEnc String refreshTokenEnc String tokenExpiresAt DateTime accessTokenIv String refreshTokenIv String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@unique([userId, serviceId, accountId]) @@index([userId]) } model StreamPlan { id String @id @default(uuid()) userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade) name String status String @default("DRAFT") executionMode String @default("IN_GAME") gameId String @default("") createdAt DateTime @default(now()) updatedAt DateTime @updatedAt destinations StreamDestination[] likes Like[] @@index([userId]) } model StreamDestination { id String @id @default(uuid()) planId String plan StreamPlan @relation(fields: [planId], references: [id], onDelete: Cascade) serviceId String linkedAccountId String @default("") title String description String @default("") privacyStatus String @default("public") gameId String @default("") tags String @default("") rtmpUrl String @default("") streamKey String @default("") broadcastId String @default("") status String @default("PENDING") @@index([planId]) } model Follow { id String @id @default(uuid()) followerId String follower User @relation("follower", fields: [followerId], references: [id], onDelete: Cascade) followingId String following User @relation("following", fields: [followingId], references: [id], onDelete: Cascade) createdAt DateTime @default(now()) @@unique([followerId, followingId]) @@index([followerId]) @@index([followingId]) } model Like { id String @id @default(uuid()) userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade) planId String plan StreamPlan @relation(fields: [planId], references: [id], onDelete: Cascade) createdAt DateTime @default(now()) @@unique([userId, planId]) @@index([planId]) }