Files
Minikura/packages/db/prisma/schema.prisma
T

234 lines
7.0 KiB
Plaintext
Raw Normal View History

2024-10-01 19:10:05 +07:00
generator client {
2025-05-12 12:37:35 +07:00
provider = "prisma-client-js"
2026-02-13 15:52:13 +07:00
output = "../src/generated/prisma"
2024-10-01 19:10:05 +07:00
}
datasource db {
provider = "postgresql"
}
2026-02-13 15:52:13 +07:00
model User {
id String @id
name String
email String @unique
emailVerified Boolean @default(false) @map("email_verified")
image String?
role String @default("user")
isSuspended Boolean @default(false) @map("is_suspended")
suspendedUntil DateTime? @map("suspended_until")
banned Boolean @default(false) @map("banned")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
sessions Session[]
accounts Account[]
@@map("user")
}
model Session {
id String @id
expiresAt DateTime @map("expires_at")
token String @unique
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
ipAddress String? @map("ip_address")
userAgent String? @map("user_agent")
userId String @map("user_id")
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@map("session")
}
model Account {
id String @id
accountId String @map("account_id")
providerId String @map("provider_id")
userId String @map("user_id")
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
accessToken String? @map("access_token")
refreshToken String? @map("refresh_token")
idToken String? @map("id_token")
expiresAt DateTime? @map("expires_at")
password String?
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("account")
}
model Verification {
id String @id
identifier String
value String
expiresAt DateTime @map("expires_at")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("verification")
}
2024-10-01 19:10:05 +07:00
enum ServerType {
STATEFUL
STATELESS
2025-01-02 12:13:39 +07:00
}
2025-05-12 12:37:35 +07:00
enum ReverseProxyServerType {
VELOCITY
BUNGEECORD
}
2026-02-13 15:52:13 +07:00
enum ServiceType {
CLUSTER_IP
NODE_PORT
LOAD_BALANCER
}
enum GameMode {
SURVIVAL
CREATIVE
ADVENTURE
SPECTATOR
}
enum ServerDifficulty {
PEACEFUL
EASY
NORMAL
HARD
}
2025-01-02 12:13:39 +07:00
model ReverseProxyServer {
2025-05-12 12:37:35 +07:00
id String @id @default(cuid())
type ReverseProxyServerType
description String?
external_address String
external_port Int
listen_port Int @default(25565)
2026-08-13 02:32:16 +07:00
memory Int @default(512) // MB
cpu_request String? @default("250m")
cpu_limit String? @default("500m")
2026-02-13 15:52:13 +07:00
service_type ServiceType @default(LOAD_BALANCER)
node_port Int?
2025-05-12 12:37:35 +07:00
api_key String @unique
env_variables CustomEnvironmentVariable[] @relation("ReverseProxyServerEnvVars")
created_at DateTime @default(now())
updated_at DateTime @updatedAt
2024-10-01 19:10:05 +07:00
}
2026-02-13 15:52:13 +07:00
enum MinecraftServerJarType {
VANILLA
PAPER
SPIGOT
PURPUR
FABRIC
FORGE
FOLIA
}
2026-08-13 17:37:18 +07:00
enum PluginProvider {
MODRINTH
HANGAR
UPLOAD
}
enum PluginStorageMode {
REMOTE
S3
}
2024-10-01 19:10:05 +07:00
model Server {
2026-02-13 15:52:13 +07:00
id String @id @default(cuid())
type ServerType
description String?
listen_port Int @default(25565)
2026-08-13 02:32:16 +07:00
memory Int @default(2048) // MB limit
memory_request Int @default(1024) // MB request
cpu_request String? @default("500m")
cpu_limit String? @default("2")
2026-02-13 15:52:13 +07:00
service_type ServiceType @default(CLUSTER_IP)
node_port Int?
env_variables CustomEnvironmentVariable[] @relation("ServerEnvVars")
2026-08-13 17:37:18 +07:00
plugins ServerPlugin[]
2026-02-13 15:52:13 +07:00
api_key String @unique
2026-08-13 17:37:18 +07:00
running Boolean @default(true)
2024-10-01 19:10:05 +07:00
2026-02-13 15:52:13 +07:00
jar_type MinecraftServerJarType @default(VANILLA)
2026-08-13 02:32:16 +07:00
minecraft_version String @default("LATEST")
2025-01-02 12:13:39 +07:00
2026-08-13 02:32:16 +07:00
jvm_opts String?
2026-02-13 15:52:13 +07:00
use_aikar_flags Boolean @default(false)
use_meowice_flags Boolean @default(false)
difficulty ServerDifficulty @default(EASY)
game_mode GameMode @default(SURVIVAL)
max_players Int @default(20)
pvp Boolean @default(true)
online_mode Boolean @default(true)
motd String?
level_seed String?
2026-08-13 02:32:16 +07:00
level_type String? // default | flat | largeBiomes | amplified
2026-02-13 15:52:13 +07:00
created_at DateTime @default(now())
updated_at DateTime @updatedAt
2025-01-02 12:13:39 +07:00
}
2025-05-12 12:37:35 +07:00
2026-08-13 17:37:18 +07:00
model PluginArtifact {
id String @id @default(cuid())
provider PluginProvider
provider_project_id String
provider_version_id String
name String
version String
platform String
minecraft_versions String[]
filename String
size Int
sha256 String
source_url String?
storage_mode PluginStorageMode @default(REMOTE)
object_key String?
download_token String @unique @default(cuid())
license String?
description String?
author String?
icon_url String?
project_url String?
categories String[]
provider_updated_at DateTime?
created_at DateTime @default(now())
server_plugins ServerPlugin[]
@@unique([provider, provider_version_id, platform, filename])
@@index([sha256])
}
model ServerPlugin {
id String @id @default(cuid())
server_id String
artifact_id String
enabled Boolean @default(true)
created_at DateTime @default(now())
server Server @relation(fields: [server_id], references: [id], onDelete: Cascade)
artifact PluginArtifact @relation(fields: [artifact_id], references: [id], onDelete: Restrict)
@@unique([server_id, artifact_id])
@@index([server_id, enabled])
}
2025-05-12 12:37:35 +07:00
model CustomEnvironmentVariable {
id String @id @default(cuid())
key String
value String
created_at DateTime @default(now())
updated_at DateTime @updatedAt
server_id String?
server Server? @relation("ServerEnvVars", fields: [server_id], references: [id], onDelete: Cascade)
reverse_proxy_id String?
reverse_proxy_server ReverseProxyServer? @relation("ReverseProxyServerEnvVars", fields: [reverse_proxy_id], references: [id], onDelete: Cascade)
@@unique([key, server_id])
@@unique([key, reverse_proxy_id])
}