Ralph Hopman created FINERACT-2496:
--------------------------------------
Summary: Add Batch API Support for Creating Savings Account Charges
Key: FINERACT-2496
URL: https://issues.apache.org/jira/browse/FINERACT-2496
Project: Apache Fineract
Issue Type: Improvement
Reporter: Ralph Hopman
Assignee: Ralph Hopman
The Batch API currently supports most savings account operations including
account creation, transactions, and transaction adjustments. However, it lacks
support for creating charges on savings accounts via the POST
{{/v1/savingsaccounts/\{savingsAccountId}/charges}} endpoint.
This story will add the missing functionality to enable atomic creation of
savings account charges within batch operations.
h2. Current State
The Batch API supports:
* Creating savings accounts ({{{}POST /v1/savingsaccounts{}}})
* Retrieving savings accounts ({{{}GET /v1/savingsaccounts/{id{}}}})
* Creating savings transactions ({{{}POST
/v1/savingsaccounts/\{id}/transactions{}}})
* Adjusting savings transactions ({{{}POST
/v1/savingsaccounts/\{id}/transactions/{transactionId{}}}})
*Missing:* Creating charges on savings accounts ({{{}POST
/v1/savingsaccounts/\{savingsAccountId}/charges{}}})
h2. Business Value
This enhancement will enable users to perform complex savings account
operations atomically within a single batch request. For example:
* Process a withdrawal and apply a withdrawal fee in one transaction
* Create a savings account and add initial charges atomically
* Apply multiple charges across different accounts with all-or-nothing
semantics using {{enclosingTransaction=true}}
h2. Technical Implementation Plan
The solution will implement:
# *CommandStrategy Implementation:* Create
{{CreateSavingsAccountChargeCommandStrategy}} class that:
** Extracts {{savingsAccountId}} from the URL path
** Delegates to {{SavingsAccountChargesApiResource.addSavingsAccountCharge()}}
** Returns appropriate HTTP response with status code and resource ID
# *Strategy Registration:* Update {{CommandStrategyProvider.init()}} to
register the new strategy with URL pattern {{v1/savingsaccounts/\{id}/charges}}
and HTTP method {{POST}}
# *Unit Tests:* Create comprehensive test coverage including:
** {{CreateSavingsAccountChargeCommandStrategyTest}} - will verify command
execution
** {{CommandStrategyProviderTest}} - will verify strategy registration and
routing
h2. Testing Approach
h3. Unit Tests
The implementation will include two test classes:
*CreateSavingsAccountChargeCommandStrategyTest*
* Will verify the strategy extracts {{savingsAccountId}} from the URL correctly
* Will verify the strategy delegates to
{{SavingsAccountChargesApiResource.addSavingsAccountCharge()}}
* Will verify proper HTTP response (status code 200) is returned
* Will verify the response contains correct {{requestId}} and {{resourceId}}
* Will use Mockito to mock the {{SavingsAccountChargesApiResource}}
*CommandStrategyProviderTest*
* Will verify the strategy is registered with the correct URL pattern
* Will verify the strategy is registered with the correct HTTP method (POST)
* Will verify the {{CommandStrategyProvider}} returns the correct strategy bean
* Will ensure no regression in existing strategy registrations
h2. Implementation Notes
* Follow the exact same pattern as {{CreateChargeCommandStrategy}} (for loan
charges)
* Ensure proper Spring {{@Component}} annotation for dependency injection
* Use {{@RequiredArgsConstructor}} for constructor injection
* Extract {{savingsAccountId}} from URL using regex matching
* Delegate to existing
{{SavingsAccountChargesApiResource.addSavingsAccountCharge()}} method
* Return appropriate {{BatchResponse}} with status code and resource
identifiers
--
This message was sent by Atlassian Jira
(v8.20.10#820010)