Hi all,

I am working on FINERACT-2751, which is about implementing the currently
incomplete Interoperation transfer query endpoint:

GET /interoperation/transactions/{transactionCode}/transfers/{transferCode}

Jira:
https://issues.apache.org/jira/browse/FINERACT-2751

Pull Request:
https://github.com/apache/fineract/pull/6261

The main problem I found is that the endpoint needs both transactionCode
and transferCode to identify a transfer, but there was no durable
association between these two values.

Because of that, InteropServiceImpl#getTransfer() was effectively
unimplemented and returned null.

In the PR, I have currently implemented the following:

   - Added a small interop_transfer record to persist the association
   between transactionCode and transferCode.
   - The record stores:
      - transaction code
      - transfer code
      - current action state
      - latest completion timestamp
   - PREPARE, COMMIT/CREATE and RELEASE transfer operations create or
   update this record.
   - Implemented getTransfer() using an exact lookup on (transactionCode,
   transferCode).
   - Unknown or mismatched transaction/transfer pairs return 404.
   - Corrected the endpoint permission from READ_INTERQUOTE to
   READ_INTERTRANSFER.
   - Added a unique constraint on (transaction_code, transfer_code).
   - Added integration coverage for prepared and committed transfer
   lookups, mismatched codes, unknown transfers and response fields.

I intentionally kept the new record small and continued using the existing
savings transaction/payment-detail flow for the actual financial
transaction. The new table is only being used as a durable
lookup/association for the Interoperation transfer.

One limitation is that old transfers cannot be reliably backfilled because
their transactionCode association was not previously stored.

The main point where I would appreciate feedback is the data model.

Is introducing this small Interoperation-specific interop_transfer record
the right direction, or would it be preferable to persist the
transactionCode–transferCode association in an existing Fineract domain
model?

I am happy to change the implementation based on the preferred architecture.

Thanks,
Shubham

Reply via email to