/ prisma / schema.prisma
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  }