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