439 lines
15 KiB
Plaintext
439 lines
15 KiB
Plaintext
// This is your Prisma schema file,
|
||
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
||
|
||
generator client {
|
||
provider = "prisma-client-js"
|
||
}
|
||
|
||
datasource db {
|
||
provider = "postgresql"
|
||
url = env("POSTGRES_URL")
|
||
}
|
||
|
||
model User {
|
||
id Int @id @default(autoincrement())
|
||
chipId String @unique
|
||
accessCode String
|
||
cars Car[]
|
||
carOrder Int[]
|
||
items UserItem[]
|
||
tutorials Boolean[]
|
||
userBanned Boolean @default(false)
|
||
bookmarks Int[]
|
||
ScratchSheet ScratchSheet[]
|
||
currentSheet Int @default(1)
|
||
lastScratched Int @default(0) // Timestamp
|
||
}
|
||
|
||
model ScratchSheet {
|
||
id Int @id @default(autoincrement())
|
||
User User @relation(fields: [userId], references: [id])
|
||
userId Int
|
||
sheetNo Int // Player's sheet number (i.e. first sheet)
|
||
squares ScratchSquare[]
|
||
}
|
||
|
||
model ScratchSquare {
|
||
id Int @id @default(autoincrement())
|
||
Sheet ScratchSheet @relation(fields: [sheetId], references: [id])
|
||
sheetId Int
|
||
category Int
|
||
itemId Int
|
||
earned Boolean
|
||
}
|
||
|
||
model UserItem {
|
||
userItemId Int @id @default(autoincrement())
|
||
category Int
|
||
itemId Int
|
||
User User @relation(fields: [userId], references: [id])
|
||
userId Int
|
||
type Int @default(0)
|
||
earnedAt Int @default(0)
|
||
}
|
||
|
||
model Car {
|
||
user User @relation(fields: [userId], references: [id])
|
||
userId Int
|
||
|
||
// This is the Car object itself
|
||
carId Int @id @default(autoincrement())
|
||
name String
|
||
manufacturer Int
|
||
model Int
|
||
visualModel Int
|
||
customColor Int @default(0)
|
||
defaultColor Int
|
||
wheel Int @default(0)
|
||
wheelColor Int @default(0)
|
||
aero Int @default(0)
|
||
bonnet Int @default(0)
|
||
wing Int @default(0)
|
||
mirror Int @default(0)
|
||
neon Int @default(0)
|
||
trunk Int @default(0)
|
||
plate Int @default(0)
|
||
plateColor Int @default(0)
|
||
plateNumber Int @default(0)
|
||
tunePower Int @default(0)
|
||
tuneHandling Int @default(0)
|
||
title String @default("New Car")
|
||
level Int @default(0)
|
||
windowSticker Boolean @default(false)
|
||
windowStickerString String @default("WANGAN")
|
||
windowStickerFont Int @default(0)
|
||
windowDecoration Int @default(0)
|
||
rivalMarker Int @default(0)
|
||
lastPlayedAt Int @default(0)
|
||
aura Int @default(0)
|
||
regionId Int @default(0)
|
||
country String @default("JPN")
|
||
|
||
// This is more data about the car
|
||
tuningPoints Int @default(0)
|
||
odometer Int @default(0)
|
||
playCount Int @default(0)
|
||
earnedCustomColor Boolean @default(false)
|
||
carSettingsDbId Int @unique
|
||
settings CarSettings @relation(fields: [carSettingsDbId], references: [dbId])
|
||
|
||
auraMotif Int @default(0)
|
||
vsPlayCount Int @default(0)
|
||
vsBurstCount Int @default(0)
|
||
vsStarCount Int @default(0)
|
||
vsStarCountMax Int @default(0)
|
||
vsCoolOrWild Int @default(0)
|
||
vsSmoothOrRough Int @default(0)
|
||
vsTripleStarMedals Int @default(0)
|
||
vsDoubleStarMedals Int @default(0)
|
||
vsSingleStarMedals Int @default(0)
|
||
vsPlainMedals Int @default(0)
|
||
|
||
ghostLevel Int @default(1)
|
||
rgPlayCount Int @default(0)
|
||
rgWinCount Int @default(0)
|
||
rgTrophy Int @default(0)
|
||
rgScore Int @default(0)
|
||
rgStamp Int @default(1)
|
||
rgAcquireAllCrowns Boolean @default(false)
|
||
rgRegionMapScore Int[]
|
||
stampSheetCount Int @default(0)
|
||
stampSheet Int[]
|
||
|
||
dressupLevel Int @default(0)
|
||
dressupPoint Int @default(0)
|
||
|
||
stPlayCount Int @default(0)
|
||
stClearBits Int @default(0)
|
||
stClearDivCount Int @default(0)
|
||
stClearCount Int @default(0)
|
||
stLoseBits BigInt @default(0)
|
||
stConsecutiveWins Int @default(0)
|
||
stConsecutiveWinsMax Int @default(0)
|
||
stCompleted100Episodes Boolean @default(false)
|
||
|
||
lastPlayedPlaceId Int?
|
||
lastPlayedPlace PlaceList? @relation(fields: [lastPlayedPlaceId], references: [id])
|
||
|
||
items CarItem[]
|
||
carGTWingDbId Int @unique
|
||
gtWing CarGTWing @relation(fields: [carGTWingDbId], references: [dbId])
|
||
carStateDbId Int @unique
|
||
state CarState @relation(fields: [carStateDbId], references: [dbId])
|
||
TimeAttackRecord TimeAttackRecord[]
|
||
CarCrown CarCrown[]
|
||
GhostTrail GhostTrail[]
|
||
GhostBattleRecord GhostBattleRecord[]
|
||
CarPathandTuning CarPathandTuning[]
|
||
OCMGhostBattleRecord OCMGhostBattleRecord[]
|
||
OCMTally OCMTally[]
|
||
OCMTop1Ghost OCMTop1Ghost[]
|
||
OCMGhostTrail OCMGhostTrail[]
|
||
OCMPlayRecord OCMPlayRecord[]
|
||
GhostRegisteredFromTerminal GhostRegisteredFromTerminal[]
|
||
CarStampTarget CarStampTarget[]
|
||
CarChallenger CarChallenger[]
|
||
}
|
||
|
||
model CarGTWing {
|
||
dbId Int @id @default(autoincrement())
|
||
car Car?
|
||
|
||
pillar Int @default(0)
|
||
pillarMaterial Int @default(0)
|
||
mainWing Int @default(0)
|
||
mainWingColor Int @default(0)
|
||
wingTip Int @default(0)
|
||
material Int @default(0)
|
||
}
|
||
|
||
model CarItem {
|
||
dbId Int @id @default(autoincrement())
|
||
Car Car @relation(fields: [carId], references: [carId])
|
||
carId Int
|
||
category Int
|
||
itemId Int
|
||
amount Int
|
||
}
|
||
|
||
model CarSettings {
|
||
dbId Int @id @default(autoincrement())
|
||
car Car?
|
||
|
||
view Boolean @default(true)
|
||
transmission Boolean @default(false)
|
||
retire Boolean @default(false)
|
||
meter Int @default(0)
|
||
navigationMap Boolean @default(true)
|
||
volume Int @default(2)
|
||
bgm Int @default(0)
|
||
nameplate Int @default(0)
|
||
nameplateColor Int @default(0)
|
||
terminalBackground Int @default(0)
|
||
}
|
||
|
||
model CarState {
|
||
dbId Int @id @default(autoincrement())
|
||
car Car?
|
||
|
||
hasOpponentGhost Boolean @default(false)
|
||
eventJoined Boolean @default(false)
|
||
transferred Boolean @default(false)
|
||
toBeDeleted Boolean @default(false)
|
||
competitionState Int @default(0)
|
||
}
|
||
|
||
model CarPathandTuning {
|
||
dbId Int @id @default(autoincrement())
|
||
car Car @relation(fields: [carId], references: [carId])
|
||
carId Int
|
||
area Int @default(0)
|
||
ramp Int @default(0)
|
||
path Int @default(0)
|
||
tunePower Int @default(17)
|
||
tuneHandling Int @default(17)
|
||
lastPlayedAt Int @default(0)
|
||
}
|
||
|
||
model CarCrown {
|
||
dbId Int @id @default(autoincrement())
|
||
car Car @relation(fields: [carId], references: [carId])
|
||
carId Int
|
||
area Int @unique
|
||
ramp Int
|
||
path Int
|
||
playedAt Int @default(0)
|
||
tunePower Int
|
||
tuneHandling Int
|
||
}
|
||
|
||
model TimeAttackRecord {
|
||
dbId Int @id @default(autoincrement())
|
||
|
||
car Car @relation(fields: [carId], references: [carId])
|
||
carId Int
|
||
|
||
model Int // Car model, literally just the `model` field from Car
|
||
time Int
|
||
course Int
|
||
isMorning Boolean
|
||
section1Time Int @map("section1Time")
|
||
section2Time Int @map("section2Time")
|
||
section3Time Int @map("section3Time")
|
||
section4Time Int @map("section4Time")
|
||
section5Time Int? @map("section5Time")
|
||
section6Time Int? @map("section6Time")
|
||
section7Time Int? @map("section7Time")
|
||
tunePower Int @default(0) // Car Power
|
||
tuneHandling Int @default(0) // Car Handling
|
||
}
|
||
|
||
model GhostTrail {
|
||
dbId Int @id @default(autoincrement())
|
||
car Car @relation(fields: [carId], references: [carId])
|
||
carId Int
|
||
area Int
|
||
ramp Int
|
||
path Int
|
||
trail Bytes
|
||
time Int?
|
||
driveData Bytes? @db.ByteA
|
||
driveDMergeSerial Int?
|
||
trendBinaryByUser Bytes? @db.ByteA
|
||
byUserMergeSerial Int?
|
||
trendBinaryByArea Bytes? @db.ByteA
|
||
byAreaMergeSerial Int?
|
||
trendBinaryByCar Bytes? @db.ByteA
|
||
byCarMergeSerial Int?
|
||
playedAt Int @default(0)
|
||
tunePower Int @default(0)
|
||
tuneHandling Int @default(0)
|
||
crownBattle Boolean @default(false)
|
||
}
|
||
|
||
model GhostBattleRecord {
|
||
dbId Int @id @default(autoincrement())
|
||
car Car @relation(fields: [carId], references: [carId])
|
||
carId Int
|
||
tunePower Int @default(0)
|
||
tuneHandling Int @default(0)
|
||
opponent1CarId Int
|
||
opponent1Result Int
|
||
opponent1TunePower Int
|
||
opponent1TuneHandling Int
|
||
opponent2CarId Int?
|
||
opponent2Result Int?
|
||
opponent2TunePower Int?
|
||
opponent2TuneHandling Int?
|
||
opponent3CarId Int?
|
||
opponent3Result Int?
|
||
opponent3TunePower Int?
|
||
opponent3TuneHandling Int?
|
||
area Int @default(0)
|
||
playedAt Int @default(0)
|
||
playedShopName String @default("Bayshore")
|
||
}
|
||
|
||
model OCMEvent {
|
||
dbId Int @id @default(autoincrement())
|
||
competitionId Int
|
||
qualifyingPeriodStartAt Int
|
||
qualifyingPeriodCloseAt Int
|
||
competitionStartAt Int
|
||
competitionCloseAt Int
|
||
competitionEndAt Int
|
||
lengthOfPeriod Int
|
||
lengthOfInterval Int
|
||
area Int @default(0)
|
||
minigamePatternId Int @default(0)
|
||
|
||
OCMPeriod OCMPeriod[]
|
||
}
|
||
|
||
model OCMPlayRecord {
|
||
dbId Int @id @default(autoincrement())
|
||
car Car @relation(fields: [carId], references: [carId])
|
||
carId Int
|
||
competitionId Int
|
||
periodId Int
|
||
brakingPoint Int?
|
||
playedAt Int @default(0)
|
||
}
|
||
|
||
model OCMTop1Ghost {
|
||
dbId Int @id @default(autoincrement())
|
||
car Car @relation(fields: [carId], references: [carId])
|
||
carId Int
|
||
competitionId Int
|
||
periodId Int
|
||
result Int
|
||
tunePower Int @default(0)
|
||
tuneHandling Int @default(0)
|
||
}
|
||
|
||
model OCMTop1GhostTrail {
|
||
dbId Int @id @default(autoincrement())
|
||
carId Int
|
||
area Int
|
||
ramp Int
|
||
path Int
|
||
trail Bytes
|
||
competitionId Int
|
||
periodId Int
|
||
playedAt Int @default(0)
|
||
tunePower Int @default(0)
|
||
tuneHandling Int @default(0)
|
||
ocmMainDraw Boolean @default(false)
|
||
}
|
||
|
||
model OCMTally {
|
||
dbId Int @id @default(autoincrement())
|
||
car Car @relation(fields: [carId], references: [carId])
|
||
carId Int
|
||
competitionId Int
|
||
periodId Int
|
||
result Int
|
||
tunePower Int @default(0)
|
||
tuneHandling Int @default(0)
|
||
}
|
||
|
||
model OCMGhostBattleRecord {
|
||
dbId Int @id @default(autoincrement())
|
||
car Car @relation(fields: [carId], references: [carId])
|
||
carId Int
|
||
tunePower Int @default(0)
|
||
tuneHandling Int @default(0)
|
||
competitionId Int
|
||
periodId Int
|
||
result Int
|
||
area Int @default(0)
|
||
playedAt Int @default(0)
|
||
playedShopName String @default("Bayshore")
|
||
ocmMainDraw Boolean @default(false)
|
||
}
|
||
|
||
model OCMGhostTrail {
|
||
dbId Int @id @default(autoincrement())
|
||
car Car @relation(fields: [carId], references: [carId])
|
||
carId Int
|
||
area Int
|
||
ramp Int
|
||
path Int
|
||
trail Bytes
|
||
competitionId Int
|
||
periodId Int
|
||
playedAt Int @default(0)
|
||
tunePower Int @default(0)
|
||
tuneHandling Int @default(0)
|
||
ocmMainDraw Boolean @default(false)
|
||
}
|
||
|
||
model OCMPeriod {
|
||
dbId Int @id @default(autoincrement())
|
||
OCMEvent OCMEvent @relation(fields: [competitionDbId], references: [dbId])
|
||
competitionDbId Int
|
||
competitionId Int
|
||
periodId Int
|
||
startAt Int
|
||
closeAt Int
|
||
}
|
||
|
||
model GhostRegisteredFromTerminal {
|
||
dbId Int @id @default(autoincrement())
|
||
car Car @relation(fields: [carId], references: [carId])
|
||
carId Int
|
||
competitionId Int?
|
||
opponentCarId Int
|
||
}
|
||
|
||
model CarChallenger {
|
||
id Int @id @default(autoincrement())
|
||
challengerCar Car @relation(fields: [challengerCarId], references: [carId])
|
||
|
||
carId Int
|
||
challengerCarId Int
|
||
stamp Int
|
||
result Int
|
||
area Int
|
||
lastPlayedAt Int @default(0)
|
||
}
|
||
|
||
model CarStampTarget {
|
||
id Int @id @default(autoincrement())
|
||
stampTargetCar Car @relation(fields: [stampTargetCarId], references: [carId])
|
||
carId Int
|
||
stampTargetCarId Int
|
||
returnCount Int
|
||
locked Boolean
|
||
recommended Boolean
|
||
}
|
||
|
||
model PlaceList {
|
||
id Int @id @default(autoincrement())
|
||
car Car[]
|
||
|
||
placeId String
|
||
regionId Int
|
||
shopName String
|
||
country String
|
||
} |