diff --git a/backend/database/sql/queries/release_groups.sql b/backend/database/sql/queries/release_groups.sql index 70668c9..abb0ae3 100644 --- a/backend/database/sql/queries/release_groups.sql +++ b/backend/database/sql/queries/release_groups.sql @@ -12,14 +12,14 @@ RETURNING *; SELECT * FROM release_groups WHERE id = ? LIMIT 1; --- name: GetReleaseGroupByName :one +-- name: GetReleaseGroupByNameAndArtist :one SELECT * FROM release_groups -WHERE name = ? LIMIT 1; +WHERE name = ? AND album_artist_credit_id = ? LIMIT 1; -- name: UpsertReleaseGroup :one INSERT INTO release_groups (name, album_artist_credit_id, year) VALUES (?, ?, ?) -ON CONFLICT(name) DO UPDATE SET +ON CONFLICT(name, album_artist_credit_id) DO UPDATE SET album_artist_credit_id = COALESCE(excluded.album_artist_credit_id, release_groups.album_artist_credit_id), year = COALESCE(excluded.year, release_groups.year) RETURNING *; diff --git a/backend/database/sql/schemas/release_groups.sql b/backend/database/sql/schemas/release_groups.sql index 74607f2..78f0e8e 100644 --- a/backend/database/sql/schemas/release_groups.sql +++ b/backend/database/sql/schemas/release_groups.sql @@ -1,13 +1,14 @@ CREATE TABLE IF NOT EXISTS release_groups ( id INTEGER PRIMARY KEY, - name TEXT NOT NULL UNIQUE, + name TEXT NOT NULL, cover_art_id INTEGER, album_artist_credit_id INTEGER, year INTEGER, total_tracks INTEGER, total_discs INTEGER, FOREIGN KEY(cover_art_id) REFERENCES cover_art(id), - FOREIGN KEY(album_artist_credit_id) REFERENCES artist_credit(id) + FOREIGN KEY(album_artist_credit_id) REFERENCES artist_credit(id), + UNIQUE(name, album_artist_credit_id) ); CREATE INDEX IF NOT EXISTS idx_release_groups_cover_art_id diff --git a/backend/database/sql/sqlcgen/release_groups.sql.go b/backend/database/sql/sqlcgen/release_groups.sql.go index 2f920a4..3316f56 100644 --- a/backend/database/sql/sqlcgen/release_groups.sql.go +++ b/backend/database/sql/sqlcgen/release_groups.sql.go @@ -259,13 +259,18 @@ func (q *Queries) GetReleaseGroup(ctx context.Context, id int64) (ReleaseGroup, return i, err } -const getReleaseGroupByName = `-- name: GetReleaseGroupByName :one +const getReleaseGroupByNameAndArtist = `-- name: GetReleaseGroupByNameAndArtist :one SELECT id, name, cover_art_id, album_artist_credit_id, year, total_tracks, total_discs FROM release_groups -WHERE name = ? LIMIT 1 +WHERE name = ? AND album_artist_credit_id = ? LIMIT 1 ` -func (q *Queries) GetReleaseGroupByName(ctx context.Context, name string) (ReleaseGroup, error) { - row := q.db.QueryRowContext(ctx, getReleaseGroupByName, name) +type GetReleaseGroupByNameAndArtistParams struct { + Name string + AlbumArtistCreditID sql.NullInt64 +} + +func (q *Queries) GetReleaseGroupByNameAndArtist(ctx context.Context, arg GetReleaseGroupByNameAndArtistParams) (ReleaseGroup, error) { + row := q.db.QueryRowContext(ctx, getReleaseGroupByNameAndArtist, arg.Name, arg.AlbumArtistCreditID) var i ReleaseGroup err := row.Scan( &i.ID, @@ -314,7 +319,7 @@ func (q *Queries) UpdateReleaseGroupCoverArt(ctx context.Context, arg UpdateRele const upsertReleaseGroup = `-- name: UpsertReleaseGroup :one INSERT INTO release_groups (name, album_artist_credit_id, year) VALUES (?, ?, ?) -ON CONFLICT(name) DO UPDATE SET +ON CONFLICT(name, album_artist_credit_id) DO UPDATE SET album_artist_credit_id = COALESCE(excluded.album_artist_credit_id, release_groups.album_artist_credit_id), year = COALESCE(excluded.year, release_groups.year) RETURNING id, name, cover_art_id, album_artist_credit_id, year, total_tracks, total_discs