fix: address code review findings
- Fix pagination to not trust MusicBrainz count for cutoff (prevents silent discography truncation / hidden missing releases) - Add idx_external_releases_artist_id index for hot per-artist queries - Dedupe cached_at layout constant in external_releases.go
This commit is contained in:
@@ -121,6 +121,10 @@ func (db *DB) migrate() error {
|
||||
name: "006_add_secondary_types_to_external_releases",
|
||||
sql: `ALTER TABLE external_releases ADD COLUMN secondary_types TEXT;`,
|
||||
},
|
||||
{
|
||||
name: "007_index_external_releases_artist_id",
|
||||
sql: `CREATE INDEX IF NOT EXISTS idx_external_releases_artist_id ON external_releases(artist_id);`,
|
||||
},
|
||||
}
|
||||
|
||||
for _, m := range migrations {
|
||||
|
||||
@@ -205,9 +205,10 @@ func TestMigrationTracking(t *testing.T) {
|
||||
t.Fatalf("query migrations count: %v", err)
|
||||
}
|
||||
|
||||
// We have 6 recorded migrations: artist_settings, external_releases,
|
||||
// local_albums, notifications_sent, cached_at column, secondary_types column.
|
||||
if count != 6 {
|
||||
t.Errorf("expected 6 applied migrations, got %d", count)
|
||||
// We have 7 recorded migrations: artist_settings, external_releases,
|
||||
// local_albums, notifications_sent, cached_at column, secondary_types
|
||||
// column, and the external_releases.artist_id index.
|
||||
if count != 7 {
|
||||
t.Errorf("expected 7 applied migrations, got %d", count)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,11 +175,10 @@ func GetExternalReleasesByArtistWithCache(db *DB, artistID string, ttl time.Dura
|
||||
if ttl <= 0 {
|
||||
return nil, nil
|
||||
}
|
||||
// cached_at is stored in the "2006-01-02 15:04:05" UTC layout via
|
||||
// FormatCachedAt. Compare against an explicitly formatted cutoff string in
|
||||
// the same layout so the lexicographic comparison is a valid time ordering.
|
||||
const layout = "2006-01-02 15:04:05"
|
||||
cutoff := time.Now().UTC().Add(-ttl).Format(layout)
|
||||
// cached_at is stored in utcLayout via FormatCachedAt. Compare against an
|
||||
// explicitly formatted cutoff string in the same layout so the
|
||||
// lexicographic comparison is a valid time ordering.
|
||||
cutoff := time.Now().UTC().Add(-ttl).Format(utcLayout)
|
||||
rows, err := db.Conn().Query(
|
||||
"SELECT rgid, artist_id, title, type, release_date, is_ignored, cached_at, secondary_types FROM external_releases WHERE artist_id = ? AND cached_at >= ?",
|
||||
artistID, cutoff,
|
||||
|
||||
Reference in New Issue
Block a user