Visitenbuch/prisma/schema.prisma

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")
}