schema.prisma
1 // This is your Prisma schema file, 2 // learn more about it in the docs: https://pris.ly/d/prisma-schema 3 4 generator client { 5 provider = "prisma-client-js" 6 previewFeatures = ["postgresqlExtensions"] 7 } 8 9 datasource db { 10 provider = "postgresql" 11 url = env("NUXT_DATABASE_URL") 12 extensions = [pg_stat_statements, timescaledb] 13 } 14 15 model User { 16 id String @id @default(cuid()) 17 email String @unique 18 passwordHash String? 19 githubId String? @unique 20 githubUsername String? 21 githubAccessToken String? 22 apiKey String @unique @default(uuid()) 23 keystrokeTimeout Int @default(5) 24 createdAt DateTime @default(now()) 25 heartbeats Heartbeats[] 26 summaries Summaries[] 27 } 28 29 model Heartbeats { 30 id String @default(cuid()) 31 timestamp BigInt 32 userId String 33 user User @relation(fields: [userId], references: [id]) 34 project String? 35 editor String? 36 language String? 37 os String? 38 file String? 39 branch String? 40 createdAt DateTime @default(now()) 41 summaries Summaries? @relation(fields: [summariesId], references: [id]) 42 summariesId String? 43 44 @@id([id, timestamp]) 45 @@index([userId, timestamp(sort: Desc)]) 46 @@index([timestamp(sort: Desc)]) 47 @@index([userId, project, timestamp(sort: Desc)]) 48 @@index([userId, language, timestamp(sort: Desc)]) 49 @@index([userId, editor, timestamp(sort: Desc)]) 50 @@index([userId, os, timestamp(sort: Desc)]) 51 @@index([branch]) 52 @@index([file]) 53 } 54 55 model Summaries { 56 id String @id @default(cuid()) 57 userId String 58 user User @relation(fields: [userId], references: [id]) 59 date DateTime @db.Date 60 totalMinutes Int 61 projects Json? 62 languages Json? 63 editors Json? 64 os Json? 65 files Json? 66 branches Json? 67 heartbeats Heartbeats[] 68 createdAt DateTime @default(now()) 69 70 @@unique([userId, date]) 71 @@index([userId, date(sort: Desc)]) 72 } 73 74 model Stats { 75 id String @id @default(cuid()) 76 date DateTime @db.Date 77 totalHours Int 78 totalUsers BigInt 79 totalHeartbeats Int 80 topEditor String 81 topLanguage String 82 topOS String 83 createdAt DateTime @default(now()) 84 85 @@unique([date]) 86 }