generator client { provider = "prisma-client-js" output = "../src/generated/prisma" } datasource db { provider = "postgresql" } // 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 enum ServerType { STATEFUL STATELESS } enum ReverseProxyServerType { VELOCITY BUNGEECORD } enum ServiceType { CLUSTER_IP NODE_PORT LOAD_BALANCER } enum GameMode { SURVIVAL CREATIVE ADVENTURE SPECTATOR } enum ServerDifficulty { PEACEFUL EASY NORMAL HARD } model ReverseProxyServer { id String @id @default(cuid()) type ReverseProxyServerType description String? external_address String external_port Int listen_port Int @default(25565) 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? api_key String @unique env_variables CustomEnvironmentVariable[] @relation("ReverseProxyServerEnvVars") created_at DateTime @default(now()) updated_at DateTime @updatedAt } enum MinecraftServerJarType { VANILLA PAPER SPIGOT PURPUR FABRIC FORGE FOLIA } 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 // 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 } 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]) }