77 lines
2.2 KiB
Go
Executable File
77 lines
2.2 KiB
Go
Executable File
package model
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
)
|
|
|
|
// SessionLog repräsentiert einen einzelnen Satz innerhalb einer Session.
|
|
type SessionLog struct {
|
|
ID int64 `json:"id"`
|
|
SessionID int64 `json:"session_id"`
|
|
ExerciseID int64 `json:"exercise_id"`
|
|
ExerciseName string `json:"exercise_name"`
|
|
SetNumber int `json:"set_number"`
|
|
WeightKg float64 `json:"weight_kg"`
|
|
Reps int `json:"reps"`
|
|
Note string `json:"note"`
|
|
LoggedAt time.Time `json:"logged_at"`
|
|
}
|
|
|
|
// CreateLogRequest enthält die Felder zum Loggen eines Satzes.
|
|
type CreateLogRequest struct {
|
|
ExerciseID int64 `json:"exercise_id"`
|
|
SetNumber int `json:"set_number"`
|
|
WeightKg float64 `json:"weight_kg"`
|
|
Reps int `json:"reps"`
|
|
Note string `json:"note"`
|
|
}
|
|
|
|
// Validate prüft den Request.
|
|
func (r *CreateLogRequest) Validate() error {
|
|
if r.SetNumber < 1 {
|
|
return errors.New("Satznummer muss ≥ 1 sein")
|
|
}
|
|
if r.WeightKg < 0 || r.WeightKg > 999 {
|
|
return errors.New("Gewicht muss zwischen 0 und 999 kg liegen")
|
|
}
|
|
if r.Reps < 0 || r.Reps > 999 {
|
|
return errors.New("Wiederholungen müssen zwischen 0 und 999 liegen")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// UpdateLogRequest enthält die Felder zum Korrigieren eines Satzes.
|
|
type UpdateLogRequest struct {
|
|
WeightKg *float64 `json:"weight_kg"`
|
|
Reps *int `json:"reps"`
|
|
Note *string `json:"note"`
|
|
}
|
|
|
|
// Validate prüft den Request.
|
|
func (r *UpdateLogRequest) Validate() error {
|
|
if r.WeightKg != nil && (*r.WeightKg < 0 || *r.WeightKg > 999) {
|
|
return errors.New("Gewicht muss zwischen 0 und 999 kg liegen")
|
|
}
|
|
if r.Reps != nil && (*r.Reps < 0 || *r.Reps > 999) {
|
|
return errors.New("Wiederholungen müssen zwischen 0 und 999 liegen")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// LastLogResponse enthält die letzten Werte einer Übung.
|
|
type LastLogResponse struct {
|
|
WeightKg float64 `json:"weight_kg"`
|
|
Reps int `json:"reps"`
|
|
}
|
|
|
|
// ExerciseStats enthält aggregierte Statistiken einer Übung.
|
|
type ExerciseStats struct {
|
|
ExerciseID int64 `json:"exercise_id"`
|
|
ExerciseName string `json:"exercise_name"`
|
|
MaxWeightKg float64 `json:"max_weight_kg"`
|
|
TotalVolumeKg float64 `json:"total_volume_kg"`
|
|
TotalSets int `json:"total_sets"`
|
|
LastTrained string `json:"last_trained"`
|
|
}
|