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

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

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

model User {
  id            String    @id @default(cuid())
  userId        String    @unique
  firstName     String
  lastName      String
  email         String    @unique
  emailVerified DateTime?

  hash String
  salt String

  age    String
  weight String
  height String
  gender String

  stripeCustomerId String? @unique @map(name: "stripe_customer_id")
  isSubscribed     Boolean @default(false) @map(name: "is_subscribed")
  interval         String?

  isAdmin Boolean @default(false) @map(name: "is_admin")

  verificationToken EmailVerificationToken?
  session           Session?

  @@map(name: "users")
}

model EmailVerificationToken {
  id     Int      @id @default(autoincrement())
  expiry DateTime
  token  String
  email  String   @unique
  user   User     @relation(fields: [email], references: [email])
}

model Session {
  id            String   @id @default(cuid())
  session_token String   @unique
  userId        String   @unique
  expires       DateTime

  user User @relation(fields: [userId], references: [userId], onDelete: Cascade)

  @@index([userId])
  @@map(name: "sessions")
}

model Trainer {
  id        String  @id @default(cuid())
  type      String
  firstName String
  lastName  String
  bio       String
  subtitle  String
  image     String
  frontPage Boolean @default(false) @map(name: "front_page")

  @@map(name: "trainers")
}

model Program {
  id          String @id @default(cuid())
  name        String
  description String
  category    String
  goal        String
  level       String
  image       String
  duration    String

  exercises ProgramExercise[]
}

model Exercise {
  id          String @id @default(cuid())
  name        String
  description String
  category    String
  level       String
  image       String
  video       String

  programs ProgramExercise[]

  @@index([name])
}

model ProgramExercise {
  id         String @id @default(cuid())
  position   Int
  programId  String
  exerciseId String
  reps       String
  sets       String
  rest       String

  program  Program  @relation(fields: [programId], references: [id])
  exercise Exercise @relation(fields: [exerciseId], references: [id])

  @@unique([programId, exerciseId])
  @@index([exerciseId, programId])
}