Skip to content

FINERACT-2652: Decouple SavingsAccount from injected collaborators#6024

Open
alberto-art3ch wants to merge 1 commit into
apache:developfrom
openMF:FINERACT-2652/decouple-savingsaccount-from-injected-collaborators
Open

FINERACT-2652: Decouple SavingsAccount from injected collaborators#6024
alberto-art3ch wants to merge 1 commit into
apache:developfrom
openMF:FINERACT-2652/decouple-savingsaccount-from-injected-collaborators

Conversation

@alberto-art3ch

Copy link
Copy Markdown
Contributor

Description

We are removing @transient service fields from SavingsAccount.

The transient SavingsAccountTransactionSummaryWrapper, SavingsHelper and ConfigurationDomainService (previously injected post-hydration via setHelpers) and the accountNumberRequiresAutoGeneration flag are removed. The three stateless collaborators are bundled into a new singleton SavingsContext bean that is passed as a method parameter; the account-number flag is derived at the service layer.

FINERACT-2652

Checklist

Please make sure these boxes are checked before submitting your pull request - thanks!

  • Write the commit message as per our guidelines
  • Acknowledge that we will not review PRs that are not passing the build ("green") - it is your responsibility to get a proposed PR to pass the build, not primarily the project's maintainers.
  • Create/update unit or integration tests for verifying the changes made.
  • Follow our coding conventions.
  • Add required Swagger annotation and update API documentation at fineract-provider/src/main/resources/static/legacy-docs/apiLive.htm with details of any API changes
  • This PR must not be a "code dump". Large changes can be made in a branch, with assistance. Ask for help on the developer mailing list.

Your assigned reviewer(s) will follow our guidelines for code reviews.

List<LocalDate> postedAsOnTransactionDates = getManualPostingDates();

final List<LocalDateInterval> postingPeriodIntervals = this.savingsHelper.determineInterestPostingPeriods(
final List<LocalDateInterval> postingPeriodIntervals = context.savingsHelper().determineInterestPostingPeriods(

@adamsaghy adamsaghy Jun 26, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not much better if we are still injecting (not directly, but via arguments) services into the JPA...

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It has already been updated and a more robust change has been made for the extraction of business methods from Savings and Deposit entities.

@adamsaghy adamsaghy left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am having concerns. It's better than directly injecting services and helpers into the JPA, but still not clean solution:

  • Injecting context which contains helpers / services which are called inside the JPA entity still

Would it be possible to truly decouple and extract all these logic out of the JPA entity?

@alberto-art3ch alberto-art3ch force-pushed the FINERACT-2652/decouple-savingsaccount-from-injected-collaborators branch 2 times, most recently from 4cd4f98 to 5d799c8 Compare June 29, 2026 04:31
@adamsaghy

Copy link
Copy Markdown
Contributor
> Task :fineract-command-async:licenseJmh NO-SOURCE
        switch (this.accountTermAndPreClosure.depositPeriodFrequencyType()) {
        ^
    (see https://errorprone.info/bugpattern/StatementSwitchToExpressionSwitch)
  Did you mean 'switch (this.accountTermAndPreClosure.depositPeriodFrequencyType()) {'?
/home/runner/work/fineract/fineract/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositAccount.java:869: error: [MissingOverride] setClosedOnDate overrides method in SavingsAccount; expected @Override
    public void setClosedOnDate(final LocalDate closedOnDate) {
                ^
        ^
    (see https://errorprone.info/bugpattern/StatementSwitchToExpressionSwitch)
Unknown file extension: fineract-command-async/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  Did you mean 'switch (this.accountTermAndPreClosure.depositPeriodFrequencyType()) {'?
> Task :fineract-command-async:licenseMain UP-TO-DATE
> Task :fineract-command-async:licenseTest UP-TO-DATE
> Task :fineract-command-async:license UP-TO-DATE
/home/runner/work/fineract/fineract/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java:1116: error: [MissingOverride] setClosedOnDate overrides method in SavingsAccount; expected @Override
    public void setClosedOnDate(final LocalDate closedOnDate) {

@alberto-art3ch alberto-art3ch force-pushed the FINERACT-2652/decouple-savingsaccount-from-injected-collaborators branch from 5d799c8 to 382a1b8 Compare June 29, 2026 12:27
@alberto-art3ch alberto-art3ch force-pushed the FINERACT-2652/decouple-savingsaccount-from-injected-collaborators branch from 382a1b8 to d05c3c7 Compare June 29, 2026 13:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants