server: database schema, migrations and seed
Define Prisma schema (Player, City, Good, InventoryItem, Transaction, Mission, WorldEvent), initial migration SQL, and seed script to populate cities and goods with base game data. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
enum MissionStatus {
|
||||
STARTED
|
||||
COMPLETED
|
||||
FAILED
|
||||
}
|
||||
|
||||
enum MissionType {
|
||||
DELIVERY
|
||||
THEFT
|
||||
SMUGGLING
|
||||
INTEL
|
||||
}
|
||||
|
||||
enum EventType {
|
||||
MARKET_BOOM
|
||||
POLICE_RAID
|
||||
SHORTAGE
|
||||
BLACKOUT
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(uuid())
|
||||
email String @unique
|
||||
passwordHash String
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
player Player?
|
||||
}
|
||||
|
||||
model Player {
|
||||
id String @id @default(uuid())
|
||||
userId String @unique
|
||||
displayName String @unique
|
||||
money Int @default(1000)
|
||||
reputation Int @default(0)
|
||||
level Int @default(1)
|
||||
experience Int @default(0)
|
||||
currentCityId String
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
user User @relation(fields: [userId], references: [id])
|
||||
currentCity City @relation(fields: [currentCityId], references: [id])
|
||||
inventory InventoryItem[]
|
||||
missions PlayerMission[]
|
||||
}
|
||||
|
||||
model City {
|
||||
id String @id @default(uuid())
|
||||
name String @unique
|
||||
riskLevel Int
|
||||
policePressure Float @default(1.0)
|
||||
economyModifier Float @default(1.0)
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
players Player[]
|
||||
prices MarketPrice[]
|
||||
missions Mission[]
|
||||
events WorldEvent[]
|
||||
}
|
||||
|
||||
model Item {
|
||||
id String @id @default(uuid())
|
||||
name String @unique
|
||||
basePrice Int
|
||||
rarity Int
|
||||
illegalLevel Int
|
||||
weight Int @default(1)
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
inventory InventoryItem[]
|
||||
prices MarketPrice[]
|
||||
missions Mission[]
|
||||
}
|
||||
|
||||
model InventoryItem {
|
||||
playerId String
|
||||
itemId String
|
||||
quantity Int
|
||||
|
||||
player Player @relation(fields: [playerId], references: [id])
|
||||
item Item @relation(fields: [itemId], references: [id])
|
||||
|
||||
@@id([playerId, itemId])
|
||||
}
|
||||
|
||||
model MarketPrice {
|
||||
cityId String
|
||||
itemId String
|
||||
buyPrice Int
|
||||
sellPrice Int
|
||||
demand Float @default(1.0)
|
||||
supply Float @default(1.0)
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
city City @relation(fields: [cityId], references: [id])
|
||||
item Item @relation(fields: [itemId], references: [id])
|
||||
|
||||
@@id([cityId, itemId])
|
||||
}
|
||||
|
||||
model Mission {
|
||||
id String @id @default(uuid())
|
||||
cityId String
|
||||
title String
|
||||
type MissionType
|
||||
difficulty Int
|
||||
durationSeconds Int
|
||||
rewardMoney Int
|
||||
rewardXp Int
|
||||
risk Float
|
||||
requiredItemId String?
|
||||
requiredItemQuantity Int?
|
||||
expiresAt DateTime
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
city City @relation(fields: [cityId], references: [id])
|
||||
requiredItem Item? @relation(fields: [requiredItemId], references: [id])
|
||||
playerMissions PlayerMission[]
|
||||
}
|
||||
|
||||
model PlayerMission {
|
||||
id String @id @default(uuid())
|
||||
playerId String
|
||||
missionId String
|
||||
status MissionStatus @default(STARTED)
|
||||
startedAt DateTime @default(now())
|
||||
completesAt DateTime
|
||||
resolvedAt DateTime?
|
||||
|
||||
player Player @relation(fields: [playerId], references: [id])
|
||||
mission Mission @relation(fields: [missionId], references: [id])
|
||||
}
|
||||
|
||||
model WorldEvent {
|
||||
id String @id @default(uuid())
|
||||
title String
|
||||
description String
|
||||
type EventType
|
||||
cityId String?
|
||||
priceModifier Float @default(1.0)
|
||||
policeModifier Float @default(1.0)
|
||||
startsAt DateTime
|
||||
endsAt DateTime
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
city City? @relation(fields: [cityId], references: [id])
|
||||
}
|
||||
Reference in New Issue
Block a user