Role | Person | Comments |
---|---|---|
Solution Architect | ||
Java Lead | ||
UI Lead | ||
Product Owner |
Requirements
This feature covers ability to move attached records and maintain existing relationships. When moving holdings to another instance, all associated items have to be transferred as well. Bulk moving items and holdings. Ease of linking/relinking bib/holdings/item data. Part of the refined UX design of Inventory. Drag and drop is one possible solution.
BE Design
Connections between items, instances, holdings.
Possible scenarios and implementation:
1) Move item(s) between holdings
Changing of each moved item with new item.holdingsRecordId.
2) Move holdings with item(s) to another instance
Changing of each moved holding with new holding.instanceId.
3) Move selected item(s) to a holdings in another instance
This case looks the same to 1). Changing of each moved item with new item.holdingsRecordId.
Bulk operation approach
High-level description
The UI-client sends a collection of items/holdings in a single update request to endpoints PUT /inventory/items or inventory/holdings. The mod-inventory processes this request and prepares a request for each item/holding in the array and sends it asynchronously to the mod-inventory-storage. The mod-inventory waits for all responses from mod-inventory-storage to be completed and populates a response. In case of errors in some of the updating requests in the mod-inventory-storage, the mod-inventory returns a response containing a list of errors for not updated items/holdings.
APIs
Method | Path | Provided permissions | Request | Response | Description | Notes |
---|---|---|---|---|---|---|
PUT | inventory/items | inventory.items.array.put | Collection<Item> | 204 UPDATED | Update items from array | |
PUT | inventory/holdings | inventory.holdings.array.put | Collection<Holding> | 204 UPDATED | Update holdings from array |
Flow details
Sequence diagram:
Steps:
1) Send array of items to be updated in one request with updated item.holdingsRecordId.
2) Send asynchronously update request for each item.
3) Wait all responses, populate errors if some of request failed.
4) Return response to UI client.
5) Send array of holdings to be updated in one request with updated holding.instanceId.
6) Send asynchronously update request for each item.
7) Wait all responses, populate errors if some of request failed.
8) Return response to UI client.
Business logic algorithm for mod-inventory: