Files
StrengthApp/prisma/schema.prisma
2026-03-24 07:53:17 +01:00

156 lines
4.1 KiB
Plaintext

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
// Get a free hosted Postgres database in seconds: `npx create-db`
generator client {
provider = "prisma-client"
output = "../generated/prisma"
}
datasource db {
provider = "mysql"
}
model User {
id String @id
name String @db.Text
email String
emailVerified Boolean @default(false)
image String? @db.Text
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
sessions Session[]
accounts Account[]
@@unique([email])
@@map("user")
}
model Session {
id String @id
expiresAt DateTime
token String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
ipAddress String? @db.Text
userAgent String? @db.Text
userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([token])
@@index([userId(length: 191)])
@@map("session")
}
model Account {
id String @id
accountId String @db.Text
providerId String @db.Text
userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
accessToken String? @db.Text
refreshToken String? @db.Text
idToken String? @db.Text
accessTokenExpiresAt DateTime?
refreshTokenExpiresAt DateTime?
scope String? @db.Text
password String? @db.Text
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([userId(length: 191)])
@@map("account")
}
model Verification {
id String @id
identifier String @db.Text
value String @db.Text
expiresAt DateTime
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([identifier(length: 191)])
@@map("verification")
}
model Exercise {
id Int @id @default(autoincrement())
name String
muscleGroup String
SFR Decimal
mesoCycleExercises MesoCycleExercise[]
}
model MesoCycle {
id Int @id @default(autoincrement())
name String
totalWeeks Int
currentWeek Int
isAsync Boolean
//user User @relation(fields: [userId], references: [id])
//userId Int // for
mesoCycleDays MesoCycleDay[]
}
model MesoCycleDay {
id Int @id @default(autoincrement())
weekday String? // If async === NULL
orderIndex Int
mesoCycle MesoCycle @relation(fields: [mesoCycleId], references: [id])
mesoCycleId Int
mesoCycleExercises MesoCycleExercise[]
workOutSessions WorkoutSession[]
}
model MesoCycleExercise {
id Int @id @default(autoincrement())
startingSets Int
orderIndex Int
mesoCycleDay MesoCycleDay @relation(fields: [mesoCycleDayId], references: [id])
mesoCycleDayId Int
exercise Exercise @relation(fields: [exerciseId], references: [id])
exerciseId Int
exerciseLogs ExerciseLog[]
}
model WorkoutSession {
id Int @id @default(autoincrement())
weekNumber Int
isDeload Boolean
completedAt DateTime? // Null until finished
mesoCycleDay MesoCycleDay @relation(fields: [mesoCycleDayId], references: [id])
mesoCycleDayId Int
//user User @relation(fields: [userId], references: [id])
//userId Int
exerciseLogs ExerciseLog[]
}
model ExerciseLog {
id Int @id @default(autoincrement())
sets Int
reps Int
weight Decimal
workoutSession WorkoutSession @relation(fields: [workoutSessionId], references: [id])
workoutSessionId Int
mesoCycleExercise MesoCycleExercise @relation(fields: [mesoCycleExerciseId], references: [id])
mesoCycleExerciseId Int
sessionFeedbacks SessionFeedback[]
}
model SessionFeedback {
id Int @id @default(autoincrement())
question String
answer String
exerciseLog ExerciseLog @relation(fields: [exerciseLogId], references: [id])
exerciseLogId Int
}