Initial commit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
76
backend/internal/model/session_log.go
Executable file
76
backend/internal/model/session_log.go
Executable 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"`
|
||||
}
|
||||
Reference in New Issue
Block a user