diff --git a/db/cockroachdb/schema.prisma b/db/cockroachdb/schema.prisma new file mode 100644 index 00000000..1e6c510b --- /dev/null +++ b/db/cockroachdb/schema.prisma @@ -0,0 +1,103 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "cockroachdb" + url = env("DATABASE_URL") +} + +model account { + id BigInt @id @default(autoincrement()) @map("user_id") + username String @unique @db.String(255) + password String @db.String(60) + isAdmin Boolean @default(false) @map("is_admin") + createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6) + updatedAt DateTime? @default(now()) @map("updated_at") @db.Timestamptz(6) + accountUuid String @unique @map("account_uuid") @db.Uuid + website website[] + + @@index([accountUuid]) +} + +model event { + id BigInt @id() @default(autoincrement()) @map("event_id") + websiteId BigInt @map("website_id") + sessionId BigInt @map("session_id") + createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6) + url String @db.String(500) + eventName String @map("event_name") @db.String(50) + eventUuid String @unique @map("event_uuid") @db.Uuid + session session @relation(fields: [sessionId], references: [id]) + website website @relation(fields: [websiteId], references: [id]) + eventData eventData? + + @@index([createdAt]) + @@index([sessionId]) + @@index([websiteId]) + @@index([eventUuid]) +} + +model eventData { + id BigInt @id @default(autoincrement()) @map("event_data_id") + eventId BigInt @unique @map("event_id") + eventData Json @map("event_data") + event event @relation(fields: [eventId], references: [id]) + + @@map("event_data") +} + +model pageview { + id BigInt @id @default(autoincrement()) @map("view_id") + websiteId BigInt @map("website_id") + sessionId BigInt @map("session_id") + createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6) + url String @db.String(500) + referrer String? @db.String(500) + session session @relation(fields: [sessionId], references: [id]) + website website @relation(fields: [websiteId], references: [id]) + + @@index([createdAt]) + @@index([sessionId]) + @@index([websiteId, createdAt]) + @@index([websiteId]) + @@index([websiteId, sessionId, createdAt]) +} + +model session { + id BigInt @id @default(autoincrement()) @map("session_id") + sessionUuid String @unique @map("session_uuid") @db.Uuid + websiteId BigInt @map("website_id") + createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6) + hostname String? @db.String(100) + browser String? @db.String(20) + os String? @db.String(20) + device String? @db.String(20) + screen String? @db.String(11) + language String? @db.String(35) + country String? @db.Char(2) + website website? @relation(fields: [websiteId], references: [id]) + events event[] + pageview pageview[] + + @@index([createdAt]) + @@index([websiteId]) + @@index([sessionUuid]) +} + +model website { + id BigInt @id @default(autoincrement()) @map("website_id") + websiteUuid String @unique @map("website_uuid") @db.Uuid + userId BigInt @map("user_id") + name String @db.String(100) + domain String? @db.String(500) + shareId String? @unique @map("share_id") @db.String(64) + createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6) + account account @relation(fields: [userId], references: [id]) + event event[] + pageview pageview[] + session session[] + + @@index([userId]) + @@index([websiteUuid]) +}