91 lines
2.8 KiB
Plaintext
91 lines
2.8 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
output = "../src/generated/prisma"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "mysql"
|
|
}
|
|
|
|
// ─── Auth ────────────────────────────────────────────────────────────────────
|
|
|
|
model User {
|
|
id String @id @default(cuid())
|
|
email String @unique
|
|
emailVerified DateTime?
|
|
name String
|
|
passwordHash String
|
|
plan String @default("FREE") // FREE | PREMIUM
|
|
stripeId String? @unique
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
readings Reading[]
|
|
patient Patient?
|
|
dailyAnalysis DailyAnalysis?
|
|
verifyTokens VerifyToken[]
|
|
subscription Subscription?
|
|
}
|
|
|
|
model VerifyToken {
|
|
id String @id @default(cuid())
|
|
token String @unique
|
|
userId String
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
expiresAt DateTime
|
|
createdAt DateTime @default(now())
|
|
}
|
|
|
|
// ─── Domain ──────────────────────────────────────────────────────────────────
|
|
|
|
model Reading {
|
|
id Int @id @default(autoincrement())
|
|
userId String
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
measuredAt DateTime
|
|
moment String
|
|
value Float
|
|
notes String? @db.Text
|
|
createdAt DateTime @default(now())
|
|
|
|
@@index([userId, measuredAt])
|
|
}
|
|
|
|
model Patient {
|
|
id String @id @default(cuid())
|
|
userId String @unique
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
firstName String
|
|
lastName String
|
|
email String?
|
|
birthDate DateTime?
|
|
heightCm Int?
|
|
weightKg Float?
|
|
sex String?
|
|
diabetesType String?
|
|
treatment String?
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model DailyAnalysis {
|
|
id String @id @default(cuid())
|
|
userId String @unique
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
content String @db.Text
|
|
generatedAt DateTime @default(now())
|
|
}
|
|
|
|
model Subscription {
|
|
id String @id @default(cuid())
|
|
userId String @unique
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
stripeId String @unique
|
|
stripePriceId String
|
|
stripeCustomerId String
|
|
status String // active | past_due | canceled | unpaid
|
|
currentPeriodEnd DateTime
|
|
canceledAt DateTime?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|