75 lines
2.1 KiB
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
|
|
}
|