FINERACT-1932: Add custom Configuration class for self-pockets module

This commit is contained in:
Mohamed Magdi-Abdelmonem
2023-10-27 16:05:25 +02:00
committed by Aleksandar Vidakovic
parent 19bd4fcb29
commit 311eb875b3
7 changed files with 112 additions and 74 deletions
@@ -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<String, AccountEntityService> accountEntityServiceHashMap = new HashMap<>();
@Autowired
public AccountEntityServiceFactory(final Set<AccountEntityService> accountEntityServices) {
for (AccountEntityService service : accountEntityServices) {
this.accountEntityServiceHashMap.put(service.getKey(), service);
@@ -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;
@@ -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;
@@ -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;
@@ -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());
@@ -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) {
@@ -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<AccountEntityService> 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);
}
}