대시보드 벌점을 read-model source와 outbox에서 제외하고 수동 projection의 가점을 Redis에 합산한다. 5초 worker가 월별 traffic과 접속 점수를 멱등 PostgreSQL batch로 반영하며 메인 제한 gate는 Redis TTL marker만 조회한다.
870 lines
27 KiB
Plaintext
870 lines
27 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
output = "./generated/game"
|
|
engineType = "binary"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
}
|
|
|
|
enum LogScope {
|
|
SYSTEM
|
|
NATION
|
|
GENERAL
|
|
USER
|
|
}
|
|
|
|
enum LogCategory {
|
|
HISTORY
|
|
SUMMARY
|
|
ACTION
|
|
BATTLE_BRIEF
|
|
BATTLE_DETAIL
|
|
USER
|
|
}
|
|
|
|
enum AuctionStatus {
|
|
OPEN
|
|
FINALIZING
|
|
FINISHED
|
|
CANCELED
|
|
|
|
@@map("auction_status")
|
|
}
|
|
|
|
enum AuctionType {
|
|
BUY_RICE
|
|
SELL_RICE
|
|
UNIQUE_ITEM
|
|
|
|
@@map("auction_type")
|
|
}
|
|
|
|
enum DiplomacyLetterState {
|
|
PROPOSED
|
|
ACTIVATED
|
|
CANCELLED
|
|
REPLACED
|
|
|
|
@@map("diplomacy_letter_state")
|
|
}
|
|
|
|
enum InputEventStatus {
|
|
PENDING
|
|
PROCESSING
|
|
SUCCEEDED
|
|
FAILED
|
|
}
|
|
|
|
enum InputEventTarget {
|
|
API
|
|
ENGINE
|
|
}
|
|
|
|
model InputEvent {
|
|
sequence BigInt @id @default(autoincrement())
|
|
requestId String @unique @map("request_id")
|
|
target InputEventTarget
|
|
eventType String @map("event_type")
|
|
payload Json @default(dbgenerated("'{}'::jsonb"))
|
|
actorUserId String? @map("actor_user_id")
|
|
status InputEventStatus @default(PENDING)
|
|
result Json?
|
|
error String?
|
|
attempts Int @default(0)
|
|
lockedBy String? @map("locked_by")
|
|
leaseUntil DateTime? @map("lease_until")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
processingAt DateTime? @map("processing_at")
|
|
completedAt DateTime? @map("completed_at")
|
|
|
|
@@index([target, status, sequence])
|
|
@@map("input_event")
|
|
}
|
|
|
|
model ReadModelRevision {
|
|
domain String
|
|
entityId Int @default(0) @map("entity_id")
|
|
revision BigInt @default(0)
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
@@id([domain, entityId])
|
|
@@map("read_model_revision")
|
|
}
|
|
|
|
model ReadModelOutbox {
|
|
id BigInt @id @default(autoincrement())
|
|
payload Json
|
|
attempts Int @default(0)
|
|
availableAt DateTime @default(now()) @map("available_at")
|
|
lockedAt DateTime? @map("locked_at")
|
|
lockOwner String? @map("lock_owner")
|
|
deliveredAt DateTime? @map("delivered_at")
|
|
lastError String? @map("last_error")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
@@index([deliveredAt, availableAt, id], map: "read_model_outbox_delivered_at_available_at_id_idx")
|
|
@@map("read_model_outbox")
|
|
}
|
|
|
|
model ReadModelRevisionMeta {
|
|
id Int @id
|
|
coverageVersion Int @default(0) @map("coverage_version")
|
|
|
|
@@map("read_model_revision_meta")
|
|
}
|
|
|
|
model TurnDaemonLease {
|
|
profile String @id
|
|
ownerId String @map("owner_id")
|
|
leaseUntil DateTime @map("lease_until")
|
|
fencingEpoch BigInt @default(1) @map("fencing_epoch")
|
|
heartbeatAt DateTime @default(now()) @map("heartbeat_at")
|
|
|
|
@@map("turn_daemon_lease")
|
|
}
|
|
|
|
model WorldState {
|
|
id Int @id @default(autoincrement())
|
|
scenarioCode String @map("scenario_code")
|
|
currentYear Int @map("current_year")
|
|
currentMonth Int @map("current_month")
|
|
tickSeconds Int @map("tick_seconds")
|
|
clockBaseTime DateTime? @map("clock_base_time")
|
|
clockTick BigInt? @map("clock_tick")
|
|
clockMode String @default("realtime") @map("clock_mode")
|
|
clockWallAnchor DateTime? @map("clock_wall_anchor")
|
|
lastTurnTick BigInt? @map("last_turn_tick")
|
|
config Json @default(dbgenerated("'{}'::jsonb"))
|
|
meta Json @default(dbgenerated("'{}'::jsonb"))
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
trafficPeriods TrafficPeriod[]
|
|
|
|
@@map("world_state")
|
|
}
|
|
|
|
model Nation {
|
|
id Int @id
|
|
name String
|
|
color String
|
|
capitalCityId Int? @map("capital_city_id")
|
|
chiefGeneralId Int? @map("chief_general_id")
|
|
gold Int @default(0)
|
|
rice Int @default(0)
|
|
tech Float @default(0)
|
|
level Int @default(0)
|
|
typeCode String @default("che_중립") @map("type_code")
|
|
meta Json @default(dbgenerated("'{}'::jsonb"))
|
|
|
|
@@map("nation")
|
|
}
|
|
|
|
model City {
|
|
id Int @id
|
|
name String
|
|
level Int
|
|
nationId Int @default(0) @map("nation_id")
|
|
supplyState Int @default(1) @map("supply_state")
|
|
frontState Int @default(0) @map("front_state")
|
|
population Int @map("pop")
|
|
populationMax Int @map("pop_max")
|
|
agriculture Int @map("agri")
|
|
agricultureMax Int @map("agri_max")
|
|
commerce Int @map("comm")
|
|
commerceMax Int @map("comm_max")
|
|
security Int @map("secu")
|
|
securityMax Int @map("secu_max")
|
|
trust Float @default(0) @db.Real
|
|
trade Int? @default(100)
|
|
defence Int @map("def")
|
|
defenceMax Int @map("def_max")
|
|
wall Int @map("wall")
|
|
wallMax Int @map("wall_max")
|
|
region Int
|
|
conflict Json @default(dbgenerated("'{}'::jsonb"))
|
|
meta Json @default(dbgenerated("'{}'::jsonb"))
|
|
|
|
@@map("city")
|
|
}
|
|
|
|
model General {
|
|
id Int @id
|
|
userId String? @unique(map: "general_user_id_key") @map("user_id")
|
|
name String
|
|
nationId Int @default(0) @map("nation_id")
|
|
cityId Int @default(0) @map("city_id")
|
|
troopId Int @default(0) @map("troop_id")
|
|
npcState Int @default(0) @map("npc_state")
|
|
affinity Int?
|
|
bornYear Int @default(180) @map("born_year")
|
|
deadYear Int @default(300) @map("dead_year")
|
|
picture String?
|
|
imageServer Int @default(0) @map("image_server")
|
|
leadership Int @default(50)
|
|
strength Int @default(50)
|
|
intel Int @default(50)
|
|
injury Int @default(0)
|
|
experience Int @default(0)
|
|
dedication Int @default(0)
|
|
officerLevel Int @default(0) @map("officer_level")
|
|
gold Int @default(1000)
|
|
rice Int @default(1000)
|
|
crew Int @default(0)
|
|
crewTypeId Int @default(0) @map("crew_type_id")
|
|
train Int @default(0)
|
|
atmos Int @default(0)
|
|
weaponCode String @default("None") @map("weapon_code")
|
|
bookCode String @default("None") @map("book_code")
|
|
horseCode String @default("None") @map("horse_code")
|
|
itemCode String @default("None") @map("item_code")
|
|
turnTime DateTime @map("turn_time")
|
|
turnTick BigInt? @map("turn_tick")
|
|
recentWarTime DateTime? @map("recent_war_time")
|
|
recentWarTick BigInt? @map("recent_war_tick")
|
|
age Int @default(20)
|
|
startAge Int @default(20) @map("start_age")
|
|
personalCode String @default("None") @map("personal_code")
|
|
specialCode String @default("None") @map("special_code")
|
|
special2Code String @default("None") @map("special2_code")
|
|
lastTurn Json @default(dbgenerated("'{}'::jsonb")) @map("last_turn")
|
|
meta Json @default(dbgenerated("'{}'::jsonb"))
|
|
penalty Json @default(dbgenerated("'{}'::jsonb"))
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @default(now()) @map("updated_at")
|
|
|
|
@@map("general")
|
|
}
|
|
|
|
model SelectPoolEntry {
|
|
id Int @id @default(autoincrement())
|
|
uniqueName String @unique @map("unique_name") @db.VarChar(20)
|
|
ownerUserId String? @map("owner_user_id")
|
|
generalId Int? @unique @map("general_id")
|
|
reservedUntil DateTime? @map("reserved_until")
|
|
reservedUntilTick BigInt? @map("reserved_until_tick")
|
|
info Json
|
|
|
|
@@index([ownerUserId])
|
|
@@index([reservedUntil, generalId])
|
|
@@map("select_pool")
|
|
}
|
|
|
|
model NpcSelectionToken {
|
|
ownerUserId String @id @map("owner_user_id")
|
|
validUntil DateTime @map("valid_until")
|
|
validUntilTick BigInt? @map("valid_until_tick")
|
|
pickMoreFrom DateTime @map("pick_more_from")
|
|
pickMoreFromTick BigInt? @map("pick_more_from_tick")
|
|
pickResult Json @map("pick_result")
|
|
nonce Int
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
@@index([validUntil])
|
|
@@map("select_npc_token")
|
|
}
|
|
|
|
model GeneralAccessLog {
|
|
id Int @id @default(autoincrement())
|
|
generalId Int @unique @map("general_id")
|
|
userId String? @map("user_id")
|
|
lastRefresh DateTime? @map("last_refresh")
|
|
refresh Int @default(0)
|
|
refreshTotal Int @default(0) @map("refresh_total")
|
|
refreshScore Int @default(0) @map("refresh_score")
|
|
refreshScoreTotal Int @default(0) @map("refresh_score_total")
|
|
|
|
@@index([userId])
|
|
@@map("general_access_log")
|
|
}
|
|
|
|
model GeneralAccessBatch {
|
|
id String @id @db.VarChar(64)
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
@@index([createdAt])
|
|
@@map("general_access_batch")
|
|
}
|
|
|
|
model TrafficPeriod {
|
|
id Int @id @default(autoincrement())
|
|
worldStateId Int @map("world_state_id")
|
|
year Int
|
|
month Int
|
|
startedAt DateTime @map("started_at")
|
|
lastRefresh DateTime @map("last_refresh")
|
|
refresh Int @default(0)
|
|
online Int @default(0)
|
|
|
|
worldState WorldState @relation(fields: [worldStateId], references: [id], onDelete: Cascade)
|
|
generals TrafficPeriodGeneral[]
|
|
|
|
@@unique([worldStateId, year, month])
|
|
@@index([worldStateId, startedAt])
|
|
@@map("traffic_period")
|
|
}
|
|
|
|
model TrafficPeriodGeneral {
|
|
periodId Int @map("period_id")
|
|
generalId Int @map("general_id")
|
|
userId String? @map("user_id")
|
|
refresh Int @default(0)
|
|
lastRefresh DateTime @map("last_refresh")
|
|
|
|
period TrafficPeriod @relation(fields: [periodId], references: [id], onDelete: Cascade)
|
|
|
|
@@id([periodId, generalId])
|
|
@@index([periodId, refresh, generalId])
|
|
@@map("traffic_period_general")
|
|
}
|
|
|
|
model MessageReadState {
|
|
generalId Int @id @map("general_id")
|
|
latestPrivateMessage Int @default(0) @map("latest_private_message")
|
|
latestDiplomacyMessage Int @default(0) @map("latest_diplomacy_message")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
@@map("message_read_state")
|
|
}
|
|
|
|
model Message {
|
|
id Int @id @default(autoincrement())
|
|
mailbox Int
|
|
type String
|
|
src Int
|
|
dest Int
|
|
time DateTime
|
|
timeTick BigInt? @map("time_tick")
|
|
validUntil DateTime @map("valid_until")
|
|
validUntilTick BigInt? @map("valid_until_tick")
|
|
message Json
|
|
|
|
@@map("message")
|
|
}
|
|
|
|
model RankData {
|
|
id Int @id @default(autoincrement())
|
|
nationId Int @default(0) @map("nation_id")
|
|
generalId Int @map("general_id")
|
|
type String @db.VarChar(20)
|
|
value Int @default(0)
|
|
|
|
@@unique([generalId, type])
|
|
@@index([type, value], name: "by_type")
|
|
@@index([nationId, type, value], name: "by_nation")
|
|
@@map("rank_data")
|
|
}
|
|
|
|
model HallOfFame {
|
|
id Int @id @default(autoincrement())
|
|
serverId String @map("server_id")
|
|
season Int
|
|
scenario Int
|
|
generalNo Int @map("general_no")
|
|
type String @db.VarChar(20)
|
|
value Float
|
|
owner String? @map("owner")
|
|
aux Json @default(dbgenerated("'{}'::jsonb"))
|
|
|
|
@@unique([serverId, type, generalNo])
|
|
@@unique([owner, serverId, type], name: "hall_owner")
|
|
@@index([serverId, type, value], name: "server_show")
|
|
@@index([season, scenario, type, value], name: "scenario")
|
|
@@map("hall")
|
|
}
|
|
|
|
model GameHistory {
|
|
id Int @id @default(autoincrement())
|
|
serverId String @map("server_id")
|
|
date DateTime
|
|
winnerNation Int? @map("winner_nation")
|
|
map String? @map("map")
|
|
season Int
|
|
scenario Int
|
|
scenarioName String @map("scenario_name")
|
|
env Json @default(dbgenerated("'{}'::jsonb"))
|
|
|
|
@@unique([serverId])
|
|
@@index([date])
|
|
@@map("ng_games")
|
|
}
|
|
|
|
model OldNation {
|
|
id Int @id @default(autoincrement())
|
|
serverId String @map("server_id")
|
|
nation Int @default(0)
|
|
sourceId Int @default(0) @map("source_id")
|
|
data Json @default(dbgenerated("'{}'::jsonb"))
|
|
date DateTime @default(now())
|
|
|
|
@@unique([serverId, nation, sourceId])
|
|
@@index([serverId, nation], name: "by_server")
|
|
@@map("ng_old_nations")
|
|
}
|
|
|
|
model OldGeneral {
|
|
id Int @id @default(autoincrement())
|
|
serverId String @map("server_id")
|
|
generalNo Int @map("general_no")
|
|
owner String? @map("owner")
|
|
name String
|
|
lastYearMonth Int @map("last_yearmonth")
|
|
turnTime DateTime @map("turntime")
|
|
data Json @default(dbgenerated("'{}'::jsonb"))
|
|
|
|
@@unique([serverId, generalNo], name: "by_no")
|
|
@@index([serverId, name], name: "by_name")
|
|
@@index([owner, serverId], name: "owner")
|
|
@@map("ng_old_generals")
|
|
}
|
|
|
|
model Emperor {
|
|
id Int @id @default(autoincrement()) @map("no")
|
|
legacyId Int? @unique @map("legacy_id")
|
|
serverId String? @map("server_id")
|
|
phase String? @default("")
|
|
nationCount String? @map("nation_count")
|
|
nationName String? @map("nation_name")
|
|
nationHist String? @map("nation_hist")
|
|
genCount String? @map("gen_count")
|
|
personalHist String? @map("personal_hist")
|
|
specialHist String? @map("special_hist")
|
|
name String? @default("")
|
|
type String? @default("")
|
|
color String? @default("")
|
|
year Int? @default(0)
|
|
month Int? @default(0)
|
|
power Int? @default(0)
|
|
gennum Int? @default(0)
|
|
citynum Int? @default(0)
|
|
pop String? @default("0")
|
|
poprate String? @default("")
|
|
gold Int? @default(0)
|
|
rice Int? @default(0)
|
|
l12name String? @default("")
|
|
l12pic String? @default("")
|
|
l11name String? @default("")
|
|
l11pic String? @default("")
|
|
l10name String? @default("")
|
|
l10pic String? @default("")
|
|
l9name String? @default("")
|
|
l9pic String? @default("")
|
|
l8name String? @default("")
|
|
l8pic String? @default("")
|
|
l7name String? @default("")
|
|
l7pic String? @default("")
|
|
l6name String? @default("")
|
|
l6pic String? @default("")
|
|
l5name String? @default("")
|
|
l5pic String? @default("")
|
|
tiger String? @default("")
|
|
eagle String? @default("")
|
|
gen String? @default("")
|
|
history Json @default(dbgenerated("'{}'::jsonb"))
|
|
aux Json @default(dbgenerated("'{}'::jsonb"))
|
|
|
|
@@map("emperior")
|
|
}
|
|
|
|
model UnificationFinalization {
|
|
generationKey String @id @map("generation_key")
|
|
serverId String @unique @map("server_id")
|
|
profileName String @map("profile_name")
|
|
winnerNation Int @map("winner_nation")
|
|
year Int
|
|
month Int
|
|
completedAt DateTime @map("completed_at")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
@@map("unification_finalization")
|
|
}
|
|
|
|
model Troop {
|
|
troopLeaderId Int @id @map("troop_leader")
|
|
nationId Int @map("nation")
|
|
name String
|
|
|
|
@@map("troop")
|
|
}
|
|
|
|
model GeneralTurn {
|
|
id Int @id @default(autoincrement())
|
|
generalId Int @map("general_id")
|
|
turnIdx Int @map("turn_idx")
|
|
actionCode String @map("action_code")
|
|
arg Json @default(dbgenerated("'{}'::jsonb"))
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
@@unique([generalId, turnIdx])
|
|
@@map("general_turn")
|
|
}
|
|
|
|
model GeneralTurnRevision {
|
|
generalId Int @id @map("general_id")
|
|
revision Int @default(0)
|
|
leaseOwner String? @map("lease_owner")
|
|
leaseExpiresAt DateTime? @map("lease_expires_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
@@map("general_turn_revision")
|
|
}
|
|
|
|
model NationTurn {
|
|
id Int @id @default(autoincrement())
|
|
nationId Int @map("nation_id")
|
|
officerLevel Int @map("officer_level")
|
|
turnIdx Int @map("turn_idx")
|
|
actionCode String @map("action_code")
|
|
arg Json @default(dbgenerated("'{}'::jsonb"))
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
@@unique([nationId, officerLevel, turnIdx])
|
|
@@map("nation_turn")
|
|
}
|
|
|
|
model NationTurnRevision {
|
|
nationId Int @map("nation_id")
|
|
officerLevel Int @map("officer_level")
|
|
revision Int @default(0)
|
|
leaseOwner String? @map("lease_owner")
|
|
leaseExpiresAt DateTime? @map("lease_expires_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
@@id([nationId, officerLevel])
|
|
@@map("nation_turn_revision")
|
|
}
|
|
|
|
model Diplomacy {
|
|
id Int @id @default(autoincrement())
|
|
srcNationId Int @map("src_nation_id")
|
|
destNationId Int @map("dest_nation_id")
|
|
stateCode Int @map("state_code")
|
|
term Int @default(0)
|
|
isDead Boolean @default(false) @map("is_dead")
|
|
isShowing Boolean @default(true) @map("is_showing")
|
|
meta Json @default(dbgenerated("'{}'::jsonb"))
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
@@unique([srcNationId, destNationId])
|
|
@@map("diplomacy")
|
|
}
|
|
|
|
model DiplomacyLetter {
|
|
id Int @id @default(autoincrement())
|
|
srcNationId Int @map("src_nation_id")
|
|
destNationId Int @map("dest_nation_id")
|
|
prevId Int? @map("prev_id")
|
|
state DiplomacyLetterState @default(PROPOSED)
|
|
textBrief String @map("text_brief")
|
|
textDetail String @map("text_detail")
|
|
date DateTime @default(now()) @map("date")
|
|
srcSignerId Int @map("src_signer")
|
|
destSignerId Int? @map("dest_signer")
|
|
aux Json @default(dbgenerated("'{}'::jsonb"))
|
|
|
|
@@index([srcNationId, destNationId])
|
|
@@index([destNationId, srcNationId])
|
|
@@index([state, date])
|
|
@@map("diplomacy_letter")
|
|
}
|
|
|
|
model YearbookHistory {
|
|
id Int @id @default(autoincrement())
|
|
profileName String @map("profile_name")
|
|
sourceId Int @default(0) @map("source_id")
|
|
year Int
|
|
month Int
|
|
map Json
|
|
nations Json
|
|
globalHistory Json @default(dbgenerated("'[]'::jsonb")) @map("global_history")
|
|
globalAction Json @default(dbgenerated("'[]'::jsonb")) @map("global_action")
|
|
hash String @default("")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
@@unique([profileName, year, month, sourceId])
|
|
@@index([profileName, year, month])
|
|
@@map("yearbook_history")
|
|
}
|
|
|
|
model Event {
|
|
id Int @id @default(autoincrement())
|
|
targetCode String @map("target_code")
|
|
priority Int @default(0)
|
|
condition Json @default(dbgenerated("'{}'::jsonb"))
|
|
action Json @default(dbgenerated("'{}'::jsonb"))
|
|
meta Json @default(dbgenerated("'{}'::jsonb"))
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
@@map("event")
|
|
}
|
|
|
|
model LogEntry {
|
|
id Int @id @default(autoincrement())
|
|
scope LogScope
|
|
category LogCategory
|
|
subType String? @map("sub_type")
|
|
year Int
|
|
month Int
|
|
text String
|
|
generalId Int? @map("general_id")
|
|
nationId Int? @map("nation_id")
|
|
userId Int? @map("user_id")
|
|
meta Json @default(dbgenerated("'{}'::jsonb"))
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
@@index([scope, category, id])
|
|
@@index([generalId, category, id])
|
|
@@index([nationId, category, id])
|
|
@@index([userId, category, id])
|
|
@@map("log_entry")
|
|
}
|
|
|
|
model ErrorLog {
|
|
id Int @id @default(autoincrement())
|
|
category String
|
|
source String? @map("source")
|
|
message String
|
|
trace String?
|
|
context Json @default(dbgenerated("'{}'::jsonb"))
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
@@index([category, id])
|
|
@@map("error_log")
|
|
}
|
|
|
|
model InheritancePoint {
|
|
id Int @id @default(autoincrement())
|
|
userId String @map("user_id")
|
|
key String
|
|
value Float @default(0)
|
|
aux Json @default(dbgenerated("'{}'::jsonb"))
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
@@unique([userId, key])
|
|
@@index([userId])
|
|
@@map("inheritance_point")
|
|
}
|
|
|
|
model NationBetting {
|
|
id Int @id
|
|
type String @default("bettingNation")
|
|
name String
|
|
finished Boolean @default(false)
|
|
selectCount Int @map("select_count")
|
|
isExclusive Boolean? @map("is_exclusive")
|
|
requiresInheritancePoint Boolean @default(true) @map("requires_inheritance_point")
|
|
openYearMonth Int @map("open_year_month")
|
|
closeYearMonth Int @map("close_year_month")
|
|
candidates Json
|
|
winner Json?
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
bets NationBet[]
|
|
|
|
@@index([type, id])
|
|
@@map("nation_betting")
|
|
}
|
|
|
|
model NationBet {
|
|
id Int @id @default(autoincrement())
|
|
bettingId Int @map("betting_id")
|
|
generalId Int @map("general_id")
|
|
userId String? @map("user_id")
|
|
selection Json
|
|
selectionKey String @map("selection_key")
|
|
amount Float
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
betting NationBetting @relation(fields: [bettingId], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([bettingId, userId, selectionKey])
|
|
@@index([bettingId])
|
|
@@index([bettingId, userId])
|
|
@@map("nation_bet")
|
|
}
|
|
|
|
model InheritanceLog {
|
|
id Int @id @default(autoincrement())
|
|
legacyId Int? @unique @map("legacy_id")
|
|
userId String @map("user_id")
|
|
serverId String? @map("server_id")
|
|
logType String @default("inheritPoint") @map("log_type")
|
|
year Int
|
|
month Int
|
|
text String
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
@@index([userId, id])
|
|
@@map("inheritance_log")
|
|
}
|
|
|
|
model InheritanceResult {
|
|
id Int @id @default(autoincrement())
|
|
legacyId Int? @unique @map("legacy_id")
|
|
serverId String @map("server_id")
|
|
owner String @map("owner")
|
|
generalId Int @map("general_id")
|
|
year Int
|
|
month Int
|
|
value Json @default(dbgenerated("'{}'::jsonb"))
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
@@index([serverId, owner])
|
|
@@map("inheritance_result")
|
|
}
|
|
|
|
model Auction {
|
|
id Int @id @default(autoincrement())
|
|
type AuctionType
|
|
targetCode String? @map("target_code")
|
|
hostGeneralId Int @map("host_general_id")
|
|
hostName String? @map("host_name")
|
|
detail Json @default(dbgenerated("'{}'::jsonb"))
|
|
status AuctionStatus @default(OPEN)
|
|
closeAt DateTime @map("close_at")
|
|
openTick BigInt? @map("open_tick")
|
|
closeTick BigInt? @map("close_tick")
|
|
latestEventId String @default("") @map("latest_event_id")
|
|
latestEventAt DateTime @default(now()) @map("latest_event_at")
|
|
finalizingAt DateTime? @map("finalizing_at")
|
|
finishedAt DateTime? @map("finished_at")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
bids AuctionBid[]
|
|
|
|
@@index([status, closeAt])
|
|
@@map("auction")
|
|
}
|
|
|
|
model AuctionBid {
|
|
id Int @id @default(autoincrement())
|
|
auctionId Int @map("auction_id")
|
|
generalId Int @map("general_id")
|
|
amount Int
|
|
eventId String @map("event_id")
|
|
eventAt DateTime @map("event_at")
|
|
meta Json @default(dbgenerated("'{}'::jsonb"))
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
auction Auction @relation(fields: [auctionId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([auctionId, amount])
|
|
@@index([auctionId, eventAt])
|
|
@@map("auction_bid")
|
|
}
|
|
|
|
model InheritanceUserState {
|
|
userId String @id @map("user_id")
|
|
meta Json @default(dbgenerated("'{}'::jsonb"))
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
@@map("inheritance_user_state")
|
|
}
|
|
|
|
model LegacyGameStorage {
|
|
id Int @id @default(autoincrement())
|
|
sourceId Int @map("source_id")
|
|
namespace String
|
|
key String
|
|
value Json
|
|
scope String
|
|
migratedAt DateTime @default(now()) @map("migrated_at")
|
|
|
|
@@unique([sourceId])
|
|
@@unique([namespace, key])
|
|
@@index([scope, namespace])
|
|
@@map("legacy_game_storage")
|
|
}
|
|
|
|
model BoardPost {
|
|
id Int @id @default(autoincrement())
|
|
nationId Int @map("nation_id")
|
|
isSecret Boolean @default(false) @map("is_secret")
|
|
authorGeneralId Int @map("author_general_id")
|
|
authorName String @map("author_name")
|
|
title String
|
|
contentHtml String @map("content_html")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
comments BoardComment[]
|
|
|
|
@@index([nationId, isSecret, createdAt])
|
|
@@map("board_post")
|
|
}
|
|
|
|
model BoardComment {
|
|
id Int @id @default(autoincrement())
|
|
postId Int @map("post_id")
|
|
nationId Int @map("nation_id")
|
|
isSecret Boolean @default(false) @map("is_secret")
|
|
authorGeneralId Int @map("author_general_id")
|
|
authorName String @map("author_name")
|
|
contentText String @map("content_text")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
post BoardPost @relation(fields: [postId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([postId, createdAt])
|
|
@@map("board_comment")
|
|
}
|
|
|
|
model VotePoll {
|
|
id Int @id @default(autoincrement())
|
|
title String
|
|
body String @default("")
|
|
options Json
|
|
multipleOptions Int @default(1) @map("multiple_options")
|
|
revealMode String @map("reveal_mode")
|
|
openerGeneralId Int @map("opener_general_id")
|
|
openerName String @map("opener_name")
|
|
startAt DateTime @default(now()) @map("start_at")
|
|
startTick BigInt? @map("start_tick")
|
|
endAt DateTime? @map("end_at")
|
|
endTick BigInt? @map("end_tick")
|
|
closedAt DateTime? @map("closed_at")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
votes Vote[]
|
|
comments VoteComment[]
|
|
|
|
@@map("vote_poll")
|
|
}
|
|
|
|
model Vote {
|
|
id Int @id @default(autoincrement())
|
|
voteId Int @map("vote_id")
|
|
generalId Int @map("general_id")
|
|
nationId Int @map("nation_id")
|
|
selection Json
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
poll VotePoll @relation(fields: [voteId], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([voteId, generalId])
|
|
@@index([voteId])
|
|
@@map("vote")
|
|
}
|
|
|
|
model VoteComment {
|
|
id Int @id @default(autoincrement())
|
|
voteId Int @map("vote_id")
|
|
generalId Int @map("general_id")
|
|
nationId Int @map("nation_id")
|
|
generalName String @map("general_name")
|
|
nationName String @map("nation_name")
|
|
text String
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
poll VotePoll @relation(fields: [voteId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([voteId, createdAt])
|
|
@@map("vote_comment")
|
|
}
|