Skip to end of metadata
Go to start of metadata

CIRC-436 - Getting issue details... STATUS

The goal of the spike is to define the necessary steps to introduce Request Preferences per User in mod-circulation.

Spike results:

1. Storing request preferences in mod-circulation-storage:

We will add table user_request_preferences to mod-circulation-storage. user_request_preferences will store user preference fields in json format. 

Table definition in mod-circulation-storage:

  "tableName": "user_request_preferences",
  "withMetadata": true,
  "withAuditing": false,
  "uniqueIndex": [
      "fieldName": "userId",
      "tOps": "ADD",
      "caseSensitive": false

2. API for request preferences:

API endpoint will follow standard format for endpoints in folio:

1) GET /request-preference-storage/request-preference -  endpoint for searching, UI will get preferences related to user by sending request "GET /request-preference-storage/request-preference?query=userId==1e425b93-501e-44b0-a4c7-b3e66a25c42e"

2) POST /request-preference-storage/request-preference - create request preference

3) GET /request-preference-storage/request-preference/{id} - get request preference by id ("id" field is not the same as "userId")

4) DELETE /request-preference-storage/request-preference/{id} - delete request preference

5) PUT /request-preference-storage/request-preference/{id} - update request preference

3. Attributes of user request preference:

id - Unique request preference ID
userId - UUID of user associated with this request preference
holdShelf - Whether 'Hold shelf' option is available to the user.
delivery - Whether 'Delivery' option is available to the user.
defaultServicePointId - UUID of default service point for 'Hold shelf' option
defaultDeliveryAddressTypeId - UUID of user's address type
fulfillment - Preferred fulfillment type. Possible values are 'Delivery', 'Hold shelf'

Example of request preference:

Request preference
  "userId": "1e425b93-501e-44b0-a4c7-b3e66a25c42e",
  "holdShelf" : true,
  "delivery": true,
  "defaultServicePointId": "22beccec-8d77-4a97-906a-37cc26b070e5",
  "defaultDeliveryAddressTypeId": "27a1b086-20ac-4b1d-b6ac-3be353383f3d",
  "fulfillment": "Delivery"

4. POC: 

Created a draft pull request with simple implementation of request-preference-storage endpoints

  • No labels


  1. Couple of questions/comments Andrii Paias

    1.  request-preference-storage will be an interface provided by mod-circulation-storage, correct?
    2.  In the request preference example above, can we have both holdShelf and delivery set to true? I thought once the user selects delivery, then "holdShelf" should be set to false automatically?
  2. Sobha Duvvuri ,

    1. Yes it is in mod-circulation-storage. mod-circulation module seems to contain complex business logic, so since we only need CRUD operations we can use just mod-circulation-storage.
    2. According to presentation from Cate Boerema (,
      "holdShelf" and "delivery" specifies whether or not those options are available, and "fulfillment" specifies which option will be selected by default. Updated this page to reflect that.