Invalidation strategy: FIFO/LRU/TTL? Maximum age (optional)
In memory and/or long-time cache? JSON files ~with compression or Redis?~
[x] Cache multiple versions with timestamps (daily? only if there have been changes?)
[x] Let the requester know how old the data is and whether it is from the cache
[x] Permalinks to specific cached version (include GTIN, enabled providers, optional additional URLs or ProviderName=ProviderId pairs)
[x] Optimize lookups (perform no GTIN lookup if ID was already looked up)
These repeated lookups also skew the calculated processing time for the initial provider (e.g. Deezer track requests are now cached)
[ ] Use as few requests as possible (only make additional API calls for a provider if data is missing, e.g. iTunes regions or Deezer ISRCs)
[ ] Lookup by metadata (label and catno, title, artist, track count etc.) for providers without GTIN
[ ] Create provider feature categories (e.g. streaming, physical, with GTIN/ISRC, GTIN lookup, scraper, audio drama, Japanese etc.)
[ ] Lookup the entire discography of a given artist/label
[x] Make MusicBrainz base url configurable (environment variable)
[x] Deduplicate lookup ReleaseOptions.regions option by using an ordered set
[x] Manage lookup state: Each provider "Example" is split into two classes ExampleProvider and ExampleReleaseLookup, where ExampleReleaseLookup has a (readonly) property provider
Splits general request logic and release processing logic
Possible to store release lookup state as class properties
Separation of unrelated tasks once we add artist/label lookups later, e.g. as ExampleArtistLookup and ExampleLabelLookup
[ ] Warn that available regions may not be accurate before the release date has passed (anywhere on earth, UTC-12)
[ ] Extract provider URLs from link shortener pages
[ ] Extract provider IDs and GTIN from a-tisket URLs
[ ] Write more test cases...
[x] Preserve URL blurb (for Beatport)
[x] Improve logging of AggregateErrors, they make it a PITA to find the real issue
Web Interface
[x] Display header with logo and description
[x] Harmony: Music Metadata Aggregator and MusicBrainz Importer/Seeder
[x] Design banner logo and icon
[x] Display footer with version, repo URL and support URL (environment variables DENO_DEPLOYMENT_ID, REPO_BASE_URL, optional COMMIT_BASE_URL, SUPPORT_URL)
[x] Add OpenGraph meta tags
[x] Allow to choose and exclude providers (persistent provider checkboxes)
[ ] Persist preferred regions input
[x] Show provider and alternative values for interesting properties
This is just a loosely ordered list of things I already have on my radar, to be cleaned up later™️.
Harmonized Data
Providers
/track
URLs (#7)/track
URLs (expensive, only if there is no better source)MusicBrainz
Infrastructure
ReleaseOptions.regions
option by using an ordered setprovider
Web Interface
key
andcert
options tostart()
~ Support X-Forwarded-Proto proxy header