init
This commit is contained in:
@@ -157,6 +157,8 @@ func (s *Store) CreateLog(sessionID int64, req *model.CreateLogRequest) (*model.
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// exercise_name wird denormalisiert gespeichert, damit historische Logs
|
||||
// erhalten bleiben wenn die Übung später gelöscht wird.
|
||||
var exerciseName string
|
||||
err := s.db.QueryRow(`SELECT name FROM exercises WHERE id = ? AND deleted_at IS NULL`, req.ExerciseID).Scan(&exerciseName)
|
||||
if err == sql.ErrNoRows {
|
||||
@@ -197,6 +199,7 @@ func (s *Store) UpdateLog(sessionID, logID int64, req *model.UpdateLogRequest) (
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Dynamisches UPDATE: nur explizit übergebene Felder werden geändert (Partial Update).
|
||||
updates := []string{}
|
||||
args := []any{}
|
||||
if req.WeightKg != nil {
|
||||
@@ -293,7 +296,8 @@ func (s *Store) DeleteSession(id, userID int64) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// checkSessionOpen prüft ob eine Session offen ist.
|
||||
// checkSessionOpen prüft ob eine Session existiert und noch nicht beendet wurde.
|
||||
// Gibt einen Fehler mit "SESSION_CLOSED" zurück wenn ended_at bereits gesetzt ist.
|
||||
func (s *Store) checkSessionOpen(sessionID int64) error {
|
||||
var endedAt *string
|
||||
err := s.db.QueryRow(`SELECT ended_at FROM sessions WHERE id = ?`, sessionID).Scan(&endedAt)
|
||||
@@ -309,7 +313,7 @@ func (s *Store) checkSessionOpen(sessionID int64) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// getLog gibt einen einzelnen Log-Eintrag zurück.
|
||||
// getLog lädt einen einzelnen Session-Log-Eintrag anhand seiner ID.
|
||||
func (s *Store) getLog(id int64) (*model.SessionLog, error) {
|
||||
var log model.SessionLog
|
||||
err := s.db.QueryRow(`
|
||||
@@ -325,7 +329,7 @@ func (s *Store) getLog(id int64) (*model.SessionLog, error) {
|
||||
return &log, nil
|
||||
}
|
||||
|
||||
// getSessionLogs gibt alle Logs einer Session zurück.
|
||||
// getSessionLogs lädt alle Logs einer Session, sortiert nach Übung und Satznummer.
|
||||
func (s *Store) getSessionLogs(sessionID int64) ([]model.SessionLog, error) {
|
||||
rows, err := s.db.Query(`
|
||||
SELECT id, session_id, exercise_id, exercise_name, set_number, weight_kg, reps, note, logged_at
|
||||
|
||||
@@ -168,7 +168,8 @@ func (s *Store) SoftDeleteSet(id, userID int64) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// getSetExercises lädt die Übungen eines Sets sortiert nach Position.
|
||||
// getSetExercises lädt die nicht-gelöschten Übungen eines Sets, sortiert nach Position.
|
||||
// Soft-gelöschte Übungen werden nicht zurückgegeben.
|
||||
func (s *Store) getSetExercises(setID int64) ([]model.Exercise, error) {
|
||||
rows, err := s.db.Query(`
|
||||
SELECT e.id, e.name, e.description, e.muscle_group, e.weight_step_kg, e.created_at, e.updated_at
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"krafttrainer/internal/model"
|
||||
)
|
||||
|
||||
// StatsOverview enthält die Gesamtübersicht.
|
||||
// StatsOverview enthält aggregierte Trainingsdaten eines Nutzers.
|
||||
type StatsOverview struct {
|
||||
TotalSessions int `json:"total_sessions"`
|
||||
TotalVolumeKg float64 `json:"total_volume_kg"`
|
||||
|
||||
@@ -59,6 +59,7 @@ func (s *Store) DeleteUser(id int64) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// getUser lädt einen Nutzer anhand seiner ID.
|
||||
func (s *Store) getUser(id int64) (*model.User, error) {
|
||||
var u model.User
|
||||
err := s.db.QueryRow(`SELECT id, name, created_at FROM users WHERE id = ?`, id).
|
||||
|
||||
Reference in New Issue
Block a user