rwadurian/backend/services/presence-service/prisma/schema.prisma

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")
}