package db import ( "database/sql" "lostcavewireplanner/internal/models" ) func (s *Store) RackGetAll() ([]models.Rack, error) { rows, err := s.DB.Query(`SELECT id, name, rack_type, depth, height_units, comment, created_at, updated_at FROM racks ORDER BY name`) if err != nil { return nil, err } defer rows.Close() var racks []models.Rack for rows.Next() { var r models.Rack if err := rows.Scan(&r.ID, &r.Name, &r.RackType, &r.Depth, &r.HeightUnits, &r.Comment, &r.CreatedAt, &r.UpdatedAt); err != nil { return nil, err } racks = append(racks, r) } return racks, rows.Err() } func (s *Store) RackGetByID(id int64) (*models.Rack, error) { r := &models.Rack{} err := s.DB.QueryRow(`SELECT id, name, rack_type, depth, height_units, comment, created_at, updated_at FROM racks WHERE id = ?`, id). Scan(&r.ID, &r.Name, &r.RackType, &r.Depth, &r.HeightUnits, &r.Comment, &r.CreatedAt, &r.UpdatedAt) if err == sql.ErrNoRows { return nil, nil } if err != nil { return nil, err } return r, nil } func (s *Store) RackCreate(r *models.Rack) (int64, error) { res, err := s.DB.Exec(`INSERT INTO racks (name, rack_type, depth, height_units, comment) VALUES (?, ?, ?, ?, ?)`, r.Name, r.RackType, r.Depth, r.HeightUnits, r.Comment) if err != nil { return 0, err } return res.LastInsertId() } func (s *Store) RackUpdate(r *models.Rack) error { _, err := s.DB.Exec(`UPDATE racks SET name=?, rack_type=?, depth=?, height_units=?, comment=?, updated_at=datetime('now') WHERE id=?`, r.Name, r.RackType, r.Depth, r.HeightUnits, r.Comment, r.ID) return err } func (s *Store) RackDelete(id int64) error { _, err := s.DB.Exec(`DELETE FROM racks WHERE id=?`, id) return err } func (s *Store) RackGetByName(name string) (*models.Rack, error) { r := &models.Rack{} err := s.DB.QueryRow(`SELECT id, name, rack_type, depth, height_units, comment, created_at, updated_at FROM racks WHERE name = ?`, name). Scan(&r.ID, &r.Name, &r.RackType, &r.Depth, &r.HeightUnits, &r.Comment, &r.CreatedAt, &r.UpdatedAt) if err == sql.ErrNoRows { return nil, nil } if err != nil { return nil, err } return r, nil }