Files
vibesonic/internal/database/radio.go
T

67 lines
1.8 KiB
Go

package database
import (
"database/sql"
"errors"
"git.noroutes.net/NoRoutes/vibetunes/internal/idgen"
)
type RadioStation struct {
ID string
Name string
StreamURL string
HomepageURL string
}
func CreateRadioStation(db *sql.DB, name, streamURL, homepageURL string) (*RadioStation, error) {
id := idgen.New("rs")
_, err := db.Exec(`INSERT INTO internet_radio_stations (id, name, stream_url, homepage_url) VALUES (?, ?, ?, ?)`,
id, name, streamURL, homepageURL)
if err != nil {
return nil, err
}
return GetRadioStation(db, id)
}
func GetRadioStation(db *sql.DB, id string) (*RadioStation, error) {
var r RadioStation
err := db.QueryRow(`SELECT id, name, stream_url, homepage_url FROM internet_radio_stations WHERE id = ?`, id).
Scan(&r.ID, &r.Name, &r.StreamURL, &r.HomepageURL)
if errors.Is(err, sql.ErrNoRows) {
return nil, ErrNotFound
}
if err != nil {
return nil, err
}
return &r, nil
}
func ListRadioStations(db *sql.DB) ([]*RadioStation, error) {
rows, err := db.Query(`SELECT id, name, stream_url, homepage_url FROM internet_radio_stations ORDER BY name COLLATE NOCASE`)
if err != nil {
return nil, err
}
defer rows.Close()
var out []*RadioStation
for rows.Next() {
var r RadioStation
if err := rows.Scan(&r.ID, &r.Name, &r.StreamURL, &r.HomepageURL); err != nil {
return nil, err
}
out = append(out, &r)
}
return out, rows.Err()
}
func UpdateRadioStation(db *sql.DB, id, name, streamURL, homepageURL string) error {
_, err := db.Exec(`UPDATE internet_radio_stations SET name = ?, stream_url = ?, homepage_url = ? WHERE id = ?`,
name, streamURL, homepageURL, id)
return err
}
func DeleteRadioStation(db *sql.DB, id string) error {
_, err := db.Exec(`DELETE FROM internet_radio_stations WHERE id = ?`, id)
return err
}