package db import "fmt" // Route is a database route record. type Route struct { ID int64 ListenerID int64 Hostname string Backend string Mode string // "l4" or "l7" TLSCert string TLSKey string BackendTLS bool SendProxyProtocol bool } // ListRoutes returns all routes for a listener. func (s *Store) ListRoutes(listenerID int64) ([]Route, error) { rows, err := s.db.Query( `SELECT id, listener_id, hostname, backend, mode, tls_cert, tls_key, backend_tls, send_proxy_protocol FROM routes WHERE listener_id = ? ORDER BY hostname`, listenerID, ) if err != nil { return nil, fmt.Errorf("querying routes: %w", err) } defer rows.Close() var routes []Route for rows.Next() { var r Route if err := rows.Scan(&r.ID, &r.ListenerID, &r.Hostname, &r.Backend, &r.Mode, &r.TLSCert, &r.TLSKey, &r.BackendTLS, &r.SendProxyProtocol); err != nil { return nil, fmt.Errorf("scanning route: %w", err) } routes = append(routes, r) } return routes, rows.Err() } // CreateRoute inserts a route and returns its ID. func (s *Store) CreateRoute(listenerID int64, hostname, backend, mode, tlsCert, tlsKey string, backendTLS, sendProxyProtocol bool) (int64, error) { result, err := s.db.Exec( `INSERT INTO routes (listener_id, hostname, backend, mode, tls_cert, tls_key, backend_tls, send_proxy_protocol) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, listenerID, hostname, backend, mode, tlsCert, tlsKey, backendTLS, sendProxyProtocol, ) if err != nil { return 0, fmt.Errorf("inserting route: %w", err) } return result.LastInsertId() } // DeleteRoute deletes a route by listener ID and hostname. func (s *Store) DeleteRoute(listenerID int64, hostname string) error { result, err := s.db.Exec( "DELETE FROM routes WHERE listener_id = ? AND hostname = ?", listenerID, hostname, ) if err != nil { return fmt.Errorf("deleting route: %w", err) } n, _ := result.RowsAffected() if n == 0 { return fmt.Errorf("route %q not found on listener %d", hostname, listenerID) } return nil }