account-service http://jira.mfd.msk:8088/browse/CLS-509 InformationAccount
This commit is contained in:
parent
4ee335efd5
commit
14f6d5656b
3 changed files with 49 additions and 4 deletions
|
|
@ -2,21 +2,30 @@ package ru.spcex.clearing.account.config.validation;
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
import ru.clearing.classes.statics.data.account.InformationAccount;
|
import ru.clearing.classes.statics.data.account.InformationAccount;
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
|
import ru.clearing.platform.dictionary.AccountTypeDictionary;
|
||||||
|
import ru.clearing.platform.dictionary.ServiceStatusDictionary;
|
||||||
import ru.spcex.clearing.account.errors.AccountError;
|
import ru.spcex.clearing.account.errors.AccountError;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.InformationAccountNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.InformationAccountNewRequest;
|
||||||
|
import ru.spcex.clearing.validation.common.rules.DictionaryPresentRule;
|
||||||
import ru.spcex.clearing.validation.common.rules.IdPresentRule;
|
import ru.spcex.clearing.validation.common.rules.IdPresentRule;
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
|
import ru.spcex.platform.enumeration.AccountType;
|
||||||
|
import ru.spcex.platform.enumeration.ServiceStatus;
|
||||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
|
import ru.spcex.platform.utils.validation.IValidationRule;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
|
@ -33,6 +42,8 @@ public class InformationAccountValidationConfig {
|
||||||
Consumer<String> addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s));
|
Consumer<String> addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s));
|
||||||
addImdg.accept(IMDGDistributedNames.Map_Company);
|
addImdg.accept(IMDGDistributedNames.Map_Company);
|
||||||
addImdg.accept(IMDGDistributedNames.Map_InformationAccount);
|
addImdg.accept(IMDGDistributedNames.Map_InformationAccount);
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_ServiceStatusDictionary);
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_AccountTypeDictionary);
|
||||||
return new ValidatorImpl<>(context,
|
return new ValidatorImpl<>(context,
|
||||||
IdPresentRule.instance("companyId",
|
IdPresentRule.instance("companyId",
|
||||||
InformationAccountNewRequest::getCompanyId,
|
InformationAccountNewRequest::getCompanyId,
|
||||||
|
|
@ -52,9 +63,33 @@ public class InformationAccountValidationConfig {
|
||||||
);
|
);
|
||||||
if (infoAccounts.isEmpty()) return null;
|
if (infoAccounts.isEmpty()) return null;
|
||||||
return AccountError.InfoAccountAlreadyExist;
|
return AccountError.InfoAccountAlreadyExist;
|
||||||
})
|
}),
|
||||||
|
DictionaryPresentRule.instance("status", InformationAccountNewRequest::getStatus,
|
||||||
|
IMDGDistributedNames.Map_ServiceStatusDictionary, ServiceStatusDictionary.class,
|
||||||
|
AccountError.RequiredFieldEmpty, AccountError.DictionaryNotFound, false),
|
||||||
|
DictionaryPresentRule.instance("accountType", InformationAccountNewRequest::getAccountType,
|
||||||
|
IMDGDistributedNames.Map_AccountTypeDictionary, AccountTypeDictionary.class,
|
||||||
|
AccountError.RequiredFieldEmpty, AccountError.DictionaryNotFound, false),
|
||||||
|
new SameInfoAccountValidation()
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class SameInfoAccountValidation implements IValidationRule<ImdgValidationContext<InformationAccountNewRequest>> {
|
||||||
|
@Override
|
||||||
|
public Optional<EnumMessage> validate(ImdgValidationContext<InformationAccountNewRequest> context) {
|
||||||
|
InformationAccountNewRequest req = context.getValidatedObject();
|
||||||
|
Imdg<Account> accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class);
|
||||||
|
String accountType = AccountType.Info.getKey(); // or req.getAccountType()
|
||||||
|
Account existAccount = accountImdg.getFirstObjectByFieldValues(Map.of(
|
||||||
|
"account", req.getAccount(),
|
||||||
|
"accountType", accountType,
|
||||||
|
"status", ServiceStatus.Active.getKey()
|
||||||
|
));
|
||||||
|
if (existAccount != null) {
|
||||||
|
return of(AccountError.AccountAlreadyExist, existAccount.getAccount());
|
||||||
|
}
|
||||||
|
return empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import ru.spcex.clearing.platform.messaging.serialization.LogFormatter;
|
||||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||||
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
|
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||||
import ru.spcex.clearing.util.services.RequestHelper;
|
import ru.spcex.clearing.util.services.RequestHelper;
|
||||||
import ru.spcex.clearing.validation.common.ValidationHelper;
|
import ru.spcex.clearing.validation.common.ValidationHelper;
|
||||||
import ru.spcex.platform.enumeration.AccountType;
|
import ru.spcex.platform.enumeration.AccountType;
|
||||||
|
|
@ -50,6 +51,7 @@ public class InformationAccountService extends QueueConsumer implements Initiali
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
private final KafkaSender kafkaSender;
|
private final KafkaSender kafkaSender;
|
||||||
private final IMessageResolver messageResolver;
|
private final IMessageResolver messageResolver;
|
||||||
|
private final UserRoleVerification userRoleVerification;
|
||||||
private final ImdgProvider imdgProvider;
|
private final ImdgProvider imdgProvider;
|
||||||
private final ValidationHelper validationHelper;
|
private final ValidationHelper validationHelper;
|
||||||
private final AccountService accountService;
|
private final AccountService accountService;
|
||||||
|
|
@ -68,6 +70,7 @@ public class InformationAccountService extends QueueConsumer implements Initiali
|
||||||
Producer<String, Object> kafkaResponseQueue,
|
Producer<String, Object> kafkaResponseQueue,
|
||||||
KafkaSender kafkaSender,
|
KafkaSender kafkaSender,
|
||||||
IMessageResolver messageResolver,
|
IMessageResolver messageResolver,
|
||||||
|
UserRoleVerification userRoleVerification,
|
||||||
ImdgProvider imdgProvider,
|
ImdgProvider imdgProvider,
|
||||||
ValidationHelper validationHelper,
|
ValidationHelper validationHelper,
|
||||||
AccountService accountService,
|
AccountService accountService,
|
||||||
|
|
@ -77,6 +80,7 @@ public class InformationAccountService extends QueueConsumer implements Initiali
|
||||||
super(kafkaQueue, kafkaResponseQueue);
|
super(kafkaQueue, kafkaResponseQueue);
|
||||||
this.kafkaSender = kafkaSender;
|
this.kafkaSender = kafkaSender;
|
||||||
this.messageResolver = messageResolver;
|
this.messageResolver = messageResolver;
|
||||||
|
this.userRoleVerification = userRoleVerification;
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
this.validationHelper = validationHelper;
|
this.validationHelper = validationHelper;
|
||||||
this.accountService = accountService;
|
this.accountService = accountService;
|
||||||
|
|
@ -104,7 +108,9 @@ public class InformationAccountService extends QueueConsumer implements Initiali
|
||||||
public RequestInfoUpdate informationAccountNew(BaseRequest<InformationAccountNewRequest> userRequest) {
|
public RequestInfoUpdate informationAccountNew(BaseRequest<InformationAccountNewRequest> userRequest) {
|
||||||
log.debug("InformationAccountNewRequest received");
|
log.debug("InformationAccountNewRequest received");
|
||||||
|
|
||||||
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, infoAccountNewRequestValidator);
|
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
|
||||||
|
if (requestInfoUpdate != null) return requestInfoUpdate;
|
||||||
|
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, infoAccountNewRequestValidator);
|
||||||
if (requestInfoUpdate != null) return requestInfoUpdate;
|
if (requestInfoUpdate != null) return requestInfoUpdate;
|
||||||
|
|
||||||
InformationAccountNewRequest req = userRequest.getRequestPayload();
|
InformationAccountNewRequest req = userRequest.getRequestPayload();
|
||||||
|
|
@ -128,7 +134,7 @@ public class InformationAccountService extends QueueConsumer implements Initiali
|
||||||
|
|
||||||
Instant now = Instant.now();
|
Instant now = Instant.now();
|
||||||
Account account = new Account();
|
Account account = new Account();
|
||||||
account.setAccount(accountValue);
|
account.setAccount(req.getAccount());
|
||||||
account.setAccountType(AccountType.Info.getKey());
|
account.setAccountType(AccountType.Info.getKey());
|
||||||
if (req.getStatus() == null) {
|
if (req.getStatus() == null) {
|
||||||
account.setStatus(WorkflowStatus.Active.getKey());
|
account.setStatus(WorkflowStatus.Active.getKey());
|
||||||
|
|
@ -139,6 +145,7 @@ public class InformationAccountService extends QueueConsumer implements Initiali
|
||||||
account.setCompanyId(req.getCompanyId());
|
account.setCompanyId(req.getCompanyId());
|
||||||
account.setCreated(now);
|
account.setCreated(now);
|
||||||
account.setUpdated(now);
|
account.setUpdated(now);
|
||||||
|
|
||||||
requestInfoUpdate = accountService.fillAccountFromRelation(account, userRequest.getId(), true);
|
requestInfoUpdate = accountService.fillAccountFromRelation(account, userRequest.getId(), true);
|
||||||
if (requestInfoUpdate != null) return requestInfoUpdate;
|
if (requestInfoUpdate != null) return requestInfoUpdate;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.ArgumentCaptor;
|
import org.mockito.ArgumentCaptor;
|
||||||
import org.mockito.Captor;
|
import org.mockito.Captor;
|
||||||
|
import org.mockito.Mockito;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
import org.springframework.boot.test.mock.mockito.SpyBean;
|
||||||
|
|
@ -31,6 +32,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.account.InformationAccoun
|
||||||
import ru.spcex.clearing.test.TestObjectCreator;
|
import ru.spcex.clearing.test.TestObjectCreator;
|
||||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||||
|
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||||
import ru.spcex.platform.enumeration.*;
|
import ru.spcex.platform.enumeration.*;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
@ -199,8 +201,9 @@ class InformationAccountServiceTest {
|
||||||
accountInfo.setCompanyId(account.getCompanyId());
|
accountInfo.setCompanyId(account.getCompanyId());
|
||||||
accountInfoImdg.insert(accountInfo);
|
accountInfoImdg.insert(accountInfo);
|
||||||
}
|
}
|
||||||
|
UserRoleVerification userRoleVerification = Mockito.mock(UserRoleVerification.class);
|
||||||
InformationAccountService infoAccSvc=new InformationAccountService(null,null,null,
|
InformationAccountService infoAccSvc=new InformationAccountService(null,null,null,
|
||||||
null, imdgProvider, null, null, null, null);
|
null, userRoleVerification, imdgProvider, null, null, null, null);
|
||||||
Long n = infoAccSvc.accountNextId();
|
Long n = infoAccSvc.accountNextId();
|
||||||
Assertions.assertEquals(13L, n);
|
Assertions.assertEquals(13L, n);
|
||||||
n = infoAccSvc.accountNextId();
|
n = infoAccSvc.accountNextId();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue