openstellaris/prisma/schema.prisma

176 lines
3.9 KiB
Plaintext

generator client {
provider = "cargo prisma"
output = "../common/src/prisma.rs"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Universe {
id Int @id @default(autoincrement())
config Json
players Player[]
empires Empire[]
starSystems StarSystem[]
planets Planet[]
fleets Fleet[]
hyperlanes StarSystemEdges[]
starbases Starbase[]
}
model User {
id String @id @default(uuid())
email String? @unique
emailVerified DateTime?
name String
image String?
accounts Account[]
sessions Session[]
}
model Player {
id String @id @default(uuid())
universeId Int
universe Universe @relation(fields: [universeId], references: [id])
empire Empire?
}
model Empire {
id Int @default(autoincrement())
universeId Int
universe Universe @relation(fields: [universeId], references: [id])
name String
color String
// capitalSystemId Int
// capitalSystem StarSystem @relation("capital", fields: [universeId, capitalSystemId], references: [universeId, index])
playerId String? @unique
player Player? @relation(fields: [playerId], references: [id])
starSystems StarSystem[] @relation("owner")
resources Json
@@id([universeId, id])
}
model StarSystem {
index Int
universeId Int
universe Universe @relation(fields: [universeId], references: [id])
coordX Float
coordY Float
inbound StarSystemEdges[] @relation("inbound")
outbound StarSystemEdges[] @relation("outbound")
ownedByEmpireId Int?
ownedByEmpire Empire? @relation("owner", fields: [universeId, ownedByEmpireId], references: [universeId, id])
planets Planet[]
starbase Starbase?
@@id([universeId, index])
}
model StarSystemEdges {
universeId Int
universe Universe @relation(fields: [universeId], references: [id])
fromSystemId Int
from StarSystem @relation(fields: [universeId, fromSystemId], references: [universeId, index], name: "outbound")
toSystemId Int
to StarSystem @relation(fields: [universeId, toSystemId], references: [universeId, index], name: "inbound")
@@id([universeId, fromSystemId, toSystemId])
}
model Starbase {
id Int @default(autoincrement())
universeId Int
universe Universe @relation(fields: [universeId], references: [id])
starSystemId Int
starSystem StarSystem @relation(fields: [universeId, starSystemId], references: [universeId, index])
@@id([universeId, id])
@@unique([universeId, starSystemId])
}
model Planet {
id Int @default(autoincrement())
universeId Int
universe Universe @relation(fields: [universeId], references: [id])
buildings Json
surroundingStarSystemId Int
surroundingStarSystem StarSystem @relation(fields: [universeId, surroundingStarSystemId], references: [universeId, index])
@@id([universeId, id])
}
model Fleet {
id String @id @default(uuid())
universeId Int
universe Universe @relation(fields: [universeId], references: [id])
}
model Technology {
name String @id
description String
effects Json
}
// SvelteKit Auth
model Account {
id String @id @default(cuid())
userId String
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: [userId], references: [id], onDelete: Cascade)
@@unique([provider, providerAccountId])
}
model Session {
id String @id @default(cuid())
sessionToken String @unique
userId String
expires DateTime
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model VerificationToken {
identifier String
token String @unique
expires DateTime
@@unique([identifier, token])
}