minor fixes

Signed-off-by: ari melody <ari@arimelody.me>
This commit is contained in:
ari melody 2024-03-18 23:09:54 +00:00
parent 5eecef1d78
commit ae7477f86f
4 changed files with 99 additions and 67 deletions

73
db.go
View file

@ -30,17 +30,17 @@ CREATE TABLE IF NOT EXISTS Albums (
);
CREATE TABLE IF NOT EXISTS AlbumLinks (
id SERIAL primary key,
album varchar(64) references Albums(id),
album varchar(64) references Albums(id) on delete cascade,
name text,
url text
url text,
constraint albumlinks_pk primary key (album, name)
);
CREATE TABLE IF NOT EXISTS AlbumCredits (
id SERIAL primary key,
album varchar(64) references Albums(id),
artist int references Artists(id),
album varchar(64) references Albums(id) on delete cascade,
artist int references Artists(id) on delete cascade,
role text
constraint albumcredits_pk primary key (album, artist, role)
);`
func PushArtist(db *sqlx.DB, artist music.Artist) {
@ -70,20 +70,48 @@ func PushArtist(db *sqlx.DB, artist music.Artist) {
}
func PushAlbum(db *sqlx.DB, album music.Album) {
query := "SELECT count(*) FROM Albums WHERE id=$1"
var count int
err := db.Get(&count, query, album.Id)
err := db.Get(&count, "SELECT count(*) FROM Albums WHERE id=$1", album.Id)
if err != nil {
fmt.Printf("error while pushing album [%s] to the database: %v\n", album.Id, err)
}
query = "INSERT INTO Albums (id, title, release_date, artwork, buyname, buylink, description, lyrics) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)"
if count != 0 {
query = "UPDATE Albums SET title=$2, release_date=$3, artwork=$4, buyname=$5, buylink=$6, description=$7, lyrics=$8 WHERE id=$1"
artist_ids := map[string]int{};
for _, credit := range album.Credits {
if _, ok := artist_ids[credit.Artist.Name]; ok {
continue;
}
var id int
err := db.Get(&id, "SELECT id FROM Artists WHERE name=$1", credit.Artist.Name)
if err != nil {
continue;
}
artist_ids[credit.Artist.Name] = id
}
fmt.Printf("saving album [%s] to the database...", album.Id)
_, err = db.Exec(query,
if count == 0 {
fmt.Printf("creating album [%s]...", album.Id)
tx := db.MustBegin()
tx.MustExec("INSERT INTO Albums VALUES ($1, $2, $3, $4, $5, $6, $7, $8)", &album.Id, &album.Title, album.ReleaseDate.Format("2-Jan-2006"), &album.Artwork, &album.Buyname, &album.Buylink, &album.Description, &album.Lyrics)
for _, link := range album.Links {
tx.MustExec("INSERT INTO AlbumLinks (album, name, url) VALUES ($1, $2, $3)", &album.Id, &link.Name, &link.Url)
}
for _, credit := range album.Credits {
artist_id := artist_ids[credit.Artist.Name]
tx.MustExec("INSERT INTO AlbumCredits (album, artist, role) VALUES ($1, $2, $3)", &album.Id, &artist_id, &credit.Role)
}
tx.Commit()
fmt.Printf("done!\n")
return;
}
fmt.Printf("updating album [%s]...", album.Id)
tx := db.MustBegin()
tx.MustExec("UPDATE Albums SET title=$2, release_date=$3, artwork=$4, buyname=$5, buylink=$6, description=$7, lyrics=$8 WHERE id=$1",
&album.Id,
&album.Title,
album.ReleaseDate.Format("2-Jan-2006"),
@ -93,12 +121,21 @@ func PushAlbum(db *sqlx.DB, album music.Album) {
&album.Description,
&album.Lyrics,
)
if err != nil {
fmt.Printf("error while pushing album [%s] to the database: %v\n", album.Id, err)
// we're just gonna completely fresh them because
// like hell am i actually gonna comb through every
// single one of these
tx.MustExec("DELETE FROM AlbumLinks WHERE album=$1", &album.Id)
tx.MustExec("DELETE FROM AlbumCredits WHERE album=$1", &album.Id)
for _, link := range album.Links {
tx.MustExec("INSERT INTO AlbumLinks (album, name, url) VALUES ($1, $2, $3)", &album.Id, &link.Name, &link.Url)
}
fmt.Printf("done!\n")
for _, credit := range album.Credits {
artist_id := artist_ids[credit.Artist.Name]
tx.MustExec("INSERT INTO AlbumCredits (album, artist, role) VALUES ($1, $2, $3)", &album.Id, &artist_id, &credit.Role)
}
tx.Commit()
// defer db.Close()
fmt.Printf("done!\n")
}
func InitDatabase() *sqlx.DB {
@ -112,7 +149,7 @@ func InitDatabase() *sqlx.DB {
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(10)
db.MustExec(schema)
// db.MustExec(schema)
return db
}