115 lines
4.1 KiB
Go
115 lines
4.1 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// ExerciseType represents the type of exercise
|
|
type ExerciseType string
|
|
|
|
const (
|
|
ExerciseTypeStrength ExerciseType = "strength"
|
|
ExerciseTypeCardio ExerciseType = "cardio"
|
|
)
|
|
|
|
// Exercise represents an exercise definition
|
|
type Exercise struct {
|
|
ID int64 `json:"id"`
|
|
Name string `json:"name"`
|
|
Type ExerciseType `json:"type"`
|
|
MuscleGroup string `json:"muscle_group,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// TrainingPlan represents a training plan template
|
|
type TrainingPlan struct {
|
|
ID int64 `json:"id"`
|
|
Name string `json:"name"`
|
|
Description string `json:"description,omitempty"`
|
|
Exercises []PlanExercise `json:"exercises,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// PlanExercise represents an exercise within a training plan
|
|
type PlanExercise struct {
|
|
ID int64 `json:"id"`
|
|
PlanID int64 `json:"plan_id"`
|
|
ExerciseID int64 `json:"exercise_id"`
|
|
Exercise Exercise `json:"exercise,omitempty"`
|
|
Sets int `json:"sets,omitempty"`
|
|
Reps int `json:"reps,omitempty"`
|
|
Duration int `json:"duration,omitempty"` // in seconds
|
|
Order int `json:"order"`
|
|
}
|
|
|
|
// Session represents a completed training session
|
|
type Session struct {
|
|
ID int64 `json:"id"`
|
|
PlanID *int64 `json:"plan_id,omitempty"`
|
|
Plan *TrainingPlan `json:"plan,omitempty"`
|
|
Date time.Time `json:"date"`
|
|
Notes string `json:"notes,omitempty"`
|
|
Entries []SessionEntry `json:"entries,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// SessionEntry represents an individual exercise entry in a session
|
|
type SessionEntry struct {
|
|
ID int64 `json:"id"`
|
|
SessionID int64 `json:"session_id"`
|
|
ExerciseID int64 `json:"exercise_id"`
|
|
Exercise *Exercise `json:"exercise,omitempty"`
|
|
Weight float64 `json:"weight,omitempty"` // in kg
|
|
Reps int `json:"reps,omitempty"` // for strength
|
|
SetsCompleted int `json:"sets_completed,omitempty"`
|
|
Duration int `json:"duration,omitempty"` // in seconds, for cardio
|
|
Distance float64 `json:"distance,omitempty"` // in km, for cardio
|
|
HeartRate int `json:"heart_rate,omitempty"` // average HR
|
|
Notes string `json:"notes,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// CreateExerciseRequest represents the request to create an exercise
|
|
type CreateExerciseRequest struct {
|
|
Name string `json:"name"`
|
|
Type ExerciseType `json:"type"`
|
|
MuscleGroup string `json:"muscle_group,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
}
|
|
|
|
// CreatePlanRequest represents the request to create a training plan
|
|
type CreatePlanRequest struct {
|
|
Name string `json:"name"`
|
|
Description string `json:"description,omitempty"`
|
|
Exercises []PlanExerciseInput `json:"exercises,omitempty"`
|
|
}
|
|
|
|
// PlanExerciseInput represents exercise input for plan creation
|
|
type PlanExerciseInput struct {
|
|
ExerciseID int64 `json:"exercise_id"`
|
|
Sets int `json:"sets,omitempty"`
|
|
Reps int `json:"reps,omitempty"`
|
|
Duration int `json:"duration,omitempty"`
|
|
Order int `json:"order"`
|
|
}
|
|
|
|
// CreateSessionRequest represents the request to create a session
|
|
type CreateSessionRequest struct {
|
|
PlanID *int64 `json:"plan_id,omitempty"`
|
|
Date time.Time `json:"date"`
|
|
Notes string `json:"notes,omitempty"`
|
|
}
|
|
|
|
// CreateSessionEntryRequest represents the request to add an entry to a session
|
|
type CreateSessionEntryRequest struct {
|
|
ExerciseID int64 `json:"exercise_id"`
|
|
Weight float64 `json:"weight,omitempty"`
|
|
Reps int `json:"reps,omitempty"`
|
|
SetsCompleted int `json:"sets_completed,omitempty"`
|
|
Duration int `json:"duration,omitempty"`
|
|
Distance float64 `json:"distance,omitempty"`
|
|
HeartRate int `json:"heart_rate,omitempty"`
|
|
Notes string `json:"notes,omitempty"`
|
|
}
|