package main import ( "context" "log" "github.com/google/uuid" "github.com/jackc/pgx/v5" ) var ( connstring = "host=localhost user=steino dbname=dndmusicbot sslmode=disable" ) func init() { log.Println("db.go loading..") var err error app.db, err = pgx.Connect(context.Background(), connstring) if err != nil { log.Fatal(err) } log.Println("db.go done.") } type Playlist struct { Id uuid.UUID Url string Title string } func (app App) GetPlaylists() (playlists []Playlist, err error) { log.Println(app.db.Ping(context.Background())) rows, err := app.db.Query(context.Background(), "SELECT id, url, title FROM playlists") if err != nil { return nil, err } playlists, err = pgx.CollectRows(rows, pgx.RowToStructByName[Playlist]) return } func (app App) GetPlaylist(id uuid.UUID) (*Playlist, error) { rows, err := app.db.Query(context.Background(), "SELECT id, url, title FROM playlists where id=$1 limit 1", id) if err != nil { return nil, err } //var out Playlist out, err := pgx.CollectOneRow(rows, pgx.RowToAddrOfStructByName[Playlist]) if err != nil { return new(Playlist), err } return out, nil } func (app App) AddPlaylist(title string, uri string) (uuid.UUID, error) { id := uuid.New() _, err := app.db.Exec(context.Background(), "INSERT INTO playlists VALUES ($1, $2, $3)", id, title, uri) if err != nil { return *new(uuid.UUID), err } return id, nil }