import { pgTable, text, timestamp, jsonb, } from 'drizzle-orm/pg-core'; import { relations, type InferSelectModel, type InferInsertModel } from 'drizzle-orm'; export type GameSettings = InferSelectModel; export type GameSettingsInsert = InferInsertModel; export interface LevelingConfig { base: number; exponent: number; chat: { cooldownMs: number; minXp: number; maxXp: number; }; } export interface EconomyConfig { daily: { amount: string; streakBonus: string; weeklyBonus: string; cooldownMs: number; }; transfers: { allowSelfTransfer: boolean; minAmount: string; }; exam: { multMin: number; multMax: number; }; } export interface InventoryConfig { maxStackSize: string; maxSlots: number; } export interface LootdropConfig { activityWindowMs: number; minMessages: number; spawnChance: number; cooldownMs: number; reward: { min: number; max: number; currency: string; }; } export interface TriviaConfig { entryFee: string; rewardMultiplier: number; timeoutSeconds: number; cooldownMs: number; categories: number[]; difficulty: 'easy' | 'medium' | 'hard' | 'random'; } export interface ModerationConfig { prune: { maxAmount: number; confirmThreshold: number; batchSize: number; batchDelayMs: number; }; } export const gameSettings = pgTable('game_settings', { id: text('id').primaryKey().default('default'), leveling: jsonb('leveling').$type().notNull(), economy: jsonb('economy').$type().notNull(), inventory: jsonb('inventory').$type().notNull(), lootdrop: jsonb('lootdrop').$type().notNull(), trivia: jsonb('trivia').$type().notNull(), moderation: jsonb('moderation').$type().notNull(), commands: jsonb('commands').$type>().default({}), system: jsonb('system').$type>().default({}), createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(), }); export const gameSettingsRelations = relations(gameSettings, () => ({}));