200 lines
7.1 KiB
Plaintext
Executable File
200 lines
7.1 KiB
Plaintext
Executable File
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = "postgresql://roggio:roggio_secret@192.168.20.252:5432/roggiodb"
|
|
}
|
|
|
|
model Unit {
|
|
id String @id @default(uuid())
|
|
name String @db.VarChar(255)
|
|
description String?
|
|
parentId String?
|
|
traits Json @default("{}")
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
parent Unit? @relation("UnitHierarchy", fields: [parentId], references: [id])
|
|
children Unit[] @relation("UnitHierarchy")
|
|
}
|
|
|
|
model Person {
|
|
id String @id @default(uuid())
|
|
firstName String @db.VarChar(100)
|
|
lastName String @db.VarChar(100)
|
|
email String? @unique @db.VarChar(255)
|
|
phone String? @db.VarChar(50)
|
|
ssoId String? @unique @db.VarChar(255)
|
|
traits Json @default("{}")
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
groupMemberships GroupMembership[]
|
|
}
|
|
|
|
model Group {
|
|
id String @id @default(uuid())
|
|
name String @db.VarChar(255)
|
|
traits Json @default("{}")
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
members GroupMembership[]
|
|
}
|
|
|
|
model GroupMembership {
|
|
id String @id @default(uuid())
|
|
personId String
|
|
groupId String
|
|
role String @db.VarChar(50)
|
|
group Group @relation(fields: [groupId], references: [id])
|
|
person Person @relation(fields: [personId], references: [id])
|
|
|
|
@@unique([personId, groupId, role])
|
|
}
|
|
|
|
model Event {
|
|
id String @id @default(uuid())
|
|
type String @db.VarChar(50)
|
|
status String @db.VarChar(50)
|
|
startTime DateTime
|
|
endTime DateTime?
|
|
targetUnitId String?
|
|
targetGroupId String?
|
|
targetPersonId String?
|
|
payload Json @default("{}")
|
|
parentEventId String?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
|
|
model cities {
|
|
id BigInt @id @default(autoincrement())
|
|
name String @db.VarChar(255)
|
|
state_id BigInt
|
|
state_code String @db.VarChar(255)
|
|
country_id BigInt
|
|
country_code String @db.Char(2)
|
|
type String? @db.VarChar(191)
|
|
level Int?
|
|
parent_id BigInt?
|
|
latitude Decimal @db.Decimal(10, 8)
|
|
longitude Decimal @db.Decimal(11, 8)
|
|
native String? @db.VarChar(255)
|
|
population BigInt?
|
|
timezone String? @db.VarChar(255)
|
|
translations String?
|
|
created_at DateTime @default(dbgenerated("'2014-01-01 12:01:01'::timestamp without time zone")) @db.Timestamp(6)
|
|
updated_at DateTime @default(now()) @db.Timestamp(6)
|
|
flag Int @default(1) @db.SmallInt
|
|
wikiDataId String? @db.VarChar(255)
|
|
countries countries @relation(fields: [country_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
|
states states @relation(fields: [state_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
|
|
|
@@index([country_id])
|
|
@@index([state_id])
|
|
}
|
|
|
|
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
|
|
model countries {
|
|
id BigInt @id @default(autoincrement())
|
|
name String @db.VarChar(100)
|
|
iso3 String? @db.Char(3)
|
|
numeric_code String? @db.Char(3)
|
|
iso2 String? @db.Char(2)
|
|
phonecode String? @db.VarChar(255)
|
|
capital String? @db.VarChar(255)
|
|
currency String? @db.VarChar(255)
|
|
currency_name String? @db.VarChar(255)
|
|
currency_symbol String? @db.VarChar(255)
|
|
tld String? @db.VarChar(255)
|
|
native String? @db.VarChar(255)
|
|
population BigInt?
|
|
gdp BigInt?
|
|
region String? @db.VarChar(255)
|
|
region_id BigInt?
|
|
subregion String? @db.VarChar(255)
|
|
subregion_id BigInt?
|
|
nationality String? @db.VarChar(255)
|
|
area_sq_km Float?
|
|
postal_code_format String? @db.VarChar(255)
|
|
postal_code_regex String? @db.VarChar(255)
|
|
timezones String?
|
|
translations String?
|
|
latitude Decimal? @db.Decimal(10, 8)
|
|
longitude Decimal? @db.Decimal(11, 8)
|
|
emoji String? @db.VarChar(191)
|
|
emojiU String? @db.VarChar(191)
|
|
created_at DateTime? @db.Timestamp(6)
|
|
updated_at DateTime @default(now()) @db.Timestamp(6)
|
|
flag Int @default(1) @db.SmallInt
|
|
wikiDataId String? @db.VarChar(255)
|
|
cities cities[]
|
|
states states[]
|
|
|
|
@@index([region_id])
|
|
@@index([subregion_id])
|
|
}
|
|
|
|
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
|
|
model states {
|
|
id BigInt @id @default(autoincrement())
|
|
name String @db.VarChar(255)
|
|
country_id BigInt
|
|
country_code String @db.Char(2)
|
|
fips_code String? @db.VarChar(255)
|
|
iso2 String? @db.VarChar(255)
|
|
iso3166_2 String? @db.VarChar(10)
|
|
type String? @db.VarChar(191)
|
|
level Int?
|
|
parent_id BigInt?
|
|
native String? @db.VarChar(255)
|
|
latitude Decimal? @db.Decimal(10, 8)
|
|
longitude Decimal? @db.Decimal(11, 8)
|
|
timezone String? @db.VarChar(255)
|
|
translations String?
|
|
created_at DateTime? @db.Timestamp(6)
|
|
updated_at DateTime @default(now()) @db.Timestamp(6)
|
|
flag Int @default(1) @db.SmallInt
|
|
wikiDataId String? @db.VarChar(255)
|
|
population String? @db.VarChar(255)
|
|
cities cities[]
|
|
countries countries @relation(fields: [country_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
|
|
|
@@index([country_id])
|
|
}
|
|
|
|
// ============================================================================
|
|
// ADRESSEN (Shared Locations)
|
|
// ============================================================================
|
|
model Address {
|
|
id String @id @default(uuid())
|
|
street String @db.VarChar(255)
|
|
streetNo String? @db.VarChar(50)
|
|
postalCode String? @db.VarChar(50)
|
|
|
|
cityId Int?
|
|
stateId Int?
|
|
countryId Int?
|
|
|
|
rawCity String? @db.VarChar(255)
|
|
rawCountry String? @db.VarChar(255)
|
|
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
// ============================================================================
|
|
// DER VAULT (Logisch getrennt - Später On-Premise)
|
|
// ============================================================================
|
|
model VaultData {
|
|
id String @id @default(uuid())
|
|
entityType String @db.VarChar(50)
|
|
entityId String
|
|
|
|
// Die sensiblen Daten (sollten auf App-Ebene verschlüsselt werden)
|
|
secureData String @db.Text
|
|
|
|
createdAt DateTime @default(now())
|
|
}
|