updated schema to support album tracks

Signed-off-by: ari melody <ari@arimelody.me>
This commit is contained in:
ari melody 2024-03-23 22:20:51 +00:00
parent 63221e9fd2
commit 749f9bc8b7
10 changed files with 324 additions and 806 deletions

37
db.go
View file

@ -25,24 +25,32 @@ CREATE TABLE IF NOT EXISTS musicreleases (
release_date DATE NOT NULL,
artwork TEXT,
buyname TEXT,
buylink TEXT,
description TEXT,
lyrics TEXT
buylink TEXT
);
CREATE TABLE IF NOT EXISTS musiclinks (
album VARCHAR(64) REFERENCES musicreleases(id) ON DELETE CASCADE ON UPDATE CASCADE,
release VARCHAR(64) REFERENCES musicreleases(id) ON DELETE CASCADE ON UPDATE CASCADE,
name TEXT,
url TEXT,
CONSTRAINT musiclinks_pk PRIMARY KEY (album, name)
CONSTRAINT musiclinks_pk PRIMARY KEY (release, name)
);
CREATE TABLE IF NOT EXISTS musiccredits (
album VARCHAR(64) REFERENCES musicreleases(ID) ON DELETE CASCADE,
release VARCHAR(64) REFERENCES musicreleases(ID) ON DELETE CASCADE,
artist TEXT REFERENCES artists(id) ON DELETE CASCADE,
role TEXT,
meta BOOLEAN,
constraint musiccredits_pk PRIMARY KEY (album, artist, role)
constraint musiccredits_pk PRIMARY KEY (release, artist)
);
CREATE TABLE IF NOT EXISTS musictracks (
release VARCHAR(64) REFERENCES musicreleases(ID) ON DELETE CASCADE,
number INT NOT NULL,
title TEXT NOT NULL,
description TEXT,
lyrics TEXT,
preview_url TEXT,
CONSTRAINT musictracks_pk PRIMARY KEY (release, number)
);`
func PushArtist(db *sqlx.DB, artist music.Artist) {
@ -61,18 +69,23 @@ func PushRelease(db *sqlx.DB, release music.MusicRelease) {
fmt.Printf("syncing release [%s] to database...", release.Id)
tx := db.MustBegin()
tx.MustExec("INSERT INTO musicreleases (id, title, release_date, artwork, buyname, buylink, description, lyrics) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) "+
"ON CONFLICT (id) DO UPDATE SET title=$2, release_date=$3, artwork=$4, buyname=$5, buylink=$6, description=$7, lyrics=$8",
&release.Id, &release.Title, release.ReleaseDate.Format("2-Jan-2006"), &release.Artwork, &release.Buyname, &release.Buylink, &release.Description, &release.Lyrics)
tx.MustExec("INSERT INTO musicreleases (id, title, type, release_date, artwork, buyname, buylink) VALUES ($1, $2, $3, $4, $5, $6, $7) "+
"ON CONFLICT (id) DO UPDATE SET title=$2, type=$3, release_date=$4, artwork=$5, buyname=$6, buylink=$7",
&release.Id, &release.Title, &release.Type, release.ReleaseDate.Format("2-Jan-2006"), &release.Artwork, &release.Buyname, &release.Buylink)
for _, link := range release.Links {
tx.MustExec("INSERT INTO musiclinks (album, name, url) VALUES ($1, $2, $3) ON CONFLICT (album, name) DO UPDATE SET url=$3",
tx.MustExec("INSERT INTO musiclinks (release, name, url) VALUES ($1, $2, $3) ON CONFLICT (release, name) DO UPDATE SET url=$3",
&release.Id, &link.Name, &link.Url)
}
for _, credit := range release.Credits {
tx.MustExec("INSERT INTO musiccredits (album, artist, role, meta) VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING",
tx.MustExec("INSERT INTO musiccredits (release, artist, role, meta) VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING",
&release.Id, &credit.Artist.Id, &credit.Role, &credit.Meta)
}
for _, track := range release.Tracks {
tx.MustExec("INSERT INTO musictracks (release, number, title, description, lyrics, preview_url) VALUES ($1, $2, $3, $4, $5, $6) "+
"ON CONFLICT (release, number) DO UPDATE SET title=$3, description=$4, lyrics=$5, preview_url=$6",
&release.Id, &track.Number, &track.Title, &track.Description, &track.Lyrics, &track.PreviewUrl)
}
tx.Commit()