package model import ( "errors" "strings" "time" ) // Exercise repräsentiert eine Kraftübung. type Exercise struct { ID int64 `json:"id"` Name string `json:"name"` Description string `json:"description"` MuscleGroup string `json:"muscle_group"` WeightStepKg float64 `json:"weight_step_kg"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt *time.Time `json:"deleted_at,omitempty"` } // CreateExerciseRequest enthält die Felder zum Anlegen einer Übung. type CreateExerciseRequest struct { Name string `json:"name"` Description string `json:"description"` MuscleGroup string `json:"muscle_group"` WeightStepKg *float64 `json:"weight_step_kg"` } // Validate prüft und normalisiert den Request. Setzt Default für WeightStepKg. func (r *CreateExerciseRequest) Validate() error { r.Name = strings.TrimSpace(r.Name) if len(r.Name) == 0 || len(r.Name) > 100 { return errors.New("Name muss 1–100 Zeichen lang sein") } if !ValidMuscleGroup(r.MuscleGroup) { return errors.New("Ungültige Muskelgruppe") } if r.WeightStepKg != nil { if *r.WeightStepKg <= 0 { return errors.New("Gewichtsschritt muss > 0 sein") } } else { def := 2.5 r.WeightStepKg = &def } return nil }