Automated patron blocks data synchronization

Automated patron blocks data synchronization

mod-patronblocks gets all of its data (information about loans and fees/fines) from events published by mod-circulation and mod-feesfines. As a result, when the module is deployed to the environment that already has loans and fees/fines information, mod-patronblocks will never receive this information because all of the events for these loans and fees/fines have already happened.

It's proposed to add functionality (MODPATBLK-41: Limits for 3 implemented automated patron blocks not working properly - CREATED IN FOLIO PRE-GOLDENRODClosed) that would allow us to re-sync loans and fees/fines info on the mod-patronblocks side to make its data up-to-date. mod-patronblocks will call mod-circulation-storage and mod-feesfines API to retrieve required info and populate its own database. Considering that such a process can be quite time-consuming, it'll be performed in the background to avoid web server's HTTP request timeout.

To do a re-sync:

1 - User makes a call to an endpoint:

POST /automated-patron-blocks/synchronization/request

Body:

 

{   "scope": string }

 

where "scope" accepts one of these formats:

  • "full" - to re-sync data for all users

  • "user:{user-uuid}" - to re-sync one patron's data, specified with UUID

Response in case of success:

 

{   "id": {sync-request-id},   "scope": {sync-request-scope},   "status": "open" }

 

Later, this object will be updated by a synchronization process and the user will be able to check synchronization status by calling an endpoint:

GET /automated-patron-blocks/synchronization/request/{sync-request-uuid}

2 - Synchronization request object is stored in the mod-patronblocks DB

3 - Okapi timer triggers the synchronization process by calling an endpoint:

POST /automated-patron-blocks/synchronization/run

Synchronization request's status is changed from "open" to "in-progress".

4 - mod-patronblocks calls mod-circulation-storage and mod-feesfines API to retrieve information about loans and fees/fines and updates its database

During this process synchronization request object in the DB is updated with:

  • total number of loans

  • total number of fees/fines

  • number of processed loans

  • number of processed fees/fines

  • errors that occurred during the synchronization process

At this point, synchronization request (when retrieved via GET endpoint) will look like this:

 

{   "id": {sync-request-id},   "scope": {sync-request-scope},   "status": "in-progress",   "totalNumberOfLoans": number,   "totalNumberOfFeesFines": number,   "numberOfProcessedLoans": number,   "numberOfProcessedFeesFines": number,   "errors": [     string   ] }

 

which would allow the user to check the progress of the synchronization process.

5 - When the process is finished successfully, status is changed to "done". In case of a failure, status is changed to "failed".