Initial commit

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Christoph K.
2026-03-21 15:03:55 +01:00
commit dfd66e43c6
78 changed files with 6219 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
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"`
}