diff --git a/db/queries/release.sql b/db/queries/release.sql index 767163f..ebf7ff5 100644 --- a/db/queries/release.sql +++ b/db/queries/release.sql @@ -74,8 +74,8 @@ JOIN artist_releases ar ON r.id = ar.release_id WHERE ar.artist_id = $1; -- name: AssociateArtistToRelease :exec -INSERT INTO artist_releases (artist_id, release_id) -VALUES ($1, $2) +INSERT INTO artist_releases (artist_id, release_id, is_primary) +VALUES ($1, $2, $3) ON CONFLICT DO NOTHING; -- name: GetReleasesWithoutImages :many diff --git a/db/queries/track.sql b/db/queries/track.sql index acaa1d3..2aafd55 100644 --- a/db/queries/track.sql +++ b/db/queries/track.sql @@ -4,8 +4,8 @@ VALUES ($1, $2, $3) RETURNING *; -- name: AssociateArtistToTrack :exec -INSERT INTO artist_tracks (artist_id, track_id) -VALUES ($1, $2) +INSERT INTO artist_tracks (artist_id, track_id, is_primary) +VALUES ($1, $2, $3) ON CONFLICT DO NOTHING; -- name: GetTrack :one diff --git a/internal/catalog/submit_listen_test.go b/internal/catalog/submit_listen_test.go index 69eb0a6..c1ff2f7 100644 --- a/internal/catalog/submit_listen_test.go +++ b/internal/catalog/submit_listen_test.go @@ -203,6 +203,22 @@ func TestSubmitListen_CreateAllNoMbzIDsNoArtistNamesNoReleaseTitle(t *testing.T) )`, "Madeline Kenney") require.NoError(t, err) assert.True(t, exists, "expected featured artist to be created") + + // assert that Rat Tally is the primary artist + exists, err = store.RowExists(ctx, ` + SELECT EXISTS ( + SELECT 1 FROM artist_tracks + WHERE artist_id = $1 AND is_primary = $2 + )`, 1, true) + require.NoError(t, err) + assert.True(t, exists, "expected primary artist to be marked as primary for track") + exists, err = store.RowExists(ctx, ` + SELECT EXISTS ( + SELECT 1 FROM artist_releases + WHERE artist_id = $1 AND is_primary = $2 + )`, 1, true) + require.NoError(t, err) + assert.True(t, exists, "expected primary artist to be marked as primary for release") } func TestSubmitListen_MatchAllMbzIDs(t *testing.T) { diff --git a/internal/db/psql/album.go b/internal/db/psql/album.go index 0b6ade9..2ac2fe0 100644 --- a/internal/db/psql/album.go +++ b/internal/db/psql/album.go @@ -144,6 +144,7 @@ func (d *Psql) SaveAlbum(ctx context.Context, opts db.SaveAlbumOpts) (*models.Al err = qtx.AssociateArtistToRelease(ctx, repository.AssociateArtistToReleaseParams{ ArtistID: artistId, ReleaseID: r.ID, + IsPrimary: opts.ArtistIDs[0] == artistId, }) if err != nil { return nil, fmt.Errorf("SaveAlbum: AssociateArtistToRelease: %w", err) diff --git a/internal/db/psql/track.go b/internal/db/psql/track.go index 572047c..1614448 100644 --- a/internal/db/psql/track.go +++ b/internal/db/psql/track.go @@ -132,8 +132,9 @@ func (d *Psql) SaveTrack(ctx context.Context, opts db.SaveTrackOpts) (*models.Tr // insert associated artists for _, aid := range opts.ArtistIDs { err = qtx.AssociateArtistToTrack(ctx, repository.AssociateArtistToTrackParams{ - ArtistID: aid, - TrackID: trackRow.ID, + ArtistID: aid, + TrackID: trackRow.ID, + IsPrimary: opts.ArtistIDs[0] == aid, }) if err != nil { return nil, fmt.Errorf("SaveTrack: AssociateArtistToTrack: %w", err) diff --git a/internal/repository/alias.sql.go b/internal/repository/alias.sql.go index c40ce22..c7d4d4a 100644 --- a/internal/repository/alias.sql.go +++ b/internal/repository/alias.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.29.0 +// sqlc v1.30.0 // source: alias.sql package repository diff --git a/internal/repository/artist.sql.go b/internal/repository/artist.sql.go index e43cec7..4926a5f 100644 --- a/internal/repository/artist.sql.go +++ b/internal/repository/artist.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.29.0 +// sqlc v1.30.0 // source: artist.sql package repository diff --git a/internal/repository/db.go b/internal/repository/db.go index 89e33c0..b196af2 100644 --- a/internal/repository/db.go +++ b/internal/repository/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.29.0 +// sqlc v1.30.0 package repository diff --git a/internal/repository/etc.sql.go b/internal/repository/etc.sql.go index 7664959..ed902ea 100644 --- a/internal/repository/etc.sql.go +++ b/internal/repository/etc.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.29.0 +// sqlc v1.30.0 // source: etc.sql package repository diff --git a/internal/repository/listen.sql.go b/internal/repository/listen.sql.go index 6099170..583dca6 100644 --- a/internal/repository/listen.sql.go +++ b/internal/repository/listen.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.29.0 +// sqlc v1.30.0 // source: listen.sql package repository diff --git a/internal/repository/models.go b/internal/repository/models.go index df26d4d..ac318e4 100644 --- a/internal/repository/models.go +++ b/internal/repository/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.29.0 +// sqlc v1.30.0 package repository diff --git a/internal/repository/release.sql.go b/internal/repository/release.sql.go index ec6c467..6404231 100644 --- a/internal/repository/release.sql.go +++ b/internal/repository/release.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.29.0 +// sqlc v1.30.0 // source: release.sql package repository @@ -14,18 +14,19 @@ import ( ) const associateArtistToRelease = `-- name: AssociateArtistToRelease :exec -INSERT INTO artist_releases (artist_id, release_id) -VALUES ($1, $2) +INSERT INTO artist_releases (artist_id, release_id, is_primary) +VALUES ($1, $2, $3) ON CONFLICT DO NOTHING ` type AssociateArtistToReleaseParams struct { ArtistID int32 ReleaseID int32 + IsPrimary bool } func (q *Queries) AssociateArtistToRelease(ctx context.Context, arg AssociateArtistToReleaseParams) error { - _, err := q.db.Exec(ctx, associateArtistToRelease, arg.ArtistID, arg.ReleaseID) + _, err := q.db.Exec(ctx, associateArtistToRelease, arg.ArtistID, arg.ReleaseID, arg.IsPrimary) return err } diff --git a/internal/repository/search.sql.go b/internal/repository/search.sql.go index 82a381b..e223c5b 100644 --- a/internal/repository/search.sql.go +++ b/internal/repository/search.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.29.0 +// sqlc v1.30.0 // source: search.sql package repository diff --git a/internal/repository/sessions.sql.go b/internal/repository/sessions.sql.go index 2985620..e60285b 100644 --- a/internal/repository/sessions.sql.go +++ b/internal/repository/sessions.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.29.0 +// sqlc v1.30.0 // source: sessions.sql package repository diff --git a/internal/repository/track.sql.go b/internal/repository/track.sql.go index f87b180..c7166c7 100644 --- a/internal/repository/track.sql.go +++ b/internal/repository/track.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.29.0 +// sqlc v1.30.0 // source: track.sql package repository @@ -13,18 +13,19 @@ import ( ) const associateArtistToTrack = `-- name: AssociateArtistToTrack :exec -INSERT INTO artist_tracks (artist_id, track_id) -VALUES ($1, $2) +INSERT INTO artist_tracks (artist_id, track_id, is_primary) +VALUES ($1, $2, $3) ON CONFLICT DO NOTHING ` type AssociateArtistToTrackParams struct { - ArtistID int32 - TrackID int32 + ArtistID int32 + TrackID int32 + IsPrimary bool } func (q *Queries) AssociateArtistToTrack(ctx context.Context, arg AssociateArtistToTrackParams) error { - _, err := q.db.Exec(ctx, associateArtistToTrack, arg.ArtistID, arg.TrackID) + _, err := q.db.Exec(ctx, associateArtistToTrack, arg.ArtistID, arg.TrackID, arg.IsPrimary) return err } diff --git a/internal/repository/users.sql.go b/internal/repository/users.sql.go index 8278f41..1d7f0a5 100644 --- a/internal/repository/users.sql.go +++ b/internal/repository/users.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.29.0 +// sqlc v1.30.0 // source: users.sql package repository diff --git a/internal/repository/year.sql.go b/internal/repository/year.sql.go index 457052d..381e807 100644 --- a/internal/repository/year.sql.go +++ b/internal/repository/year.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.29.0 +// sqlc v1.30.0 // source: year.sql package repository