// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

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

datasource db {
  provider = "mongodb"
  // NOTE: When using postgresql, mysql or sqlserver, uncomment the @db.Text annotations in model Account below
  // Further reading:
  // https://next-auth.js.org/adapters/prisma#create-the-prisma-schema
  // https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#string
  url      = env("DATABASE_URL")
}

enum Role {
  ADMIN
}

enum Platform {
  APP_IOS
  APP_ANDROID
  WEBSITE
  PDF
}

enum Skill {
  ENVIRONMENT
  PHONEMES
  WORDS
  SENTENCES
  DISCOURSE
  MUSIC
  BACKGROUND
}

enum SkillLevel {
  BEGINNER
  INTERMEDIATE
  ADVANCED
}

enum PaymentType {
  FREE
  SUBSCRIPTION_WEEKLY
  SUBSCRIPTION_MONTHLY
}

type RangeInput {
  min Int
  max Int
}

type PlatformLink {
  platform Platform
  link     String
}

type Manufacturer {
  name     String
  required Boolean
  notice   String?
}

type Photo {
  name String
  data Bytes
}

model AuditoryResource {
  id              String         @id @default(auto()) @map("_id") @db.ObjectId
  icon            String?
  name            String
  description     String
  photo           Photo?
  manufacturer    Manufacturer?
  ages            RangeInput
  skills          Skill[]
  skill_levels    SkillLevel[]
  payment_options PaymentType[]
  platform_links  PlatformLink[]
}

model Session {
  id           String   @id @default(auto()) @map("_id") @db.ObjectId
  sessionToken String   @unique
  userId       String   @db.ObjectId
  expires      DateTime
  user         User     @relation(fields: [userId], references: [id], onDelete: Cascade)
}

model User {
  id       String    @id @default(auto()) @map("_id") @db.ObjectId
  name     String
  username String    @unique
  password String
  role     Role
  sessions Session[]
}

model VerificationToken {
  id         String   @id @default(auto()) @map("_id") @db.ObjectId
  identifier String
  token      String   @unique
  expires    DateTime

  @@unique([identifier, token])
}