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

93 lines
3.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// =============================================================================
// Presence Service - Prisma Schema
// =============================================================================
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
// =============================================================================
// Heartbeat (在线心跳记录)
// =============================================================================
model Heartbeat {
id String @id @default(uuid())
installId String // 设备唯一安装ID
sessionId String // 会话ID
userId String? // 用户ID (可选未登录时为null)
timestamp DateTime // 心跳时间戳
createdAt DateTime @default(now())
@@index([installId, timestamp])
@@index([userId, timestamp])
@@index([sessionId])
@@index([timestamp])
@@map("heartbeats")
}
// =============================================================================
// Daily Active Users (DAU 日活统计)
// =============================================================================
model DailyActiveUser {
id String @id @default(uuid())
date DateTime @db.Date // 统计日期 (YYYY-MM-DD)
installId String // 设备唯一安装ID
userId String? // 用户ID (可选)
firstSeen DateTime // 当日首次出现时间
lastSeen DateTime // 当日最后出现时间
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([date, installId])
@@index([date])
@@index([userId, date])
@@map("daily_active_users")
}
// =============================================================================
// Online Presence (实时在线状态)
// 使用 Redis 存储,此表仅用于历史记录
// =============================================================================
model OnlineSession {
id String @id @default(uuid())
installId String // 设备唯一安装ID
sessionId String @unique // 会话ID
userId String? // 用户ID (可选)
startTime DateTime // 会话开始时间
lastHeartbeat DateTime // 最后心跳时间
endTime DateTime? // 会话结束时间 (null表示仍在线)
duration Int? // 会话时长 (秒)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([installId])
@@index([userId])
@@index([sessionId])
@@index([startTime])
@@map("online_sessions")
}
// =============================================================================
// DAU Statistics (DAU 统计汇总)
// =============================================================================
model DauStatistics {
id String @id @default(uuid())
date DateTime @unique @db.Date // 统计日期
totalDau Int // 总DAU (按installId去重)
uniqueUsers Int // 唯一用户数 (按userId去重, 不含匿名)
anonymousUsers Int // 匿名用户数 (userId为null)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([date])
@@map("dau_statistics")
}