generator client { provider = "prisma-client-js" } datasource db { provider = "sqlite" url = "file:../data/pingvin-share.db" } model User { id String @id @default(uuid()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt username String @unique email String @unique password String isAdmin Boolean @default(false) shares Share[] refreshTokens RefreshToken[] loginTokens LoginToken[] totpEnabled Boolean @default(false) totpVerified Boolean @default(false) totpSecret String? } model RefreshToken { token String @id @default(uuid()) createdAt DateTime @default(now()) expiresAt DateTime userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade) } model LoginToken { token String @id @default(uuid()) createdAt DateTime @default(now()) expiresAt DateTime userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade) used Boolean @default(false) } model Share { id String @id @default(uuid()) createdAt DateTime @default(now()) uploadLocked Boolean @default(false) isZipReady Boolean @default(false) views Int @default(0) expiration DateTime description String? creatorId String? creator User? @relation(fields: [creatorId], references: [id], onDelete: Cascade) security ShareSecurity? recipients ShareRecipient[] files File[] } model ShareRecipient { id String @id @default(uuid()) email String shareId String share Share @relation(fields: [shareId], references: [id], onDelete: Cascade) } model File { id String @id @default(uuid()) createdAt DateTime @default(now()) name String size String shareId String share Share @relation(fields: [shareId], references: [id], onDelete: Cascade) } model ShareSecurity { id String @id @default(uuid()) createdAt DateTime @default(now()) password String? maxViews Int? shareId String? @unique share Share? @relation(fields: [shareId], references: [id], onDelete: Cascade) } model Config { updatedAt DateTime @updatedAt key String @id type String value String description String obscured Boolean @default(false) secret Boolean @default(true) locked Boolean @default(false) }