53 lines
1.8 KiB
Plaintext
53 lines
1.8 KiB
Plaintext
// =============================================================================
|
|
// Presence Service - Prisma Schema
|
|
// =============================================================================
|
|
|
|
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
// 事件日志表 (append-only)
|
|
model EventLog {
|
|
id BigInt @id @default(autoincrement())
|
|
userId String? @map("user_id") @db.VarChar(20) // userSerialNum, e.g. "D25121400005"
|
|
installId String @map("install_id") @db.VarChar(64)
|
|
eventName String @map("event_name") @db.VarChar(64)
|
|
eventTime DateTime @map("event_time") @db.Timestamptz()
|
|
properties Json? @db.JsonB
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz()
|
|
|
|
@@index([eventTime], name: "idx_event_log_event_time")
|
|
@@index([eventName], name: "idx_event_log_event_name")
|
|
@@index([eventName, eventTime], name: "idx_event_log_event_name_time")
|
|
@@index([userId], name: "idx_event_log_user_id")
|
|
@@map("analytics_event_log")
|
|
}
|
|
|
|
// 日活统计表
|
|
model DailyActiveStats {
|
|
day DateTime @id @map("day") @db.Date
|
|
dauCount Int @map("dau_count")
|
|
dauByProvince Json? @map("dau_by_province") @db.JsonB
|
|
dauByCity Json? @map("dau_by_city") @db.JsonB
|
|
calculatedAt DateTime @map("calculated_at") @db.Timestamptz()
|
|
version Int @default(1)
|
|
|
|
@@map("analytics_daily_active_users")
|
|
}
|
|
|
|
// 在线人数快照表
|
|
model OnlineSnapshot {
|
|
id BigInt @id @default(autoincrement())
|
|
ts DateTime @unique @db.Timestamptz()
|
|
onlineCount Int @map("online_count")
|
|
windowSeconds Int @default(180) @map("window_seconds")
|
|
|
|
@@index([ts(sort: Desc)], name: "idx_online_snapshots_ts")
|
|
@@map("analytics_online_snapshots")
|
|
}
|