#+TITLE: My Fitness Tracker Architecture #+SUBTITLE: Notes on MFT's implementation #+AUTHOR: Marius Peter #+DATE: <2024-05-07 Tue> * Use cases #+begin_src plantuml :file use-cases.png @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 #+end_src #+RESULTS: [[file:use-cases.png]] * Classes #+begin_src plantuml :file model.png @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 #+end_src #+RESULTS: [[file:model.png]] * Database model #+begin_src plantuml :file model.jpg @startuml skinparam defaultFontName Inter title Database model entity "users" { ,* id: int <> ,* username: varchar ,* email: varchar ,* password_hash: varchar } entity "prospects" { ,* id: int <> ,* email: varchar ,* contact_date: date } entity "workouts" { ,* id: int <> ,* user_id: int <> ,* date: date ,* duration: int } entity "exercises" { ,* id: int <> ,* name: varchar ,* primaryMuscle: varchar } entity "sets" { ,* id: int <> ,* workout_id: int <> ,* exercise_id: int <> ,* reps: int ,* weight: float } workouts }|--|{ users sets }|--|{ workouts sets }|--|{ exercises @enduml #+end_src #+RESULTS: [[file:model.jpg]]