167 lines
3.8 KiB
Text
167 lines
3.8 KiB
Text
// This is your Prisma schema file,
|
|
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
|
|
|
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
// Auth.js models
|
|
|
|
model Account {
|
|
id Int @id @default(autoincrement())
|
|
user_id Int @map("userId")
|
|
type String
|
|
provider String
|
|
providerAccountId String
|
|
refresh_token String? @db.Text
|
|
access_token String? @db.Text
|
|
expires_at Int?
|
|
token_type String?
|
|
scope String?
|
|
id_token String? @db.Text
|
|
session_state String?
|
|
|
|
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([provider, providerAccountId])
|
|
@@map("accounts")
|
|
}
|
|
|
|
model User {
|
|
id Int @id @default(autoincrement())
|
|
name String?
|
|
email String? @unique
|
|
|
|
accounts Account[]
|
|
EntryVersion EntryVersion[]
|
|
EntryExecution EntryExecution[]
|
|
SavedFilter SavedFilter[]
|
|
|
|
@@map("users")
|
|
}
|
|
|
|
// Visitenbuch models
|
|
|
|
// Hospital station
|
|
model Station {
|
|
id Int @id @default(autoincrement())
|
|
name String
|
|
Room Room[]
|
|
hidden Boolean @default(false)
|
|
|
|
@@map("stations")
|
|
}
|
|
|
|
// Hospital room
|
|
model Room {
|
|
id Int @id @default(autoincrement())
|
|
name String
|
|
station Station @relation(fields: [station_id], references: [id], onDelete: Restrict)
|
|
station_id Int
|
|
Patient Patient[]
|
|
hidden Boolean @default(false)
|
|
|
|
@@map("rooms")
|
|
}
|
|
|
|
model Patient {
|
|
id Int @id @default(autoincrement())
|
|
first_name String
|
|
last_name String
|
|
age Int?
|
|
room Room? @relation(fields: [room_id], references: [id], onDelete: Restrict)
|
|
room_id Int?
|
|
Entry Entry[]
|
|
hidden Boolean @default(false)
|
|
|
|
created_at DateTime @default(now())
|
|
|
|
full_name String? @default(dbgenerated("((first_name || ' '::text) || last_name)")) @ignore
|
|
|
|
@@index([full_name(ops: raw("gin_trgm_ops"))], map: "patients_full_name", type: Gin)
|
|
@@map("patients")
|
|
}
|
|
|
|
// Entry category (e.g. Blood test, Exams, ...)
|
|
model Category {
|
|
id Int @id @default(autoincrement())
|
|
name String
|
|
color String?
|
|
description String?
|
|
EntryVersion EntryVersion[]
|
|
hidden Boolean @default(false)
|
|
|
|
@@map("categories")
|
|
}
|
|
|
|
model Entry {
|
|
id Int @id @default(autoincrement())
|
|
patient Patient @relation(fields: [patient_id], references: [id], onDelete: Restrict)
|
|
patient_id Int
|
|
|
|
EntryVersion EntryVersion[]
|
|
EntryExecution EntryExecution[]
|
|
|
|
created_at DateTime @default(now())
|
|
|
|
tsvec Unsupported("tsvector")?
|
|
|
|
@@index([tsvec], type: Gin)
|
|
@@map("entries")
|
|
}
|
|
|
|
model EntryVersion {
|
|
id Int @id @default(autoincrement())
|
|
entry Entry @relation(fields: [entry_id], references: [id], onDelete: Cascade)
|
|
entry_id Int
|
|
|
|
text String
|
|
date DateTime @db.Date
|
|
|
|
category Category? @relation(fields: [category_id], references: [id], onDelete: Restrict)
|
|
category_id Int?
|
|
priority Boolean
|
|
|
|
author User @relation(fields: [author_id], references: [id])
|
|
author_id Int
|
|
|
|
created_at DateTime @default(now())
|
|
|
|
@@index([entry_id])
|
|
@@map("entry_versions")
|
|
}
|
|
|
|
model EntryExecution {
|
|
id Int @id @default(autoincrement())
|
|
entry Entry @relation(fields: [entry_id], references: [id], onDelete: Cascade)
|
|
entry_id Int
|
|
|
|
text String
|
|
done Boolean @default(true)
|
|
|
|
author User @relation(fields: [author_id], references: [id])
|
|
author_id Int
|
|
|
|
created_at DateTime @default(now())
|
|
|
|
@@index([entry_id])
|
|
@@map("entry_executions")
|
|
}
|
|
|
|
model SavedFilter {
|
|
id Int @id @default(autoincrement())
|
|
|
|
user User @relation(fields: [user_id], references: [id])
|
|
user_id Int
|
|
|
|
view String
|
|
name String
|
|
query String
|
|
|
|
@@map("saved_filter")
|
|
}
|