233 lines
7.8 KiB
Plaintext
233 lines
7.8 KiB
Plaintext
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 BigInt @default(0)
|
|
osuBalance Int @default(0)
|
|
prBalance Int @default(0)
|
|
lastAdAt DateTime?
|
|
role String @default("user")
|
|
avatarUrl String @default("")
|
|
bio String @default("")
|
|
autoSellEnabled Boolean @default(false)
|
|
autoSellThresholdCents BigInt @default(1000)
|
|
prestigeCount Int @default(0)
|
|
prestigeChanceBonus Int @default(0)
|
|
prestigeGainBonus Int @default(0)
|
|
prestigeKeyOpenReduction Int @default(0)
|
|
prestigeStartBonus Int @default(0)
|
|
prestigeAdBonus Int @default(0)
|
|
prestigeAdCooldownReduction Int @default(0)
|
|
prestigeWearBonus Int @default(0)
|
|
prestigePrBonus Int @default(0)
|
|
prestigeShopDiscount Int @default(0)
|
|
prestigeStartOsu Int @default(0)
|
|
prestigeDropValueBonus Int @default(0)
|
|
prestigeOpenBonus Int @default(0)
|
|
lastConnection DateTime?
|
|
playTimeSeconds BigInt @default(0)
|
|
createdAt DateTime @default(now())
|
|
inventory InventoryItem[]
|
|
transactions Transaction[]
|
|
jackpotWins JackpotRound[] @relation("JackpotWinner")
|
|
jackpotDeposits JackpotDeposit[]
|
|
duelRoomsCreated DuelRoom[] @relation("DuelCreator")
|
|
duelWins DuelRoom[] @relation("DuelWinner")
|
|
duelDeposits DuelDeposit[]
|
|
caseKeyProgress CaseKeyProgress[]
|
|
catalogEntries CatalogEntry[]
|
|
prestigeLogs PrestigeLog[]
|
|
achievements UserAchievement[]
|
|
}
|
|
|
|
model Case {
|
|
id Int @id @default(autoincrement())
|
|
name String
|
|
imageUrl String @default("")
|
|
price BigInt
|
|
active Boolean @default(true)
|
|
createdAt DateTime @default(now())
|
|
items CaseItem[]
|
|
keyProgress CaseKeyProgress[]
|
|
catalogEntries CatalogEntry[]
|
|
}
|
|
|
|
model Category {
|
|
id Int @id @default(autoincrement())
|
|
name String @unique
|
|
createdAt DateTime @default(now())
|
|
}
|
|
|
|
model Item {
|
|
id Int @id @default(autoincrement())
|
|
name String
|
|
imageUrl String @default("")
|
|
rarity String
|
|
category String @default("Misc")
|
|
marketValue BigInt
|
|
createdAt DateTime @default(now())
|
|
cases CaseItem[]
|
|
inventory InventoryItem[]
|
|
catalogEntries CatalogEntry[]
|
|
}
|
|
|
|
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)
|
|
floatValue Float @default(0.265)
|
|
wear String @default("Field-Tested")
|
|
paintSeed Int @default(0)
|
|
valueCents BigInt @default(0)
|
|
favorite 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 BigInt
|
|
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 BigInt
|
|
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 BigInt @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 BigInt
|
|
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])
|
|
}
|
|
|
|
model CaseKeyProgress {
|
|
id Int @id @default(autoincrement())
|
|
userId Int
|
|
caseId Int
|
|
keys Int @default(1)
|
|
opensSinceLastKey Int @default(0)
|
|
totalOpens Int @default(0)
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
case Case @relation(fields: [caseId], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([userId, caseId])
|
|
}
|
|
|
|
model CatalogEntry {
|
|
id Int @id @default(autoincrement())
|
|
userId Int
|
|
caseId Int
|
|
itemId Int
|
|
filledAt DateTime @default(now())
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
case Case @relation(fields: [caseId], references: [id], onDelete: Cascade)
|
|
item Item @relation(fields: [itemId], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([userId, caseId, itemId])
|
|
}
|
|
|
|
model PrestigeLog {
|
|
id Int @id @default(autoincrement())
|
|
userId Int
|
|
choice String
|
|
prGranted Int @default(0)
|
|
createdAt DateTime @default(now())
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
}
|
|
|
|
model Achievement {
|
|
id Int @id @default(autoincrement())
|
|
key String @unique
|
|
name String
|
|
description String
|
|
icon String @default("")
|
|
sortOrder Int @default(0)
|
|
createdAt DateTime @default(now())
|
|
unlocks UserAchievement[]
|
|
}
|
|
|
|
model UserAchievement {
|
|
id Int @id @default(autoincrement())
|
|
userId Int
|
|
achievementId Int
|
|
unlockedAt DateTime @default(now())
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
achievement Achievement @relation(fields: [achievementId], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([userId, achievementId])
|
|
}
|