geraete/prisma/schema.prisma
2025-12-05 13:53:29 +01:00

144 lines
3.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Prisma Schema
generator client {
provider = "prisma-client"
output = "../generated/prisma"
engineType = "client"
generatedFileExtension = "ts"
importFileExtension = "ts"
moduleFormat = "esm"
runtime = "nodejs"
}
datasource db {
provider = "postgresql"
}
model User {
nwkennung String @id
email String? @unique
arbeitsname String?
firstName String?
lastName String?
passwordHash String?
groupId String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
avatarUrl String?
devicesCreated Device[] @relation("DeviceCreatedBy")
devicesUpdated Device[] @relation("DeviceUpdatedBy")
historyEntries DeviceHistory[] @relation("DeviceHistoryChangedBy")
// UserGroup hat ein Feld "id" also darauf referenzieren
group UserGroup? @relation(fields: [groupId], references: [id])
roles UserRole[]
@@index([groupId])
}
model Role {
id String @id @default(uuid())
name String @unique
users UserRole[]
}
model UserRole {
userId String
roleId String
assignedAt DateTime @default(now())
role Role @relation(fields: [roleId], references: [id])
user User @relation(fields: [userId], references: [nwkennung])
@@id([userId, roleId])
}
model UserGroup {
id String @id @default(uuid())
name String @unique
users User[]
canEditDevices Boolean @default(false)
}
model DeviceGroup {
id String @id @default(uuid())
name String @unique
devices Device[]
}
model Location {
id String @id @default(uuid())
name String @unique
devices Device[]
}
model Device {
inventoryNumber String @id
name String
manufacturer String
model String
serialNumber String?
productNumber String?
comment String?
ipv4Address String? @unique
ipv6Address String? @unique
macAddress String? @unique
username String? @unique
passwordHash String? @unique
groupId String?
locationId String?
loanedTo String?
loanedFrom DateTime?
loanedUntil DateTime?
loanComment String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
createdById String?
updatedById String?
// 🔹 Self-Relation Hauptgerät/Zubehör
parentDeviceId String?
parentDevice Device? @relation(name: "DeviceAccessories", fields: [parentDeviceId], references: [inventoryNumber], onDelete: SetNull)
accessories Device[] @relation("DeviceAccessories")
createdBy User? @relation("DeviceCreatedBy", fields: [createdById], references: [nwkennung])
updatedBy User? @relation("DeviceUpdatedBy", fields: [updatedById], references: [nwkennung])
group DeviceGroup? @relation(fields: [groupId], references: [id])
location Location? @relation(fields: [locationId], references: [id])
history DeviceHistory[]
tags Tag[] @relation("DeviceToTag")
@@index([inventoryNumber])
@@index([groupId])
@@index([locationId])
@@index([parentDeviceId])
}
model Tag {
id String @id @default(uuid())
name String @unique
devices Device[] @relation("DeviceToTag")
}
model DeviceHistory {
id String @id @default(uuid())
deviceId String?
changeType DeviceChangeType
snapshot Json
changedAt DateTime @default(now())
changedById String?
changedBy User? @relation("DeviceHistoryChangedBy", fields: [changedById], references: [nwkennung])
device Device? @relation(fields: [deviceId], references: [inventoryNumber], onDelete: SetNull)
}
enum DeviceChangeType {
CREATED
UPDATED
DELETED
}