-
Notifications
You must be signed in to change notification settings - Fork 816
feat: Add Audible series ASIN field to Series entity #4960
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
- Add audibleSeriesAsin column to Series table via migration v2.33.0 - Update Series model to include the new field - Add API endpoint for updating series ASIN (PATCH /api/series/:id) - Add unit tests for Series model
- Create AsinInput.vue component for ASIN input with URL extraction - Update EditSeriesInputInnerModal to include ASIN field - Update SeriesInputWidget to fetch and save ASIN data - Add SeriesController PATCH endpoint for updating ASIN - Add localization strings for ASIN-related messages The AsinInput component automatically extracts ASINs from pasted Audible URLs and provides validation feedback.
- Update libraryItemsBookFilters to search by audibleSeriesAsin - Searching for an ASIN in the library now finds books in that series
- Update Audible provider to return series ASIN in search results - Pass series ASIN through Match.vue when selecting metadata - Update Book.updateSeriesFromRequest to forward ASIN to Series model - Update Scanner to use series ASIN during quick match When using the Audible metadata provider, the series ASIN is now automatically captured and stored with the series.
|
What is the final intention of adding the ASIN to the series in ABS? We do not support having library items that don't have a file associated entry (i.e. no ghost entries or placeholders, everything needs to be a local file), so I'm struggling to understand why we would want to add this information to the series. |
Good question! The intention is metadata enrichment + reliable identity — this doesn't change ABS's "no ghost entries" philosophy. This PR only adds an optional Audible series ASIN to a Series that already exists because it’s linked to local books. It does not create placeholder series/books, track unowned volumes, or imply “missing books”. Why store it at the series level?
So the “final intention” is: make series identification deterministic when metadata providers supply a stable ID, without introducing any library items that aren’t backed by local files. |
We are not accepting or reviewing PRs that are fully AI generated due to an increasing number of AI generated PRs of varying quality levels. Reviewing PRs takes up already limited development time, and seeing a response that seems to be copied directly to and from a chat prompt erodes confidence that the rest of the PR (or the additional issues and PRs you opened over the past few days) are fully thought out and ready to review. This is not to say AI is bad and cannot be used since it can help to describe things better, but they also add a lot of unnecessary information that makes it harder to understand what is going on. With that said, I can understand wanting to add metadata to a series, but still not sure how it fully applies here for matching against an online provider. Once you have reviewed and simplified the descriptions I can look at it again. |
Brief summary
Adds first-class support for Audible Series ASINs by introducing a new
audibleSeriesAsinfield on the Series entity. This enables stronger integration with Audible metadata and allows series to be reliably linked to official Audible catalog entries.Which issue is fixed?
Fixes #4937
In-depth Description
What this enables
audibleSeriesAsin)B08G9PRS1K)Key behaviors
✅ Normalization + validation
^[A-Z0-9]{10}$(uppercase alphanumeric, length 10)✅ Data integrity safeguards (no accidental nuking)
beforeValidateensures validation runs for all update pathsWhy this approach?
Implementation overview
Database & model layer
v2.33.0addsaudibleSeriesAsin+ indexnormalizeAudibleSeriesAsin())beforeValidatehook guarantees consistent validation across CREATE / PATCH / PUTUI
AsinInput.vuecomponent:Metadata + scanning
Search
ASIN flow architecture
How have you tested this?
Manual testing
Automated testing
✅ All existing tests pass (325)
✅ Added 55 new unit tests covering:
Migration testing
2.33.0to match migrationScreenshots
Click to expand screenshots
Audiobook Editor
Search by Series ASIN (results returned)
Match flow: series populated with Series ASIN