generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

model account {
  user_id    Int       @default(autoincrement()) @id
  username   String    @unique
  password   String
  is_admin   Boolean   @default(false)
  created_at DateTime? @default(now())
  updated_at DateTime? @default(now())
  website    website[]
}

model event {
  event_id    Int       @default(autoincrement()) @id
  website_id  Int
  session_id  Int
  created_at  DateTime? @default(now())
  url         String
  event_type  String
  event_value String
  session     session   @relation(fields: [session_id], references: [session_id])
  website     website   @relation(fields: [website_id], references: [website_id])

  @@index([created_at], name: "event_created_at_idx")
  @@index([session_id], name: "event_session_id_idx")
  @@index([website_id], name: "event_website_id_idx")
}

model pageview {
  view_id    Int       @default(autoincrement()) @id
  website_id Int
  session_id Int
  created_at DateTime? @default(now())
  url        String
  referrer   String?
  session    session   @relation(fields: [session_id], references: [session_id])
  website    website   @relation(fields: [website_id], references: [website_id])

  @@index([created_at], name: "pageview_created_at_idx")
  @@index([session_id], name: "pageview_session_id_idx")
  @@index([website_id], name: "pageview_website_id_idx")
}

model session {
  session_id   Int        @default(autoincrement()) @id
  session_uuid String     @unique
  website_id   Int
  created_at   DateTime?  @default(now())
  hostname     String?
  browser      String?
  os           String?
  device       String?
  screen       String?
  language     String?
  country      String?
  website      website    @relation(fields: [website_id], references: [website_id])
  event        event[]
  pageview     pageview[]

  @@index([created_at], name: "session_created_at_idx")
  @@index([website_id], name: "session_website_id_idx")
}

model website {
  website_id   Int        @default(autoincrement()) @id
  website_uuid String     @unique
  user_id      Int
  name         String
  domain       String?
  created_at   DateTime?  @default(now())
  share_id     String?    @unique
  account      account    @relation(fields: [user_id], references: [user_id])
  event        event[]
  pageview     pageview[]
  session      session[]

  @@index([user_id], name: "website_user_id_idx")
}