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

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

model User {
  id               Int       @id @default(autoincrement())
  username         String
  password         String?
  oauth            Boolean   @default(false)
  oauthProvider    String?
  oauthAccessToken String?
  avatar           String?
  token            String
  administrator    Boolean   @default(false)
  superAdmin       Boolean   @default(false)
  systemTheme      String    @default("system")
  embedTitle       String?
  embedColor       String    @default("#2f3136")
  embedSiteName    String?   @default("{image.file} • {user.name}")
  ratelimit        DateTime?
  domains          String[]
  images           Image[]
  urls             Url[]
  Invite           Invite[]
}

enum ImageFormat {
  UUID
  DATE
  RANDOM
  NAME
}

model Image {
  id         Int             @id @default(autoincrement())
  file       String
  mimetype   String          @default("image/png")
  created_at DateTime        @default(now())
  expires_at DateTime?
  maxViews   Int?
  views      Int             @default(0)
  favorite   Boolean         @default(false)
  embed      Boolean         @default(false)
  password   String?
  invisible  InvisibleImage?
  format     ImageFormat     @default(RANDOM)
  user       User            @relation(fields: [userId], references: [id])
  userId     Int
}

model InvisibleImage {
  id      Int    @id @default(autoincrement())
  invis   String @unique
  imageId Int    @unique
  image   Image  @relation(fields: [imageId], references: [id])
}

model Url {
  id          String        @id @unique
  destination String
  vanity      String?
  created_at  DateTime      @default(now())
  maxViews    Int?
  views       Int           @default(0)
  invisible   InvisibleUrl?
  user        User          @relation(fields: [userId], references: [id])
  userId      Int
}

model InvisibleUrl {
  id    Int    @id @default(autoincrement())
  invis String @unique
  urlId String @unique
  url   Url    @relation(fields: [urlId], references: [id])
}

model Stats {
  id         Int      @id @default(autoincrement())
  created_at DateTime @default(now())
  data       Json
}

model Invite {
  id         Int       @id @default(autoincrement())
  code       String    @unique
  created_at DateTime  @default(now())
  expires_at DateTime?
  used       Boolean   @default(false)

  createdBy   User @relation(fields: [createdById], references: [id])
  createdById Int
}
