diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceFactory.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceFactory.java index a3427e61b..21d665861 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceFactory.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceFactory.java @@ -22,17 +22,11 @@ package org.apache.fineract.portfolio.self.pockets.service; import java.util.HashMap; import java.util.Map; import java.util.Set; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; -@Component -@Scope("singleton") public class AccountEntityServiceFactory { private Map accountEntityServiceHashMap = new HashMap<>(); - @Autowired public AccountEntityServiceFactory(final Set accountEntityServices) { for (AccountEntityService service : accountEntityServices) { this.accountEntityServiceHashMap.put(service.getKey(), service); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceForLoanImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceForLoanImpl.java index 120b83013..b16d9b27d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceForLoanImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceForLoanImpl.java @@ -19,15 +19,14 @@ package org.apache.fineract.portfolio.self.pockets.service; +import lombok.RequiredArgsConstructor; import org.apache.fineract.infrastructure.accountnumberformat.domain.EntityAccountType; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.portfolio.loanaccount.exception.LoanNotFoundException; import org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformService; import org.apache.fineract.portfolio.self.loanaccount.service.AppuserLoansMapperReadService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -@Service +@RequiredArgsConstructor public class AccountEntityServiceForLoanImpl implements AccountEntityService { private static final String KEY = EntityAccountType.LOAN.name(); @@ -36,16 +35,6 @@ public class AccountEntityServiceForLoanImpl implements AccountEntityService { private final AppuserLoansMapperReadService appuserLoansMapperReadService; private final LoanReadPlatformService loanReadPlatformService; - @Autowired - public AccountEntityServiceForLoanImpl(final PlatformSecurityContext context, - final AppuserLoansMapperReadService appuserLoansMapperReadService, final LoanReadPlatformService loanReadPlatformService) { - - this.context = context; - this.appuserLoansMapperReadService = appuserLoansMapperReadService; - this.loanReadPlatformService = loanReadPlatformService; - - } - @Override public String getKey() { return KEY; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceForSavingsImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceForSavingsImpl.java index 7cb5503df..8d772ec1b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceForSavingsImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceForSavingsImpl.java @@ -19,15 +19,14 @@ package org.apache.fineract.portfolio.self.pockets.service; +import lombok.RequiredArgsConstructor; import org.apache.fineract.infrastructure.accountnumberformat.domain.EntityAccountType; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.portfolio.savings.exception.SavingsAccountNotFoundException; import org.apache.fineract.portfolio.savings.service.SavingsAccountReadPlatformService; import org.apache.fineract.portfolio.self.savings.service.AppuserSavingsMapperReadService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -@Service +@RequiredArgsConstructor public class AccountEntityServiceForSavingsImpl implements AccountEntityService { private static final String KEY = EntityAccountType.SAVINGS.name(); @@ -36,17 +35,6 @@ public class AccountEntityServiceForSavingsImpl implements AccountEntityService private final AppuserSavingsMapperReadService appuserSavingsMapperReadService; private final SavingsAccountReadPlatformService savingsAccountReadPlatformService; - @Autowired - public AccountEntityServiceForSavingsImpl(final PlatformSecurityContext context, - final AppuserSavingsMapperReadService appuserSavingsMapperReadService, - final SavingsAccountReadPlatformService savingsAccountReadPlatformService) { - - this.context = context; - this.appuserSavingsMapperReadService = appuserSavingsMapperReadService; - this.savingsAccountReadPlatformService = savingsAccountReadPlatformService; - - } - @Override public String getKey() { return KEY; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceForShareAccountsImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceForShareAccountsImpl.java index a2e56a043..8fb326951 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceForShareAccountsImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/AccountEntityServiceForShareAccountsImpl.java @@ -19,15 +19,14 @@ package org.apache.fineract.portfolio.self.pockets.service; +import lombok.RequiredArgsConstructor; import org.apache.fineract.infrastructure.accountnumberformat.domain.EntityAccountType; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.portfolio.accounts.exceptions.ShareAccountNotFoundException; import org.apache.fineract.portfolio.self.shareaccounts.service.AppUserShareAccountsMapperReadPlatformService; import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountReadPlatformService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -@Service +@RequiredArgsConstructor public class AccountEntityServiceForShareAccountsImpl implements AccountEntityService { private static final String KEY = EntityAccountType.SHARES.name(); @@ -36,15 +35,6 @@ public class AccountEntityServiceForShareAccountsImpl implements AccountEntitySe private final AppUserShareAccountsMapperReadPlatformService appUserShareAccountsMapperReadPlatformService; private final ShareAccountReadPlatformService shareAccountReadPlatformService; - @Autowired - public AccountEntityServiceForShareAccountsImpl(final PlatformSecurityContext context, - final AppUserShareAccountsMapperReadPlatformService appUserShareAccountsMapperReadPlatformService, - final ShareAccountReadPlatformService shareAccountReadPlatformService) { - this.context = context; - this.appUserShareAccountsMapperReadPlatformService = appUserShareAccountsMapperReadPlatformService; - this.shareAccountReadPlatformService = shareAccountReadPlatformService; - } - @Override public String getKey() { return KEY; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/PocketAccountMappingReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/PocketAccountMappingReadPlatformServiceImpl.java index 1c534767a..3f4d29b20 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/PocketAccountMappingReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/PocketAccountMappingReadPlatformServiceImpl.java @@ -20,17 +20,16 @@ package org.apache.fineract.portfolio.self.pockets.service; import java.util.ArrayList; import java.util.Collection; +import lombok.RequiredArgsConstructor; import org.apache.fineract.infrastructure.accountnumberformat.domain.EntityAccountType; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.portfolio.self.pockets.data.PocketAccountMappingData; import org.apache.fineract.portfolio.self.pockets.domain.PocketAccountMapping; import org.apache.fineract.portfolio.self.pockets.domain.PocketAccountMappingRepositoryWrapper; import org.apache.fineract.portfolio.self.pockets.domain.PocketRepositoryWrapper; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.stereotype.Service; -@Service +@RequiredArgsConstructor public class PocketAccountMappingReadPlatformServiceImpl implements PocketAccountMappingReadPlatformService { private final JdbcTemplate jdbcTemplate; @@ -38,16 +37,6 @@ public class PocketAccountMappingReadPlatformServiceImpl implements PocketAccoun private final PocketRepositoryWrapper pocketRepositoryWrapper; private final PocketAccountMappingRepositoryWrapper pocketAccountMappingRepositoryWrapper; - @Autowired - public PocketAccountMappingReadPlatformServiceImpl(final JdbcTemplate jdbcTemplate, final PlatformSecurityContext context, - final PocketRepositoryWrapper pocketRepositoryWrapper, - final PocketAccountMappingRepositoryWrapper pocketAccountMappingRepositoryWrapper) { - this.jdbcTemplate = jdbcTemplate; - this.context = context; - this.pocketRepositoryWrapper = pocketRepositoryWrapper; - this.pocketAccountMappingRepositoryWrapper = pocketAccountMappingRepositoryWrapper; - } - @Override public PocketAccountMappingData retrieveAll() { final Long pocketId = this.pocketRepositoryWrapper.findByAppUserId(this.context.authenticatedUser().getId()); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/PocketWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/PocketWritePlatformServiceImpl.java index 34c30cde5..1a9646bcb 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/PocketWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/service/PocketWritePlatformServiceImpl.java @@ -24,6 +24,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.util.ArrayList; import java.util.List; +import lombok.RequiredArgsConstructor; import org.apache.fineract.infrastructure.accountnumberformat.domain.EntityAccountType; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; @@ -36,11 +37,9 @@ import org.apache.fineract.portfolio.self.pockets.domain.Pocket; import org.apache.fineract.portfolio.self.pockets.domain.PocketAccountMapping; import org.apache.fineract.portfolio.self.pockets.domain.PocketAccountMappingRepositoryWrapper; import org.apache.fineract.portfolio.self.pockets.domain.PocketRepositoryWrapper; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -@Service +@RequiredArgsConstructor public class PocketWritePlatformServiceImpl implements PocketWritePlatformService { private final PlatformSecurityContext context; @@ -50,19 +49,6 @@ public class PocketWritePlatformServiceImpl implements PocketWritePlatformServic private final PocketAccountMappingRepositoryWrapper pocketAccountMappingRepositoryWrapper; private final PocketAccountMappingReadPlatformService pocketAccountMappingReadPlatformService; - @Autowired - public PocketWritePlatformServiceImpl(final PlatformSecurityContext context, PocketDataValidator pocketDataValidator, - final AccountEntityServiceFactory accountEntityServiceFactory, final PocketRepositoryWrapper pocketRepositoryWrapper, - final PocketAccountMappingRepositoryWrapper pocketAccountMappingRepositoryWrapper, - final PocketAccountMappingReadPlatformService pocketAccountMappingReadPlatformService) { - this.context = context; - this.pocketDataValidator = pocketDataValidator; - this.accountEntityServiceFactory = accountEntityServiceFactory; - this.pocketRepositoryWrapper = pocketRepositoryWrapper; - this.pocketAccountMappingRepositoryWrapper = pocketAccountMappingRepositoryWrapper; - this.pocketAccountMappingReadPlatformService = pocketAccountMappingReadPlatformService; - } - @Transactional @Override public CommandProcessingResult linkAccounts(JsonCommand command) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/starter/SelfPocketsConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/starter/SelfPocketsConfiguration.java new file mode 100644 index 000000000..8d8245c40 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/starter/SelfPocketsConfiguration.java @@ -0,0 +1,102 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.portfolio.self.pockets.starter; + +import java.util.Set; +import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; +import org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformService; +import org.apache.fineract.portfolio.savings.service.SavingsAccountReadPlatformService; +import org.apache.fineract.portfolio.self.loanaccount.service.AppuserLoansMapperReadService; +import org.apache.fineract.portfolio.self.pockets.data.PocketDataValidator; +import org.apache.fineract.portfolio.self.pockets.domain.PocketAccountMappingRepositoryWrapper; +import org.apache.fineract.portfolio.self.pockets.domain.PocketRepositoryWrapper; +import org.apache.fineract.portfolio.self.pockets.service.AccountEntityService; +import org.apache.fineract.portfolio.self.pockets.service.AccountEntityServiceFactory; +import org.apache.fineract.portfolio.self.pockets.service.AccountEntityServiceForLoanImpl; +import org.apache.fineract.portfolio.self.pockets.service.AccountEntityServiceForSavingsImpl; +import org.apache.fineract.portfolio.self.pockets.service.AccountEntityServiceForShareAccountsImpl; +import org.apache.fineract.portfolio.self.pockets.service.PocketAccountMappingReadPlatformService; +import org.apache.fineract.portfolio.self.pockets.service.PocketAccountMappingReadPlatformServiceImpl; +import org.apache.fineract.portfolio.self.pockets.service.PocketWritePlatformService; +import org.apache.fineract.portfolio.self.pockets.service.PocketWritePlatformServiceImpl; +import org.apache.fineract.portfolio.self.savings.service.AppuserSavingsMapperReadService; +import org.apache.fineract.portfolio.self.shareaccounts.service.AppUserShareAccountsMapperReadPlatformService; +import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountReadPlatformService; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; +import org.springframework.jdbc.core.JdbcTemplate; + +@Configuration +public class SelfPocketsConfiguration { + + @Bean + @Scope("singleton") + @ConditionalOnMissingBean(AccountEntityServiceFactory.class) + public AccountEntityServiceFactory accountEntityServiceFactory(Set accountEntityServices) { + return new AccountEntityServiceFactory(accountEntityServices); + } + + @Bean + @ConditionalOnMissingBean(AccountEntityServiceForLoanImpl.class) + public AccountEntityService accountEntityServiceForLoanImpl(PlatformSecurityContext context, + AppuserLoansMapperReadService appuserLoansMapperReadService, LoanReadPlatformService loanReadPlatformService) { + + return new AccountEntityServiceForLoanImpl(context, appuserLoansMapperReadService, loanReadPlatformService); + + } + + @Bean + @ConditionalOnMissingBean(AccountEntityServiceForSavingsImpl.class) + public AccountEntityService accountEntityServiceForSavingsImpl(PlatformSecurityContext context, + AppuserSavingsMapperReadService appuserSavingsMapperReadService, + SavingsAccountReadPlatformService savingsAccountReadPlatformService) { + + return new AccountEntityServiceForSavingsImpl(context, appuserSavingsMapperReadService, savingsAccountReadPlatformService); + } + + @Bean + @ConditionalOnMissingBean(AccountEntityServiceForShareAccountsImpl.class) + public AccountEntityService accountEntityServiceForShareAccountsImpl(PlatformSecurityContext context, + AppUserShareAccountsMapperReadPlatformService appUserShareAccountsMapperReadPlatformService, + ShareAccountReadPlatformService shareAccountReadPlatformService) { + return new AccountEntityServiceForShareAccountsImpl(context, appUserShareAccountsMapperReadPlatformService, + shareAccountReadPlatformService); + } + + @Bean + @ConditionalOnMissingBean(PocketAccountMappingReadPlatformService.class) + public PocketAccountMappingReadPlatformService pocketAccountMappingReadPlatformService(JdbcTemplate jdbcTemplate, + PlatformSecurityContext context, PocketRepositoryWrapper pocketRepositoryWrapper, + PocketAccountMappingRepositoryWrapper pocketAccountMappingRepositoryWrapper) { + return new PocketAccountMappingReadPlatformServiceImpl(jdbcTemplate, context, pocketRepositoryWrapper, + pocketAccountMappingRepositoryWrapper); + } + + @Bean + @ConditionalOnMissingBean(PocketWritePlatformService.class) + public PocketWritePlatformService pocketWritePlatformService(PlatformSecurityContext context, PocketDataValidator pocketDataValidator, + AccountEntityServiceFactory accountEntityServiceFactory, PocketRepositoryWrapper pocketRepositoryWrapper, + PocketAccountMappingRepositoryWrapper pocketAccountMappingRepositoryWrapper, + PocketAccountMappingReadPlatformService pocketAccountMappingReadPlatformService) { + return new PocketWritePlatformServiceImpl(context, pocketDataValidator, accountEntityServiceFactory, pocketRepositoryWrapper, + pocketAccountMappingRepositoryWrapper, pocketAccountMappingReadPlatformService); + } +}