wireplanner/internal/db/ports.go

75 lines
2.1 KiB
Go

package db
import (
"database/sql"
"lostcavewireplanner/internal/models"
)
func (s *Store) PortGetByDeviceID(deviceID int64) ([]models.DevicePort, error) {
rows, err := s.DB.Query(`SELECT id, device_id, name, side, position FROM device_ports WHERE device_id = ? ORDER BY side, position`, deviceID)
if err != nil {
return nil, err
}
defer rows.Close()
var ports []models.DevicePort
for rows.Next() {
var p models.DevicePort
if err := rows.Scan(&p.ID, &p.DeviceID, &p.Name, &p.Side, &p.Position); err != nil {
return nil, err
}
ports = append(ports, p)
}
return ports, rows.Err()
}
func (s *Store) PortGetByID(id int64) (*models.DevicePort, error) {
p := &models.DevicePort{}
err := s.DB.QueryRow(`SELECT id, device_id, name, side, position FROM device_ports WHERE id = ?`, id).
Scan(&p.ID, &p.DeviceID, &p.Name, &p.Side, &p.Position)
if err == sql.ErrNoRows {
return nil, nil
}
if err != nil {
return nil, err
}
return p, nil
}
func (s *Store) PortGetPaired(deviceID int64, name string, side string) (*models.DevicePort, error) {
p := &models.DevicePort{}
err := s.DB.QueryRow(`SELECT id, device_id, name, side, position FROM device_ports WHERE device_id = ? AND name = ? AND side = ?`, deviceID, name, side).
Scan(&p.ID, &p.DeviceID, &p.Name, &p.Side, &p.Position)
if err == sql.ErrNoRows {
return nil, nil
}
if err != nil {
return nil, err
}
return p, nil
}
func (s *Store) portCreateFromModelTx(tx *sql.Tx, deviceID int64, model *models.DeviceModel) error {
for _, mp := range model.Ports {
if model.IsPatchPanel || model.IsWallSocket {
_, err := tx.Exec(`INSERT INTO device_ports (device_id, name, side, position) VALUES (?, ?, 'front', ?)`,
deviceID, mp.Name, mp.Position)
if err != nil {
return err
}
_, err = tx.Exec(`INSERT INTO device_ports (device_id, name, side, position) VALUES (?, ?, 'back', ?)`,
deviceID, mp.Name, mp.Position)
if err != nil {
return err
}
} else {
_, err := tx.Exec(`INSERT INTO device_ports (device_id, name, side, position) VALUES (?, ?, ?, ?)`,
deviceID, mp.Name, mp.Side, mp.Position)
if err != nil {
return err
}
}
}
return nil
}