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