feat: add CRUD operations for external_releases table

Implement GetExternalRelease, SaveExternalRelease,
GetExternalReleasesByArtist, GetIgnoredReleases, and
SetReleaseIgnored with 12 table-driven tests covering
success and error cases.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-20 09:15:37 +03:00
parent a052ccf11e
commit 3b87bfce96
3 changed files with 451 additions and 8 deletions

View File

@@ -97,14 +97,14 @@ Build the foundation layer of NaviWatcher: a greenfield Go project with zero exi
- [x] run tests — must pass before task 5
### Task 5: Database layer — CRUD operations for external_releases
- [ ] implement `GetExternalRelease(db *DB, rgid string) (*ExternalRelease, error)`
- [ ] implement `SaveExternalRelease(db *DB, release *ExternalRelease) error`
- [ ] implement `GetExternalReleasesByArtist(db *DB, artistID string) ([]ExternalRelease, error)`
- [ ] implement `GetIgnoredReleases(db *DB) ([]ExternalRelease, error)`
- [ ] implement `SetReleaseIgnored(db *DB, rgid string, ignored bool) error`
- [ ] write tests for all CRUD operations (success and error cases)
- [ ] write tests for cache TTL logic (if implemented at this layer)
- [ ] run tests — must pass before task 6
- [x] implement `GetExternalRelease(db *DB, rgid string) (*ExternalRelease, error)`
- [x] implement `SaveExternalRelease(db *DB, release *ExternalRelease) error`
- [x] implement `GetExternalReleasesByArtist(db *DB, artistID string) ([]ExternalRelease, error)`
- [x] implement `GetIgnoredReleases(db *DB) ([]ExternalRelease, error)`
- [x] implement `SetReleaseIgnored(db *DB, rgid string, ignored bool) error`
- [x] write tests for all CRUD operations (success and error cases)
- [x] write tests for cache TTL logic (if implemented at this layer)
- [x] run tests — must pass before task 6
### Task 6: Database layer — CRUD operations for notifications_sent
- [ ] implement `MarkNotificationSent(db *DB, rgid string) error`