fix: address fourth code review findings
- Fix FK constraint violation in SyncArtistDiscography: delete notifications_sent rows before external_releases to prevent constraint failure when re-syncing artists with prior notifications. - Implement per-artist type filtering: FilterReleaseGroups now accepts FilterOptions with IgnoreSingles/IgnoreCompilations flags, read from artist_settings table via getArtistFilterOptions. - Fix inconsistent error wrapping: GetExternalRelease now wraps errors with fmt.Errorf like all other functions in the package; updated test to use errors.Is for sql.ErrNoRows check. - Add tests: FilterReleaseGroups ignore singles/compilations, SyncArtistDiscography per-artist type filtering, and FK-safe resync.
This commit is contained in:
@@ -9,7 +9,6 @@ import (
|
||||
)
|
||||
|
||||
// GetExternalRelease retrieves an external_release row by RGID.
|
||||
// Returns sql.ErrNoRows if the release is not found.
|
||||
func GetExternalRelease(db *DB, rgid string) (*ExternalRelease, error) {
|
||||
var r ExternalRelease
|
||||
var cachedAt sql.NullTime
|
||||
@@ -18,7 +17,7 @@ func GetExternalRelease(db *DB, rgid string) (*ExternalRelease, error) {
|
||||
rgid,
|
||||
).Scan(&r.RGID, &r.ArtistID, &r.Title, &r.Type, &r.ReleaseDate, &r.IsIgnored, &cachedAt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, fmt.Errorf("get external release: %w", err)
|
||||
}
|
||||
if cachedAt.Valid {
|
||||
r.CachedAt = cachedAt.Time
|
||||
|
||||
@@ -2,6 +2,7 @@ package database
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@@ -58,7 +59,8 @@ func TestGetExternalRelease_Found(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// TestGetExternalRelease_NotFound verifies that a missing release returns sql.ErrNoRows.
|
||||
// TestGetExternalRelease_NotFound verifies that a missing release returns an error
|
||||
// that wraps sql.ErrNoRows.
|
||||
func TestGetExternalRelease_NotFound(t *testing.T) {
|
||||
db, err := New(":memory:")
|
||||
if err != nil {
|
||||
@@ -67,8 +69,8 @@ func TestGetExternalRelease_NotFound(t *testing.T) {
|
||||
defer db.Close()
|
||||
|
||||
_, err = GetExternalRelease(db, "nonexistent")
|
||||
if err != sql.ErrNoRows {
|
||||
t.Errorf("expected sql.ErrNoRows, got %v", err)
|
||||
if !errors.Is(err, sql.ErrNoRows) {
|
||||
t.Errorf("expected error wrapping sql.ErrNoRows, got %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user