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"` }