[Pharo] Personal fitness tracker web app.
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