67 lines
1.8 KiB
Go
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
|
|
}
|