41 lines
1.3 KiB
Go
41 lines
1.3 KiB
Go
package connections
|
|
|
|
import "fmt"
|
|
|
|
func (s *ConnectionService) Search(query string) ([]Connection, error) {
|
|
like := "%" + query + "%"
|
|
rows, err := s.db.Query(
|
|
`SELECT id, name, hostname, port, protocol, group_id, credential_id,
|
|
COALESCE(color,''), tags, COALESCE(notes,''), COALESCE(options,'{}'),
|
|
sort_order, last_connected, created_at, updated_at
|
|
FROM connections
|
|
WHERE name LIKE ? COLLATE NOCASE
|
|
OR hostname LIKE ? COLLATE NOCASE
|
|
OR tags LIKE ? COLLATE NOCASE
|
|
OR notes LIKE ? COLLATE NOCASE
|
|
ORDER BY last_connected DESC NULLS LAST, name`,
|
|
like, like, like, like,
|
|
)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("search connections: %w", err)
|
|
}
|
|
defer rows.Close()
|
|
return scanConnections(rows)
|
|
}
|
|
|
|
func (s *ConnectionService) FilterByTag(tag string) ([]Connection, error) {
|
|
rows, err := s.db.Query(
|
|
`SELECT c.id, c.name, c.hostname, c.port, c.protocol, c.group_id, c.credential_id,
|
|
COALESCE(c.color,''), c.tags, COALESCE(c.notes,''), COALESCE(c.options,'{}'),
|
|
c.sort_order, c.last_connected, c.created_at, c.updated_at
|
|
FROM connections c, json_each(c.tags) AS t
|
|
WHERE t.value = ?
|
|
ORDER BY c.name`, tag,
|
|
)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("filter by tag: %w", err)
|
|
}
|
|
defer rows.Close()
|
|
return scanConnections(rows)
|
|
}
|