generator client { provider = "prisma-client-js" } datasource db { provider = "sqlite" url = env("DATABASE_URL") } model User { id Int @id @default(autoincrement()) username String @unique passwordHash String balance Int @default(0) osuBalance Int @default(0) lastAdAt DateTime? role String @default("user") avatarUrl String @default("") bio String @default("") createdAt DateTime @default(now()) inventory InventoryItem[] transactions Transaction[] jackpotWins JackpotRound[] @relation("JackpotWinner") jackpotDeposits JackpotDeposit[] duelRoomsCreated DuelRoom[] @relation("DuelCreator") duelWins DuelRoom[] @relation("DuelWinner") duelDeposits DuelDeposit[] } model Case { id Int @id @default(autoincrement()) name String imageUrl String @default("") price Int active Boolean @default(true) createdAt DateTime @default(now()) items CaseItem[] } model Item { id Int @id @default(autoincrement()) name String imageUrl String @default("") rarity String marketValue Int createdAt DateTime @default(now()) cases CaseItem[] inventory InventoryItem[] } model CaseItem { id Int @id @default(autoincrement()) caseId Int itemId Int dropRate Float case Case @relation(fields: [caseId], references: [id], onDelete: Cascade) item Item @relation(fields: [itemId], references: [id], onDelete: Cascade) @@unique([caseId, itemId]) } model InventoryItem { id Int @id @default(autoincrement()) userId Int itemId Int locked Boolean @default(false) obtainedAt DateTime @default(now()) user User @relation(fields: [userId], references: [id], onDelete: Cascade) item Item @relation(fields: [itemId], references: [id], onDelete: Cascade) jackpotDeposits JackpotDeposit[] duelDeposits DuelDeposit[] } model Transaction { id Int @id @default(autoincrement()) userId Int type String amount Int meta String @default("{}") createdAt DateTime @default(now()) user User @relation(fields: [userId], references: [id], onDelete: Cascade) } model JackpotRound { id Int @id @default(autoincrement()) status String @default("open") endsAt DateTime winnerUserId Int? createdAt DateTime @default(now()) resolvedAt DateTime? winner User? @relation("JackpotWinner", fields: [winnerUserId], references: [id]) deposits JackpotDeposit[] } model JackpotDeposit { id Int @id @default(autoincrement()) roundId Int userId Int inventoryItemId Int valueCents Int createdAt DateTime @default(now()) round JackpotRound @relation(fields: [roundId], references: [id], onDelete: Cascade) user User @relation(fields: [userId], references: [id], onDelete: Cascade) inventoryItem InventoryItem @relation(fields: [inventoryItemId], references: [id], onDelete: Cascade) @@unique([roundId, inventoryItemId]) } model DuelRoom { id Int @id @default(autoincrement()) creatorId Int status String @default("open") maxPlayers Int maxItemsPerPlayer Int minItemValue Int @default(0) minPlayersToStart Int @default(2) winnerUserId Int? createdAt DateTime @default(now()) startedAt DateTime? resolvedAt DateTime? creator User @relation("DuelCreator", fields: [creatorId], references: [id], onDelete: Cascade) winner User? @relation("DuelWinner", fields: [winnerUserId], references: [id]) deposits DuelDeposit[] } model DuelDeposit { id Int @id @default(autoincrement()) roomId Int userId Int inventoryItemId Int valueCents Int createdAt DateTime @default(now()) room DuelRoom @relation(fields: [roomId], references: [id], onDelete: Cascade) user User @relation(fields: [userId], references: [id], onDelete: Cascade) inventoryItem InventoryItem @relation(fields: [inventoryItemId], references: [id], onDelete: Cascade) @@unique([roomId, inventoryItemId]) }