User name during manual block deleting

Requirements

Find the most effective approach (effort + implementation complexity).


APPROACH 1: Retrieve user id from the headers when deleting record and re-send it in the metadata during manual block deleting flow.

Steps to implement:

  1. Change org.folio.rest.impl.ManualBlocksAPI in mod-feesfines module by adding the following line in the deleteManualblocksByManualblockId method:
    String source = okapiHeaders.get("x-okapi-user-id");
    JsonObject payload = JsonObject.mapFrom(getByIdReply.result());
    payload.getJsonObject("metadata").put("updatedByUserId", source);

  2. Change org.folio.builder.service.ManualBlockRecordBuilder in mod-audit module by changing the logic in the getSource method where 'source' is alwaysnull when log event type is MANUAL_BLOCK_DELETED (requires minimum effort).

As a result, mod-audit can recognize source correctly: https://github.com/folio-org/mod-audit/blob/master/mod-audit-server/src/main/java/org/folio/builder/service/ManualBlockRecordBuilder.java#L46.


APPROACH 2: Change deleting flow, introduce fake deleting with key isDeleted to mark manual block as deleted. One need to change all CRUD operations.

Steps to implement:

  1. Change manual patron block schema by adding additional field 'isDeleted' that can be true or false (initially false).
  2. Change org.folio.rest.impl.ManualBlocksAPI in mod-feesfines module by adding filter in getManualblocks method to return manualblocks only with isDeleted=false.
  3. Change org.folio.rest.impl.ManualBlocksAPI in mod-feesfines module by adding filter in getManualblocksByManualblockId method to return manualblock only if isDeleted=false.
  4. Change org.folio.rest.impl.ManualBlocksAPI in mod-feesfines module by setting isDeleted field in Manualblock entity to 'true' in deleteManualblocksByManualblockId method

As a result, all 'delete' operations are stored in manualblocks table, and user id can be found in updatedBy column using RMB.



AdvantagesDisadvantages
APPROACH 1Need to add only a few lines of code in one class, minimum modifications in one method of another module.Need to modify another module.
APPROACH 2Changes are only in one module.
Need to modify schema and 3 methods.