package store import ( "database/sql" "fmt" "krafttrainer/internal/model" ) // ListUsers gibt alle Nutzer zurück. func (s *Store) ListUsers() ([]model.User, error) { rows, err := s.db.Query(`SELECT id, name, created_at FROM users ORDER BY created_at`) if err != nil { return nil, fmt.Errorf("Nutzer abfragen: %w", err) } defer rows.Close() var users []model.User for rows.Next() { var u model.User if err := rows.Scan(&u.ID, &u.Name, &u.CreatedAt); err != nil { return nil, fmt.Errorf("Nutzer scannen: %w", err) } users = append(users, u) } if users == nil { users = []model.User{} } return users, rows.Err() } // CreateUser legt einen neuen Nutzer an. func (s *Store) CreateUser(name string) (*model.User, error) { result, err := s.db.Exec(`INSERT INTO users (name) VALUES (?)`, name) if err != nil { return nil, fmt.Errorf("Nutzer erstellen: %w", err) } id, _ := result.LastInsertId() return s.getUser(id) } // DeleteUser löscht einen Nutzer, sofern noch mindestens ein weiterer existiert. func (s *Store) DeleteUser(id int64) error { var count int if err := s.db.QueryRow(`SELECT COUNT(*) FROM users`).Scan(&count); err != nil { return fmt.Errorf("Nutzeranzahl prüfen: %w", err) } if count <= 1 { return fmt.Errorf("LAST_USER: letzter Nutzer kann nicht gelöscht werden") } result, err := s.db.Exec(`DELETE FROM users WHERE id = ?`, id) if err != nil { return fmt.Errorf("Nutzer löschen: %w", err) } rows, _ := result.RowsAffected() if rows == 0 { return sql.ErrNoRows } return nil } 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). Scan(&u.ID, &u.Name, &u.CreatedAt) if err == sql.ErrNoRows { return nil, nil } if err != nil { return nil, fmt.Errorf("Nutzer abfragen: %w", err) } return &u, nil }