View raw

My Fitness Tracker Architecture

Table of Contents

#+SUBTITLE: Notes on MFT's implementation

Use cases

  @startuml
  skinparam defaultFontName Inter

  title MFT Use Cases
  left to right direction

  actor Athlete
  actor Coach

  usecase "Log workout" as log_workout
  usecase "Log weight" as log_weight
  usecase "Review past performance" as review_performance
  usecase "Suggest workout" as suggest_weight

  Athlete --> log_workout
  Athlete --> log_weight
  Athlete --> review_performance

  Coach --> log_workout
  Coach --> log_weight
  Coach --> suggest_weight
  Coach --> review_performance

  @enduml

#+RESULTS: file:use-cases.png

Classes

  @startuml
  ' !theme cerulean-outline
  skinparam defaultFontName Inter

  title MFT Classes

  ' Define classes
  class MFTUser {
          + Integer id
          + String username
          + Blob passwordHash
          + Date dateOfBirth
          + String realFirstName
          + String realLastName
          + Bool isLoggedIn
          + Date lastLoginDateAndTime
  }

  class MFTWorkout {
          + Integer id
          + Date date
          + String description
  }

  class MFTExercise {
          + Integer id
          + Integer workout_id
          + String name
          + Integer sets
          + Integer reps
  }
  class MFTSet {
          + Integer id
          + Integer sets
          + Integer reps
          + Integer rpe
  }

  ' Define relationships
  MFTUser "1" --* MFTWorkout : has >
  MFTWorkout "1" --* MFTExercise : contains >
  MFTExercise "1" --* MFTSet : contains >
  MFTUser "1" --* MFTWeights : tracks >

  @enduml

#+RESULTS: file:model.png

Database model

  @startuml
  skinparam defaultFontName Inter

  title Database model

  entity "users" {
          ,* id: int <<PK>>
          ,* username: varchar
          ,* email: varchar
          ,* password_hash: varchar
  }

  entity "prospects" {
          ,* id: int <<PK>>
          ,* email: varchar
          ,* contact_date: date
  }

  entity "workouts" {
          ,* id: int <<PK>>
          ,* user_id: int <<FK>>
          ,* date: date
          ,* duration: int
  }

  entity "exercises" {
          ,* id: int <<PK>>
          ,* name: varchar
          ,* primaryMuscle: varchar
  }

  entity "sets" {
          ,* id: int <<PK>>
          ,* workout_id: int <<FK>>
          ,* exercise_id: int <<FK>>
          ,* reps: int
          ,* weight: float
  }

  workouts }|--|{ users
  sets }|--|{ workouts
  sets }|--|{ exercises

  @enduml

#+RESULTS: file:model.jpg