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
|
|
|
// Better Auth Models
|
|
|
|
|
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")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Application Models
|
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-02-13 15:52:13 +07:00
|
|
|
memory Int @default(512) // Memory in MB
|
|
|
|
|
cpu_request String? @default("250m") // CPU request, e.g., "250m", "1"
|
|
|
|
|
cpu_limit String? @default("500m") // CPU limit, e.g., "500m", "2"
|
|
|
|
|
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
|
2024-10-01 19:10:05 +07:00
|
|
|
}
|
|
|
|
|
|
2026-02-13 15:52:13 +07:00
|
|
|
model Server {
|
|
|
|
|
id String @id @default(cuid())
|
|
|
|
|
type ServerType
|
|
|
|
|
description String?
|
|
|
|
|
listen_port Int @default(25565)
|
|
|
|
|
memory Int @default(2048) // Memory limit in MB
|
|
|
|
|
memory_request Int @default(1024) // Memory request in MB
|
|
|
|
|
cpu_request String? @default("500m") // CPU request, e.g., "500m", "1"
|
|
|
|
|
cpu_limit String? @default("2") // CPU limit, e.g., "2", "500m"
|
|
|
|
|
service_type ServiceType @default(CLUSTER_IP)
|
|
|
|
|
node_port Int?
|
|
|
|
|
env_variables CustomEnvironmentVariable[] @relation("ServerEnvVars")
|
|
|
|
|
api_key String @unique
|
2025-01-02 12:13:39 +07:00
|
|
|
|
2026-02-13 15:52:13 +07:00
|
|
|
// Minecraft specific configurations
|
|
|
|
|
jar_type MinecraftServerJarType @default(VANILLA)
|
|
|
|
|
minecraft_version String @default("LATEST") // e.g., "LATEST", "1.20.4", "SNAPSHOT"
|
|
|
|
|
|
|
|
|
|
// JVM Options
|
|
|
|
|
jvm_opts String? // Custom JVM options
|
|
|
|
|
use_aikar_flags Boolean @default(false)
|
|
|
|
|
use_meowice_flags Boolean @default(false)
|
|
|
|
|
|
|
|
|
|
// Server Properties (common ones)
|
|
|
|
|
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?
|
|
|
|
|
level_type String? // default, flat, largeBiomes, amplified
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
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])
|
|
|
|
|
}
|