Files
my_openplace/prisma/schema.prisma
T
2025-10-05 00:58:08 -07:00

207 lines
5.9 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
}
model User {
id Int @id @default(autoincrement())
name String
discord String?
country String
email String? @unique
passwordHash String?
googleId String? @unique
banned Boolean @default(false)
timeoutUntil DateTime @default(now())
needsPhoneVerification Boolean @default(false)
isCustomer Boolean @default(false)
role String @default("user")
pixelsPainted Int @default(0)
droplets Int @default(0)
maxCharges Float @default(20)
currentCharges Float @default(20)
chargesCooldownMs Int @default(30000)
chargesLastUpdatedAt DateTime @default(now())
extraColorsBitmap Int @default(0)
flagsBitmap Bytes?
equippedFlag Int @default(0)
showLastPixel Boolean @default(true)
maxFavoriteLocations Int @default(15)
picture String?
level Float @default(1)
paintsSinceCaptcha Int @default(0)
allianceId Int?
allianceRole String @default("member")
alliance Alliance? @relation(fields: [allianceId], references: [id])
paintedPixels Pixel[]
favoriteLocations FavoriteLocation[]
createdTickets Ticket[] @relation("TicketUser")
reportedTickets Ticket[] @relation("TicketReportedUser")
createdNotes UserNote[] @relation("UserNoteUser")
reportedNotes UserNote[] @relation("UserNoteReportedUser")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Alliance {
id Int @id @default(autoincrement())
name String @unique
description String?
hqLatitude Float?
hqLongitude Float?
pixelsPainted Int @default(0)
members User[]
bannedUsers BannedUser[]
invites AllianceInvite[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model BannedUser {
id Int @id @default(autoincrement())
userId Int
allianceId Int
alliance Alliance @relation(fields: [allianceId], references: [id])
createdAt DateTime @default(now())
@@unique([userId, allianceId])
}
model AllianceInvite {
id String @id @default(uuid())
allianceId Int
alliance Alliance @relation(fields: [allianceId], references: [id])
createdAt DateTime @default(now())
}
model FavoriteLocation {
id Int @id @default(autoincrement())
userId Int
user User @relation(fields: [userId], references: [id])
name String @default("")
latitude Float
longitude Float
}
model Tile {
id Int @id @default(autoincrement())
season Int @default(0)
x Int
y Int
imageData Bytes?
pixels Pixel[]
regionId Int?
region Region? @relation(fields: [regionId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt @default(now())
@@unique([season, x, y])
}
model Pixel {
id Int @id @default(autoincrement())
season Int @default(0)
tileX Int
tileY Int
x Int
y Int
colorId Int
paintedBy Int
user User @relation(fields: [paintedBy], references: [id])
tile Tile @relation(fields: [season, tileX, tileY], references: [season, x, y])
paintedAt DateTime @default(now())
@@unique([season, tileX, tileY, x, y])
}
model Region {
id Int @id @default(autoincrement())
cityId Int
city City @relation(fields: [cityId], references: [id])
number Int
tiles Tile[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt @default(now())
@@unique([cityId, number])
}
model ProfilePicture {
id Int @id @default(autoincrement())
userId Int
url String
}
model Session {
id String @id @default(uuid())
userId Int
expiresAt DateTime
createdAt DateTime @default(now())
}
model Ticket {
id String @id @default(uuid())
userId Int
user User @relation("TicketUser", fields: [userId], references: [id])
reportedUserId Int
reportedUser User @relation("TicketReportedUser", fields: [reportedUserId], references: [id])
latitude Float
longitude Float
zoom Float
reason String
notes String
image String
resolved Boolean @default(false)
severe Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model UserNote {
id Int @id @default(autoincrement())
userId Int
user User @relation("UserNoteUser", fields: [userId], references: [id])
reportedUserId Int
reportedUser User @relation("UserNoteReportedUser", fields: [reportedUserId], references: [id])
content String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model SiteContent {
id Int @id @default(autoincrement())
key String @unique
value String @db.Text
locale String @default("en")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([key, locale])
}
model City {
id Int @id @default(autoincrement())
name String
countryId Int
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt @default(now())
regions Region[]
}
model Rule {
id Int @id @default(autoincrement())
text String @db.Text
locale String @default("en")
order Int
enabled Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([locale, enabled, order])
}