From 15a477e8ce9accdcbe1ba48365fbf290401eeb56 Mon Sep 17 00:00:00 2001 From: psemenkov Date: Wed, 5 Apr 2023 18:45:29 +0300 Subject: [PATCH] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-258=20?= =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20CurrencyService=20?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0=D1=86=D0=B8=D1=8E=20=D0=B8?= =?UTF-8?q?=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=BA=20=D0=BD=D0=B5=D0=BC?= =?UTF-8?q?=D1=83.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../securities/errors/SecuritiesError.java | 5 +- .../service/cud/CurrencyService.java | 92 ++++++++++ .../cud/FixedIncomeSecurityService.java | 6 +- .../service/cud/СurrencyService.java | 171 ------------------ .../validation/ValidationProvider.java | 24 +++ .../rule/CurrencyNewValidationRule.java | 38 ++++ .../rule/CurrencyUpdateValidationRule.java | 38 ++++ .../service/AbstractServiceTest.java | 5 + .../service/CurrencyServiceTest.java | 95 ++++++++++ .../service/EquitySecurityServiceTest.java | 48 ++--- .../FixedIncomeSecurityServiceTest.java | 48 ++--- .../cud/securitites/CurrencyNewRequest.java | 26 +++ .../securitites/CurrencyUpdateRequest.java | 39 ++++ 13 files changed, 398 insertions(+), 237 deletions(-) create mode 100644 clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/CurrencyService.java delete mode 100644 clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/СurrencyService.java create mode 100644 clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CurrencyNewValidationRule.java create mode 100644 clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CurrencyUpdateValidationRule.java create mode 100644 clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CurrencyServiceTest.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/CurrencyNewRequest.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/CurrencyUpdateRequest.java diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java index 0981c30ff..7bffa0a3f 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java @@ -6,8 +6,11 @@ public enum SecuritiesError implements IErrorEnumId { RequiredFieldIsEmpty(1002L), WrongFieldValue(1004L), InstrumentAlreadyExists(1010L), - InstrumentNotActive(1012L), InstrumentNotFound(1011L), + InstrumentNotActive(1012L), + CurrencyAlreadyExists(1015L), + CurrencyNotFound(1016L), + ; private final Long id; diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/CurrencyService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/CurrencyService.java new file mode 100644 index 000000000..52e01c60f --- /dev/null +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/CurrencyService.java @@ -0,0 +1,92 @@ +package ru.spcex.clearing.securities.service.cud; + +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.misc.Currency; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.securitites.CurrencyNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.securitites.CurrencyUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.securities.component.ListingBuilder; +import ru.spcex.clearing.securities.validation.ValidationProvider; +import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgId; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.ImdgTransaction; + +@Service +public class CurrencyService extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg currencyImdg; + private final ImdgProvider imdgProvider; + private final ImdgId idGenerator; + private final ValidationProvider validation; + private final ValidationHelper validationHelper; + private final ListingBuilder listingBuilder = new ListingBuilder(); + + @Autowired + public CurrencyService(Consumer kafkaQueue, + Producer kafkaProducer, + ImdgProvider imdgProvider, + ValidationProvider validation, + ValidationHelper validationHelper) { + super(kafkaQueue, kafkaProducer); + this.validation = validation; + this.currencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class); + this.imdgProvider = imdgProvider; + this.idGenerator = imdgProvider.getImdgIdGenerator(); + this.validationHelper = validationHelper; + } + + @Override + public void afterPropertiesSet() { + callback(CurrencyNewRequest.class) + .setFunction(this::newCurrency) + .forDestination(Consts.DESTINATION_СURRENCY_NEW, callbacks::put); + callback(CurrencyUpdateRequest.class) + .setFunction(this::updateCurrency) + .forDestination(Consts.DESTINATION_СURRENCY_UPDATE, callbacks::put); + imdgProvider.waitAvailable(); + init(); + } + + private RequestInfoUpdate newCurrency(BaseRequest userRequest) { + ImdgTransaction transaction = imdgProvider.newTransaction(); + CurrencyNewRequest req = userRequest.getRequestPayload(); + + RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.currencyNewValidator()); + if (requestInfoUpdate != null) return requestInfoUpdate; + + log.debug("newCurrency received"); + Currency currency = new Currency(); + currency.setId(idGenerator.nextId()); + currency.setCountryCode(req.getCountryCode()); + currency.setCurrencyCode(req.getCurrencyCode()); + currencyImdg.insert(currency); + log.debug("successfully processed, request id {}, new object id {}", userRequest.getId(), currency.getId()); + return null; // default success + } + + private RequestInfoUpdate updateCurrency(BaseRequest userRequest) { + CurrencyUpdateRequest req = userRequest.getRequestPayload(); + log.debug("updateCurrency received id = {}", req.getId()); + + RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.currencyUpdateValidator()); + if (requestInfoUpdate != null) return requestInfoUpdate; + + Currency currency = currencyImdg.getSingleObjectByID(req.getId()); + currency.setCountryCode(req.getCountryCode()); + currency.setCurrencyCode(req.getCurrencyCode()); + currencyImdg.update(currency); + return null; + } +} diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeSecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeSecurityService.java index 6beb91d3a..aa618aefa 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeSecurityService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeSecurityService.java @@ -76,7 +76,7 @@ public class FixedIncomeSecurityService extends QueueConsumer implements Initial RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.fixedIncomeNewValidator()); if (requestInfoUpdate != null) return requestInfoUpdate; - log.debug("EquitySecurityNewRequest received"); + log.debug("newFixedIncome received"); FixedIncomeSecurity fixedIncome = new FixedIncomeSecurity(); fixedIncome.setId(idGenerator.nextId()); fixedIncome.setSecuritySymbol(req.getSecuritySymbol()); @@ -119,7 +119,7 @@ public class FixedIncomeSecurityService extends QueueConsumer implements Initial private RequestInfoUpdate updateFixedIncome(BaseRequest userRequest) { FixedIncomeSecurityUpdateRequest req = userRequest.getRequestPayload(); - log.debug("MoneyMarketSecurityUpdateRequest received id = {}", req.getId()); + log.debug("updateFixedIncome received id = {}", req.getId()); RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.fixedIncomeUpdateValidator()); if (requestInfoUpdate != null) return requestInfoUpdate; @@ -148,7 +148,7 @@ public class FixedIncomeSecurityService extends QueueConsumer implements Initial fixedIncomeSecurityImdg.update(fixedIncome); Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", fixedIncome.getId())); if (listing == null) { - log.error("MoneyMarketSecurityUpdateRequest id {} couldn't find listing with securityId {}", req.getId(), fixedIncome.getId()); + log.error("updateFixedIncome id {} couldn't find listing with securityId {}", req.getId(), fixedIncome.getId()); return null; } listing = listingBuilder.byFixedIncomeEquity(fixedIncome, listing); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/СurrencyService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/СurrencyService.java deleted file mode 100644 index a6632dbe5..000000000 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/СurrencyService.java +++ /dev/null @@ -1,171 +0,0 @@ -package ru.spcex.clearing.securities.service.cud; - -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.clients.producer.Producer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; -import ru.clearing.classes.statics.data.misc.Listing; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.BaseRequest; -import ru.spcex.clearing.platform.messaging.domain.Consts; -import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityUpdateRequest; -import ru.spcex.clearing.platform.messaging.service.QueueConsumer; -import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; -import ru.spcex.clearing.securities.component.ListingBuilder; -import ru.spcex.clearing.securities.validation.ValidationProvider; -import ru.spcex.clearing.validation.common.ValidationHelper; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgId; -import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.imdg.api.ImdgTransaction; - -import java.time.Instant; -import java.util.Map; - -@Service -public class СurrencyService extends QueueConsumer implements InitializingBean { - private final Logger log = LoggerFactory.getLogger(getClass()); - private final Imdg equitySecurityImdg; - private final Imdg listingImdg; - private final ImdgProvider imdgProvider; - private final ImdgId idGenerator; - private final ValidationProvider validation; - private final ValidationHelper validationHelper; - private final ListingBuilder listingBuilder = new ListingBuilder(); - - @Autowired - public СurrencyService(Consumer kafkaQueue, - Producer kafkaProducer, - ImdgProvider imdgProvider, - ValidationProvider validation, - ValidationHelper validationHelper) { - super(kafkaQueue, kafkaProducer); - this.validation = validation; - this.equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class); - this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); - this.imdgProvider = imdgProvider; - this.idGenerator = imdgProvider.getImdgIdGenerator(); - this.validationHelper = validationHelper; - } - - @Override - public void afterPropertiesSet() { - callback(EquitySecurityNewRequest.class) - .setFunction(this::newEquity) - .forDestination(Consts.DESTINATION_СURRENCY_NEW, callbacks::put); - callback(EquitySecurityUpdateRequest.class) - .setFunction(this::updateEquity) - .forDestination(Consts.DESTINATION_СURRENCY_UPDATE, callbacks::put); - callback(CommonDeleteRequest.class) - .setFunction(this::deleteEquity) - .forDestination(Consts.DESTINATION_СURRENCY_DELETE, callbacks::put); - imdgProvider.waitAvailable(); - init(); - } - - private RequestInfoUpdate newEquity(BaseRequest userRequest) { - ImdgTransaction transaction = imdgProvider.newTransaction(); - EquitySecurityNewRequest req = userRequest.getRequestPayload(); - - RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.equityNewValidator()); - if (requestInfoUpdate != null) return requestInfoUpdate; - - log.debug("EquitySecurityNewRequest received"); - EquitySecurity equity = new EquitySecurity(); - equity.setId(idGenerator.nextId()); - equity.setSecuritySymbol(req.getSecuritySymbol()); - equity.setShortName(req.getShortName()); - equity.setFullName(req.getFullName()); - equity.setIsin(req.getIsin()); - equity.setShareType(req.getShareType()); - equity.setLotSize(req.getLotSize()); - equity.setIssuerId(req.getIssuerId()); - equity.setShortNameEng(req.getShortNameEng()); - equity.setFullNameEng(req.getFullNameEng()); - equity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); - equity.setInstrumentType(req.getInstrumentType()); - equity.setSecurityId(equity.getId()); - equity.setCreated(Instant.now()); - try { - transaction.beginTransaction(); - Imdg equityImdg = transaction.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class); - Imdg listingMap = transaction.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); - //одним скопом выполняем реквест - equityImdg.insert(equity); - Listing listing = listingBuilder.byNewEquity(equity, req); - listingMap.insert(listing); - //и сохраняем обновленный -// reqInfoMap.insert(reqInfo); - transaction.commitTransaction(); - } catch (Throwable e) { - transaction.rollbackTransaction(); -// RequestInfo.update(reqInfo, Status.Error, ExceptionUtils.getStackTrace(e)); -// requestInfoImdg.insert(reqInfo); - } - log.debug("successfully processed, request id {}, new object id {}", userRequest.getId(), equity.getId()); - return null; // default success - } - - private RequestInfoUpdate updateEquity(BaseRequest userRequest) { - EquitySecurityUpdateRequest req = userRequest.getRequestPayload(); - log.debug("MoneyMarketSecurityUpdateRequest received id = {}", req.getId()); - - RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.equityUpdateValidator()); - if (requestInfoUpdate != null) return requestInfoUpdate; - - EquitySecurity equity = equitySecurityImdg.getSingleObjectByID(req.getId()); - Instant updateTime = Instant.now(); - equity.setUpdated(updateTime); - equity.setSecuritySymbol(req.getSecuritySymbol()); - equity.setShortName(req.getShortName()); - equity.setFullName(req.getFullName()); - equity.setIsin(req.getIsin()); - equity.setShareType(req.getShareType()); - equity.setLotSize(req.getLotSize()); - equity.setIssuerId(req.getIssuerId()); - equity.setShortNameEng(req.getShortNameEng()); - equity.setFullNameEng(req.getFullNameEng()); - equity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); - equity.setInstrumentType(req.getInstrumentType()); - - equitySecurityImdg.update(equity); - Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", equity.getId())); - if (listing == null) { - log.error("MoneyMarketSecurityUpdateRequest id {} couldn't find listing with securityId {}", req.getId(), equity.getId()); - return null; - } - listing = listingBuilder.byUpdateEquity(equity, listing); - listingImdg.update(listing); - return null; - } - - private RequestInfoUpdate deleteEquity(BaseRequest userRequest) { - CommonDeleteRequest req = userRequest.getRequestPayload(); - log.debug("CommonDeleteRequest received id = {}", req.getId()); - - RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.equityDeleteValidator()); - if (requestInfoUpdate != null) return requestInfoUpdate; - - Instant updateTime = Instant.now(); - EquitySecurity equity = equitySecurityImdg.getSingleObjectByID(req.getId()); - equity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey()); - equity.setUpdated(updateTime); - equitySecurityImdg.update(equity); - - Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", equity.getId())); - if (listing == null) { - log.error("CommonDeleteRequest id {} couldn't find listing with securityId {}", req.getId(), equity.getId()); - return null; - } - listing.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey()); - listing.setUpdated(updateTime); - listingImdg.update(listing); - return null; - } -} diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ValidationProvider.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ValidationProvider.java index ae176fd6a..ed7c2f5a5 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ValidationProvider.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ValidationProvider.java @@ -28,6 +28,7 @@ public class ValidationProvider { private final Imdg shareTypeDictionaryImdg; private final Imdg bondTypeDictionaryImdg; private final Imdg companyImdg; + private final Imdg currencyImdg; public ValidationProvider(ImdgProvider imdgProvider) { @@ -41,6 +42,7 @@ public class ValidationProvider { this.shareTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ShareTypeDictionary, SpcexObjectBase.class); this.bondTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_BondTypeDictionary, SpcexObjectBase.class); this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, SpcexObjectBase.class); + this.currencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, SpcexObjectBase.class); } public Function mmsNewValidator() { @@ -217,4 +219,26 @@ public class ValidationProvider { ); }; } + + public Function currencyNewValidator() { + return currencyRequest -> { + ImdgValidationContext context = new ImdgValidationContext<>(); + context.setValidatedObject(currencyRequest); + context.addImdg(IMDGDistributedNames.Map_Currency, currencyImdg); + return new ValidatorImpl<>(context, + CurrencyNewValidationRule.CurrencyNotExists + ); + }; + } + + public Function currencyUpdateValidator() { + return currencyRequest -> { + ImdgValidationContext context = new ImdgValidationContext<>(); + context.setValidatedObject(currencyRequest); + context.addImdg(IMDGDistributedNames.Map_Currency, currencyImdg); + return new ValidatorImpl<>(context, + CurrencyUpdateValidationRule.CurrencyExists + ); + }; + } } diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CurrencyNewValidationRule.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CurrencyNewValidationRule.java new file mode 100644 index 000000000..d0ea059eb --- /dev/null +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CurrencyNewValidationRule.java @@ -0,0 +1,38 @@ +package ru.spcex.clearing.securities.validation.rule; + +import org.springframework.util.StringUtils; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.securitites.CurrencyNewRequest; +import ru.spcex.clearing.securities.errors.SecuritiesError; +import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.validation.IValidationRule; + +import java.util.Map; +import java.util.Optional; + +public enum CurrencyNewValidationRule implements IValidationRule> { + CurrencyNotExists() { + @Override + public Optional validate(ImdgValidationContext context) { + CurrencyNewRequest action = context.getValidatedObject(); + if (!StringUtils.hasText(action.getCurrencyCode())) { + return of(SecuritiesError.RequiredFieldIsEmpty, "currencyCode"); + } + Imdg imdgDictionary = context.obtainMap(IMDGDistributedNames.Map_Currency, SpcexObjectBase.class); + SpcexObjectBase currency = imdgDictionary.getSingleObjectByFieldValues(Map.of( + "currencyCode", action.getCurrencyCode())); + if (currency != null) { + return of(SecuritiesError.CurrencyAlreadyExists, "currencyCode"); + } + return empty(); + } + }; + + @Override + public String ruleName() { + return "MmsNewValidationRule." + name(); + } +} diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CurrencyUpdateValidationRule.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CurrencyUpdateValidationRule.java new file mode 100644 index 000000000..c54d9b4ae --- /dev/null +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/CurrencyUpdateValidationRule.java @@ -0,0 +1,38 @@ +package ru.spcex.clearing.securities.validation.rule; + +import org.springframework.util.StringUtils; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.securitites.CurrencyUpdateRequest; +import ru.spcex.clearing.securities.errors.SecuritiesError; +import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.validation.IValidationRule; + +import java.util.Map; +import java.util.Optional; + +public enum CurrencyUpdateValidationRule implements IValidationRule> { + CurrencyExists() { + @Override + public Optional validate(ImdgValidationContext context) { + CurrencyUpdateRequest action = context.getValidatedObject(); + if (!StringUtils.hasText(action.getCurrencyCode())) { + return of(SecuritiesError.RequiredFieldIsEmpty, "currencyCode"); + } + Imdg imdgDictionary = context.obtainMap(IMDGDistributedNames.Map_Currency, SpcexObjectBase.class); + SpcexObjectBase currency = imdgDictionary.getSingleObjectByFieldValues(Map.of( + "currencyCode", action.getCurrencyCode())); + if (currency == null) { + return of(SecuritiesError.CurrencyNotFound, "currencyCode"); + } + return empty(); + } + }; + + @Override + public String ruleName() { + return "MmsNewValidationRule." + name(); + } +} diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java index 86bc623f9..4d9943720 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java @@ -13,6 +13,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; +import ru.clearing.classes.statics.data.misc.Currency; import ru.clearing.classes.statics.data.misc.Listing; import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; import ru.clearing.platform.dictionary.*; @@ -22,6 +23,7 @@ import ru.spcex.clearing.securities.config.ErrorResolverConfig; import ru.spcex.clearing.securities.config.ImdgTestConfig; import ru.spcex.clearing.securities.config.KafkaTestConfig; import ru.spcex.clearing.securities.config.ValidationConfig; +import ru.spcex.clearing.securities.service.cud.CurrencyService; import ru.spcex.clearing.securities.service.cud.EquitySecurityService; import ru.spcex.clearing.securities.service.cud.FixedIncomeSecurityService; import ru.spcex.clearing.securities.service.cud.MoneyMarketSecurityService; @@ -42,6 +44,7 @@ import static ru.spcex.clearing.securities.utils.MatcherFactory.usingIgnoringFie EquitySecurityService.class, FixedIncomeSecurityService.class, MoneyMarketSecurityService.class, + CurrencyService.class, ImdgTestConfig.class, KafkaTestConfig.class, ValidationProvider.class, @@ -61,6 +64,7 @@ public abstract class AbstractServiceTest { protected Imdg shareTypeDictionaryImdg; protected Imdg bondTypeDictionaryImdg; protected Imdg companyImdg; + protected Imdg currencyImdg; public static String RATE = "RATE"; protected String EQTY = "EQTY"; @@ -92,6 +96,7 @@ public abstract class AbstractServiceTest { this.shareTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ShareTypeDictionary, ShareTypeDictionary.class); this.bondTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_BondTypeDictionary, BondTypeDictionary.class); this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + this.currencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class); InstrumentTypeDictionary instrumentTypeDictionary = new InstrumentTypeDictionary(); instrumentTypeDictionary.setId(1L); diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CurrencyServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CurrencyServiceTest.java new file mode 100644 index 000000000..b52eeac72 --- /dev/null +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CurrencyServiceTest.java @@ -0,0 +1,95 @@ +package ru.spcex.clearing.securities.service; + +import org.apache.kafka.clients.consumer.MockConsumer; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import ru.clearing.classes.statics.data.misc.Currency; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.securitites.CurrencyNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.securitites.CurrencyUpdateRequest; +import ru.spcex.clearing.securities.service.cud.CurrencyService; +import ru.spcex.clearing.securities.utils.MatcherFactory; + +import javax.annotation.PostConstruct; + +import static ru.spcex.clearing.securities.utils.MatcherFactory.usingIgnoringFieldsComparator; +import static ru.spcex.clearing.securities.utils.TestUtils.*; + +public class CurrencyServiceTest extends AbstractServiceTest { + private static final MatcherFactory.Matcher CURRENCY_MATCHER = usingIgnoringFieldsComparator("created", "updated"); + private final long ID = currentId.getAndIncrement(); + private final int PARTITION = 0; + private final String countryCode = "countryCode"; + private final String currencyCode = "currencyCode"; + @Autowired + private CurrencyService currencyService; + + @PostConstruct + protected void init() { + super.init(); + } + + /** + * {@link CurrencyService#newCurrency(BaseRequest)}
+ * Тест проверяет генерацию сущности {@link Currency} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link CurrencyNewRequest}:
+ */ + @Test + public void testNewCurrency() { + clearAllInImdg(currencyImdg); + final String TOPIC = Consts.DESTINATION_СURRENCY_NEW; + + final Currency currencyPrediction = new Currency(); + currencyPrediction.setCountryCode(countryCode); + currencyPrediction.setCurrencyCode(currencyCode); + final CurrencyNewRequest request = new CurrencyNewRequest(); + request.setCountryCode(countryCode); + request.setCurrencyCode(currencyCode); + + //ACT + String jsonString = getJsonStringForNew(request, ID); + + addRecordToKafka((MockConsumer) currencyService.getConsumer(), TOPIC, PARTITION, 0, jsonString); + + //ASSERT + waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + + Currency result = currencyImdg.getSingleObjectBySQL(String.format("countryCode = %s", currencyPrediction.getCountryCode())); + currencyPrediction.setId(result.getId()); + CURRENCY_MATCHER.assertMatch(result, currencyPrediction); + } + + /** + * {@link CurrencyService#updateCurrency(BaseRequest)} + * Тест проверяет обновление сущности {@link Currency} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link CurrencyUpdateRequest}:
+ */ + @Test + public void testUpdateCurrency() { + clearAllInImdg(currencyImdg); + final String TOPIC = Consts.DESTINATION_СURRENCY_UPDATE; + final Currency currencyPrediction = new Currency(); + currencyPrediction.setId(ID); + currencyPrediction.setCountryCode("ExistsCountryCode"); + currencyPrediction.setCurrencyCode(currencyCode); + currencyImdg.insert(currencyPrediction); + currencyPrediction.setCountryCode(countryCode); + final CurrencyUpdateRequest request = new CurrencyUpdateRequest(); + request.setId(ID); + request.setCountryCode(countryCode); + request.setCurrencyCode(currencyCode); + + //ACT + String jsonString = getJsonStringForUPDATE(request, ID); + + addRecordToKafka((MockConsumer) currencyService.getConsumer(), TOPIC, PARTITION, 0, jsonString); + + //ASSERT + waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + + Currency result = currencyImdg.getSingleObjectBySQL(String.format("countryCode = %s", currencyPrediction.getCountryCode())); + currencyPrediction.setId(result.getId()); + CURRENCY_MATCHER.assertMatch(result, currencyPrediction); + } +} diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java index c3928cb15..ffd9b4355 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java @@ -5,16 +5,12 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; import ru.clearing.classes.statics.data.misc.Listing; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityUpdateRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityUpdateRequest; import ru.spcex.clearing.securities.service.cud.EquitySecurityService; -import ru.spcex.clearing.securities.service.cud.MoneyMarketSecurityService; import ru.spcex.clearing.securities.utils.MatcherFactory; import javax.annotation.PostConstruct; @@ -24,31 +20,25 @@ import java.util.Map; import static ru.spcex.clearing.securities.utils.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.securities.utils.TestUtils.*; -public class EquitySecurityServiceTest extends AbstractServiceTest{ +public class EquitySecurityServiceTest extends AbstractServiceTest { private static final MatcherFactory.Matcher EQUITY_SECURITY_MATCHER = usingIgnoringFieldsComparator("created", "updated"); private final long ID = currentId.getAndIncrement(); private final int PARTITION = 0; @Autowired private EquitySecurityService equitySecurityService; + @PostConstruct protected void init() { super.init(); } /** - * {@link MoneyMarketSecurityService#newMoneyMarket(BaseRequest)}
- * Тест проверяет генерацию сущности {@link MoneyMarketSecurity} в Hazelcast при передаче из Apache Kafka.
- * Входной запрос {@link MoneyMarketSecurityNewRequest}:
- * {@link MoneyMarketSecurityNewRequest#lotSize} - 1.0
- * {@link MoneyMarketSecurityNewRequest#startDate} - текущее колличество секунд с 1970-01-01T00:00:00Z.
- * {@link MoneyMarketSecurityNewRequest#endDate} - текущее колличество секунд с 1970-01-01T00:00:00Z.
- * {@link MoneyMarketSecurityNewRequest#nominalValue} - 1.0
- * {@link MoneyMarketSecurityNewRequest#nominalCurrency} - 1L
- * {@link MoneyMarketSecurityNewRequest#instrumentType} - "sdgaga"
- * {@link MoneyMarketSecurityNewRequest#fullName} - "estat"
+ * {@link EquitySecurityService#newEquity(BaseRequest)}
+ * Тест проверяет генерацию сущности {@link EquitySecurity} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link EquitySecurityNewRequest}:
*/ @Test - public void testNewEquity(){ + public void testNewEquity() { clearAllInImdg(equitySecurityImdg); final String TOPIC = Consts.DESTINATION_EQUITY_SECURITY_NEW; @@ -76,14 +66,9 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{ } /** - * {@link MoneyMarketSecurityService#updateMoneyMarket(BaseRequest)} - * Тест проверяет обновление сущности {@link MoneyMarketSecurity} в Hazelcast при передаче из Apache Kafka.
- * Входной запрос {@link MoneyMarketSecurityUpdateRequest}:
- * {@link MoneyMarketSecurityUpdateRequest#fullName} - sfgsdfg
- * {@link MoneyMarketSecurityUpdateRequest#instrumentType} - qwerqwe
- * {@link MoneyMarketSecurityUpdateRequest#nominalCurrency} - RUB
- * {@link MoneyMarketSecurityUpdateRequest#nominalValue} - 2.0
- * {@link MoneyMarketSecurityUpdateRequest#endDate} - текущее колличество секунд с 1970-01-01T00:00:00Z + (24 * 3600)
+ * {@link EquitySecurityService#updateEquity(BaseRequest)} + * Тест проверяет обновление сущности {@link EquitySecurity} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link EquitySecurityUpdateRequest}:
*/ @Test public void testUpdateEquity() { @@ -121,13 +106,13 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{ } /** - * {@link MoneyMarketSecurityService#deleteMoneyMarket(BaseRequest)}
- * Тест проверяет удаление сущности {@link MoneyMarketSecurity} в Hazelcast при передаче из Apache Kafka.
+ * {@link EquitySecurityService#deleteEquity(BaseRequest)}
+ * Тест проверяет удаление сущности {@link EquitySecurity} в Hazelcast при передаче из Apache Kafka.
* Входной запрос {@link CommonDeleteRequest}:
* {@link CommonDeleteRequest#id} - Идентификатор записи
*/ @Test - public void testDeleteEquity(){ + public void testDeleteEquity() { clearAllInImdg(equitySecurityImdg); final String TOPIC = Consts.DESTINATION_EQUITY_SECURITY_DELETE; @@ -137,7 +122,8 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{ Listing listingPrediction = new Listing(); listingPrediction = listingBuilder.byUpdateEquity(equityPrediction, listingPrediction); - listingImdg.insert(listingPrediction);listingPrediction.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey()); + listingImdg.insert(listingPrediction); + listingPrediction.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey()); CommonDeleteRequest commonDeleteRequest = new CommonDeleteRequest(); commonDeleteRequest.setId(ID); @@ -161,7 +147,7 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{ LISTING_MATCHER.assertMatch(listingResult, listingPrediction); } - private EquitySecurity getEquitySecurity(){ + private EquitySecurity getEquitySecurity() { EquitySecurity equitySecurity = new EquitySecurity(); equitySecurity.setId(ID); equitySecurity.setSecuritySymbol("SecuritySymbol"); @@ -178,7 +164,7 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{ return equitySecurity; } - private EquitySecurityNewRequest getEquitySecurityNewRequest(EquitySecurity equitySecurity){ + private EquitySecurityNewRequest getEquitySecurityNewRequest(EquitySecurity equitySecurity) { EquitySecurityNewRequest equitySecurityNewRequest = new EquitySecurityNewRequest(); equitySecurityNewRequest.setSecuritySymbol(equitySecurity.getSecuritySymbol()); equitySecurityNewRequest.setShortName(equitySecurity.getShortName()); @@ -194,7 +180,7 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{ return equitySecurityNewRequest; } - private EquitySecurityUpdateRequest getEquitySecurityUpdateRequest(EquitySecurity equitySecurity){ + private EquitySecurityUpdateRequest getEquitySecurityUpdateRequest(EquitySecurity equitySecurity) { EquitySecurityUpdateRequest equitySecurityUpdateRequest = new EquitySecurityUpdateRequest(); equitySecurityUpdateRequest.setId(equitySecurity.getId()); equitySecurityUpdateRequest.setSecuritySymbol(equitySecurity.getSecuritySymbol()); diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java index 1c4fe140b..818633338 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java @@ -5,16 +5,12 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; import ru.clearing.classes.statics.data.misc.Listing; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeSecurityNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeSecurityUpdateRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityUpdateRequest; import ru.spcex.clearing.securities.service.cud.FixedIncomeSecurityService; -import ru.spcex.clearing.securities.service.cud.MoneyMarketSecurityService; import ru.spcex.clearing.securities.utils.MatcherFactory; import javax.annotation.PostConstruct; @@ -25,31 +21,25 @@ import java.util.Map; import static ru.spcex.clearing.securities.utils.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.securities.utils.TestUtils.*; -public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{ +public class FixedIncomeSecurityServiceTest extends AbstractServiceTest { private static final MatcherFactory.Matcher FIXED_INCOME_SECURITY_MATCHER = usingIgnoringFieldsComparator("created", "updated"); private final long ID = currentId.getAndIncrement(); private final int PARTITION = 0; @Autowired private FixedIncomeSecurityService fixedIncomeSecurityService; + @PostConstruct protected void init() { super.init(); } /** - * {@link MoneyMarketSecurityService#newMoneyMarket(BaseRequest)}
- * Тест проверяет генерацию сущности {@link MoneyMarketSecurity} в Hazelcast при передаче из Apache Kafka.
- * Входной запрос {@link MoneyMarketSecurityNewRequest}:
- * {@link MoneyMarketSecurityNewRequest#lotSize} - 1.0
- * {@link MoneyMarketSecurityNewRequest#startDate} - текущее колличество секунд с 1970-01-01T00:00:00Z.
- * {@link MoneyMarketSecurityNewRequest#endDate} - текущее колличество секунд с 1970-01-01T00:00:00Z.
- * {@link MoneyMarketSecurityNewRequest#nominalValue} - 1.0
- * {@link MoneyMarketSecurityNewRequest#nominalCurrency} - 1L
- * {@link MoneyMarketSecurityNewRequest#instrumentType} - "sdgaga"
- * {@link MoneyMarketSecurityNewRequest#fullName} - "estat"
+ * {@link FixedIncomeSecurityService#newFixedIncome(BaseRequest)}
+ * Тест проверяет генерацию сущности {@link FixedIncomeSecurity} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link FixedIncomeSecurityNewRequest}:
*/ @Test - public void newFixedIncome(){ + public void newFixedIncome() { clearAllInImdg(fixedIncomeSecurityImdg); final String TOPIC = Consts.DESTINATION_FIXED_INCOME_SECURITY_NEW; @@ -77,14 +67,9 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{ } /** - * {@link MoneyMarketSecurityService#updateMoneyMarket(BaseRequest)} - * Тест проверяет обновление сущности {@link MoneyMarketSecurity} в Hazelcast при передаче из Apache Kafka.
- * Входной запрос {@link MoneyMarketSecurityUpdateRequest}:
- * {@link MoneyMarketSecurityUpdateRequest#fullName} - sfgsdfg
- * {@link MoneyMarketSecurityUpdateRequest#instrumentType} - qwerqwe
- * {@link MoneyMarketSecurityUpdateRequest#nominalCurrency} - RUB
- * {@link MoneyMarketSecurityUpdateRequest#nominalValue} - 2.0
- * {@link MoneyMarketSecurityUpdateRequest#endDate} - текущее колличество секунд с 1970-01-01T00:00:00Z + (24 * 3600)
+ * {@link FixedIncomeSecurityService#updateFixedIncome(BaseRequest)} + * Тест проверяет обновление сущности {@link FixedIncomeSecurity} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link FixedIncomeSecurityUpdateRequest}:
*/ @Test public void updateFixedIncome() { @@ -123,13 +108,13 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{ } /** - * {@link MoneyMarketSecurityService#deleteMoneyMarket(BaseRequest)}
- * Тест проверяет удаление сущности {@link MoneyMarketSecurity} в Hazelcast при передаче из Apache Kafka.
+ * {@link FixedIncomeSecurityService#deleteFixedIncome(BaseRequest)}
+ * Тест проверяет удаление сущности {@link FixedIncomeSecurity} в Hazelcast при передаче из Apache Kafka.
* Входной запрос {@link CommonDeleteRequest}:
* {@link CommonDeleteRequest#id} - Идентификатор записи
*/ @Test - public void deleteFixedIncome(){ + public void deleteFixedIncome() { clearAllInImdg(moneyMarketSecurityMap); final String TOPIC = Consts.DESTINATION_FIXED_INCOME_SECURITY_DELETE; @@ -139,7 +124,8 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{ Listing listingPrediction = new Listing(); listingPrediction = listingBuilder.byFixedIncomeEquity(fixedIncomePrediction, listingPrediction); - listingImdg.insert(listingPrediction);listingPrediction.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey()); + listingImdg.insert(listingPrediction); + listingPrediction.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey()); CommonDeleteRequest commonDeleteRequest = new CommonDeleteRequest(); commonDeleteRequest.setId(ID); @@ -163,7 +149,7 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{ LISTING_MATCHER.assertMatch(listingResult, listingPrediction); } - private FixedIncomeSecurity getFixedIncomeSecurity(){ + private FixedIncomeSecurity getFixedIncomeSecurity() { FixedIncomeSecurity fixedIncome = new FixedIncomeSecurity(); fixedIncome.setId(ID); fixedIncome.setSecuritySymbol("SecuritySymbol"); @@ -187,7 +173,7 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{ return fixedIncome; } - private FixedIncomeSecurityNewRequest getFixedIncomeSecurityNewRequest(FixedIncomeSecurity fixedIncomeSecurity){ + private FixedIncomeSecurityNewRequest getFixedIncomeSecurityNewRequest(FixedIncomeSecurity fixedIncomeSecurity) { FixedIncomeSecurityNewRequest fixedIncomeSecurityNewRequest = new FixedIncomeSecurityNewRequest(); fixedIncomeSecurityNewRequest.setSecuritySymbol(fixedIncomeSecurity.getSecuritySymbol()); fixedIncomeSecurityNewRequest.setShortName(fixedIncomeSecurity.getShortName()); @@ -208,7 +194,7 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{ return fixedIncomeSecurityNewRequest; } - private FixedIncomeSecurityUpdateRequest getFixedIncomeSecurityUpdateRequest(FixedIncomeSecurity fixedIncomeSecurity){ + private FixedIncomeSecurityUpdateRequest getFixedIncomeSecurityUpdateRequest(FixedIncomeSecurity fixedIncomeSecurity) { FixedIncomeSecurityUpdateRequest equitySecurityUpdateRequest = new FixedIncomeSecurityUpdateRequest(); equitySecurityUpdateRequest.setId(fixedIncomeSecurity.getId()); equitySecurityUpdateRequest.setSecuritySymbol(fixedIncomeSecurity.getSecuritySymbol()); diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/CurrencyNewRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/CurrencyNewRequest.java new file mode 100644 index 000000000..f335bf79c --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/CurrencyNewRequest.java @@ -0,0 +1,26 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.securitites; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class CurrencyNewRequest{ + @JsonProperty + public String countryCode; + @JsonProperty + public String currencyCode; + + public String getCountryCode() { + return countryCode; + } + + public void setCountryCode(String countryCode) { + this.countryCode = countryCode; + } + + public String getCurrencyCode() { + return currencyCode; + } + + public void setCurrencyCode(String currencyCode) { + this.currencyCode = currencyCode; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/CurrencyUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/CurrencyUpdateRequest.java new file mode 100644 index 000000000..94b911f33 --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/CurrencyUpdateRequest.java @@ -0,0 +1,39 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.securitites; + +import com.fasterxml.jackson.annotation.JsonProperty; +import ru.spcex.platform.classes.base.interfaces.WithId; + +public class CurrencyUpdateRequest implements WithId { + @JsonProperty + public Long id; + @JsonProperty + public String countryCode; + @JsonProperty + public String currencyCode; + + + @Override + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getCountryCode() { + return countryCode; + } + + public void setCountryCode(String countryCode) { + this.countryCode = countryCode; + } + + public String getCurrencyCode() { + return currencyCode; + } + + public void setCurrencyCode(String currencyCode) { + this.currencyCode = currencyCode; + } +}