- MODSOURMAN-262Getting issue details... STATUS
Requirements
Purpose: MARC Bibliographic records can be updated in a variety of ways - through an Import that updates it, or through quickMARC, or through MARCcat. Whenever/however an SRS MARC Bib record is updated, then the corresponding changes need to be made in the Instance fields that are controlled by the tenant's default map.
As a staff person
I want to see an updated Instance when the underlying SRS MARC Bib has been updated
So that I can have access to that updated information
Scenarios
- Scenario 1
- Given the Inventory Instance View/Edit screens
- When the underlying SRS MARC record is updated
- And the updates affect fields that are part of the Tenant's default MARC Bib-Inventory Instance map
- Then make the corresponding updates to the affected fields of the Instance automatically
- NOTE: Changes could be adding fields, changing data in an existing field, or removing fields.
- Scenario 2
- Ensure automated testing coverage for this new code is 80% plus
Acceptance testing:
- Add some fields to an existing SRS MARC (e.g. add a 7xx contributor, or a 6xx subject heading, or a 5xx note), and check the related Instance to see if the new fields show up.
- Change the data in some fields in an existing SRS MARC (e.g. change the 245 title, or change the publication date in 260/264 c, or change the 336 $b), and check the related Instance to see if the update data shows
- Remove some fields from an existing SRS MARC (e.g. remove a 6xx subject heading, or a 5xx note, or 336/337/338), and check the related Instance to see if the removed data has disappeared
- Add, change, and remove some fields in an existing SRS MARC record, and check the related Instance to ensure all corresponding changes have been made
NOTE: The default MARC Bib-Inventory Instance map may vary from tenant to tenant. Updates should be made based on the Instance fields mapped/controlled by the specific Tenant's default map.
The FOLIO-supplied default MARC-Instance map: https://github.com/folio-org/mod-source-record-manager/blob/master/mod-source-record-manager-server/src/main/resources/rules/rules.json
Approach & Design
Endpoints:
Method | Path | Provided permissions | Request | Response | Description | Notes |
---|---|---|---|---|---|---|
PUT | /change-manager/parsedRecords/{id} | change-manager.parsed-records.put | compatible parsed record | 204 UPDATED (compatible-parsed-record) | Update parsed record | {id} - parsed record id |
GET | /source-storage/records/{id} | source-storage.records.get | NA | 200 OK (compatible-record) | Retrieve rcord by id | {id} - record id |
POST | /source-storrage/snapshots | source-storage.snapshots.post | compatible snapshot | 201 CREATED | Create new snapshot | |
POST | /source-storage/records | source-storage.records.post | compatible record | 201 CREATED | Create new record | |
POST | /inventory/handlers/quick-mark | inventory.events.post | event | 200 OK | Event handler |
Tickets for implementing endpoints which are not exists yet:
- PUT /change-manager/parsedRecords/{id} - - MODSOURMAN-268Getting issue details... STATUS
- GET /source-storage/records/{id} - - MODSOURCE-115Getting issue details... STATUS
- POST /inventory/handlers/quick-mark - - MODINV-207Getting issue details... STATUS
Schema:
Step-by-step guide:
- Updated MARC-record sends to the "mod-source-record-manager" on the specific endpoint for updating MARC-records: PUT /change-manager/parsedRecords/{id}
- "mod-source-record-manager" retrieves record by its id (using generationId-mechanism): GET /source-storage/records/{id}
- "mod-source-record-manager" creates new snapshot: POST /source-storage/snapshots
- "mod-source-record-manager" creates this MARC-record in the "mod-source-record-storage" using generationId-mechanism as new record: POST /source-storage/records
- "mod-source-record-manager" publishes new event with eventType: "QM_SRS_MARC_BIB_RECORD_UPDATED". Event payload contains updated MARC-record and "rules.json"-file.
- "mod-pubsub" receives this event and "mod-inventory" catches it as "subscriber" for this eventType.
- "mod-inventory" retrieves eventPayload and builds new Instance based on its data using "data-import-processing-core". After that, "mod-inventory" updates this instance.
Finally, the instance updated.