This commit is contained in:
parent
6e7883034d
commit
9702cf8467
5 changed files with 195 additions and 8 deletions
|
|
@ -0,0 +1,16 @@
|
|||
package ru.spcex.clearing.dflt.management.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import ru.spcex.clearing.util.services.IMDGMessageResolver;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
|
||||
@Configuration
|
||||
public class MessageResolverConfig {
|
||||
@Bean
|
||||
public IMessageResolver
|
||||
messageResolver(ImdgProvider imdgProvider) {
|
||||
return new IMDGMessageResolver(imdgProvider);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
package ru.spcex.clearing.dflt.management.config;
|
||||
|
||||
import java.util.function.Function;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.misc.Market;
|
||||
import ru.clearing.classes.statics.data.misc.OvernightSettings;
|
||||
import ru.clearing.platform.dictionary.OvernightTypeDictionary;
|
||||
import ru.spcex.clearing.dflt.management.error.DefaultManagementErrors;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.misc.OvernightSettingsNewRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.misc.OvernightSettingsUpdateRequest;
|
||||
import ru.spcex.clearing.validation.common.rules.DictionaryPresentRule;
|
||||
import ru.spcex.clearing.validation.common.rules.IdPresentRule;
|
||||
import ru.spcex.clearing.validation.common.rules.SpecialIdPresentRule;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||
import ru.spcex.platform.imdg.validation.rule.PresentById;
|
||||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
||||
|
||||
@Configuration
|
||||
public class ValidationConfig {
|
||||
|
||||
private final Imdg<OvernightSettings> overnightSettingsImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<Market> marketImdg;
|
||||
private final Imdg<OvernightTypeDictionary> osTypeDictionaryImdg;
|
||||
|
||||
@Autowired
|
||||
public ValidationConfig(ImdgProvider imdgProvider) {
|
||||
this.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class);
|
||||
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||
this.marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class);
|
||||
this.osTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightTypeDictionary, OvernightTypeDictionary.class);
|
||||
}
|
||||
|
||||
public enum OvernightSettingsValidationStorage {
|
||||
company, market, overnightType
|
||||
}
|
||||
|
||||
@Bean("overnightSettingsNewValidator")
|
||||
public Function<OvernightSettingsNewRequest, IValidator> overnightSettingsNewValidator() {
|
||||
return (req) -> {
|
||||
ImdgValidationContext<OvernightSettingsNewRequest> ctx = new ImdgValidationContext<>();
|
||||
ctx.setValidatedObject(req);
|
||||
ctx.addImdg(IMDGDistributedNames.Map_Company, companyImdg);
|
||||
ctx.addImdg(IMDGDistributedNames.Map_Market, marketImdg);
|
||||
ctx.addImdg(IMDGDistributedNames.Map_OvernightTypeDictionary, osTypeDictionaryImdg);
|
||||
//fixme error codes
|
||||
return new ValidatorImpl<>(ctx,
|
||||
IdPresentRule.instance("companyId",
|
||||
OvernightSettingsNewRequest::getCompanyId,
|
||||
IMDGDistributedNames.Map_Company,
|
||||
Company.class,
|
||||
DefaultManagementErrors.RequiredFieldIsEmpty,
|
||||
DefaultManagementErrors.DictionaryNotFound,
|
||||
true),
|
||||
SpecialIdPresentRule.instance("market",
|
||||
OvernightSettingsNewRequest::getMarket, "code",
|
||||
IMDGDistributedNames.Map_Market,
|
||||
ru.clearing.classes.statics.data.misc.Market.class,
|
||||
DefaultManagementErrors.RequiredFieldIsEmpty,
|
||||
DefaultManagementErrors.DictionaryNotFound,
|
||||
true
|
||||
),
|
||||
DictionaryPresentRule.instance("overnightType", OvernightSettingsNewRequest::getOvernightType, IMDGDistributedNames.Map_OvernightTypeDictionary, OvernightTypeDictionary.class, DefaultManagementErrors.RequiredFieldIsEmpty, DefaultManagementErrors.DictionaryNotFound, true) //fixme
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
@Bean("overnightSettingsUpdateValidator")
|
||||
public Function<OvernightSettingsUpdateRequest, IValidator> overnightSettingsUpdateValidator() {
|
||||
return (req) -> {
|
||||
ImdgValidationContext<OvernightSettingsUpdateRequest> ctx = new ImdgValidationContext<>();
|
||||
ctx.setValidatedObject(req);
|
||||
ctx.addImdg(IMDGDistributedNames.Map_Company, companyImdg);
|
||||
ctx.addImdg(IMDGDistributedNames.Map_Market, marketImdg);
|
||||
ctx.addImdg(IMDGDistributedNames.Map_OvernightTypeDictionary, osTypeDictionaryImdg);
|
||||
ctx.addImdg(IMDGDistributedNames.Map_OvernightSettings, overnightSettingsImdg);
|
||||
//fixme error codes
|
||||
return new ValidatorImpl<>(ctx,
|
||||
IdPresentRule.instance("companyId",
|
||||
OvernightSettingsUpdateRequest::getCompanyId,
|
||||
IMDGDistributedNames.Map_Company,
|
||||
Company.class,
|
||||
DefaultManagementErrors.RequiredFieldIsEmpty,
|
||||
DefaultManagementErrors.DictionaryNotFound,
|
||||
true),
|
||||
SpecialIdPresentRule.instance("market",
|
||||
OvernightSettingsUpdateRequest::getMarket, "code",
|
||||
IMDGDistributedNames.Map_Market,
|
||||
ru.clearing.classes.statics.data.misc.Market.class,
|
||||
DefaultManagementErrors.RequiredFieldIsEmpty,
|
||||
DefaultManagementErrors.DictionaryNotFound,
|
||||
true
|
||||
),
|
||||
DictionaryPresentRule.instance("overnightType", OvernightSettingsUpdateRequest::getOvernightType, IMDGDistributedNames.Map_OvernightTypeDictionary, OvernightTypeDictionary.class, DefaultManagementErrors.RequiredFieldIsEmpty, DefaultManagementErrors.DictionaryNotFound, true),
|
||||
new PresentById(IMDGDistributedNames.Map_OvernightSettings, DefaultManagementErrors.DictionaryNotFound, true)
|
||||
);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -6,7 +6,10 @@ public enum DefaultManagementErrors implements IErrorEnumId {
|
|||
|
||||
//todo уточнить порядковый номер ошибки модуля
|
||||
GeneralError(3000L), // Общая ошибка модуля
|
||||
UserVerifyDenial(3001L); // 'Нет прав на проведение данной операции
|
||||
UserVerifyDenial(3001L), // 'Нет прав на проведение данной операции
|
||||
RequiredFieldIsEmpty(3002L),
|
||||
DictionaryNotFound(3003L)
|
||||
;
|
||||
|
||||
private final Long id;
|
||||
DefaultManagementErrors(Long id) {
|
||||
|
|
|
|||
|
|
@ -1,32 +1,58 @@
|
|||
package ru.spcex.clearing.dflt.management.listener;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
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.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.misc.OvernightSettings;
|
||||
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.misc.OvernightSettingsNewRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.misc.OvernightSettingsUpdateRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
||||
import ru.spcex.clearing.platform.messaging.service.Status;
|
||||
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.validation.Stored;
|
||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
|
||||
@Service
|
||||
public class OvernightSettingsListener extends QueueConsumer implements InitializingBean {
|
||||
protected final Logger log = LoggerFactory.getLogger(getClass());
|
||||
protected ImdgProvider imdgProvider;
|
||||
private final UserRoleVerification userRoleVerification;
|
||||
private final Function<OvernightSettingsNewRequest, IValidator> osNewValidator;
|
||||
private final Function<OvernightSettingsUpdateRequest, IValidator> osUpdateValidator;
|
||||
private final IMessageResolver msgResolver;
|
||||
private final Imdg<OvernightSettings> osImdg;
|
||||
|
||||
@Autowired
|
||||
public OvernightSettingsListener(Consumer<String, Object> kafkaQueue,
|
||||
Producer<String, Object> kafkaProducer,
|
||||
ImdgProvider imdgProvider,
|
||||
UserRoleVerification userRoleVerification) {
|
||||
Producer<String, Object> kafkaProducer,
|
||||
ImdgProvider imdgProvider,
|
||||
UserRoleVerification userRoleVerification,
|
||||
IMessageResolver msgResolver,
|
||||
@Qualifier("overnightSettingsNewValidator")
|
||||
Function<OvernightSettingsNewRequest, IValidator> osNewValidator,
|
||||
@Qualifier("overnightSettingsUpdateValidator")
|
||||
Function<OvernightSettingsUpdateRequest, IValidator> osUpdateValidator
|
||||
) {
|
||||
super(kafkaQueue, kafkaProducer);
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.userRoleVerification = userRoleVerification;
|
||||
this.osNewValidator = osNewValidator;
|
||||
this.osUpdateValidator = osUpdateValidator;
|
||||
this.msgResolver = msgResolver;
|
||||
this.osImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -34,10 +60,45 @@ public class OvernightSettingsListener extends QueueConsumer implements Initiali
|
|||
callback(OvernightSettingsNewRequest.class)
|
||||
.setFunction(this::processNewReq)
|
||||
.forDestination(Consts.OVERNIGHT_SETTINGS_NEW, callbacks::put);
|
||||
callback(OvernightSettingsUpdateRequest.class)
|
||||
.setFunction(this::processUpdate)
|
||||
.forDestination(Consts.OVERNIGHT_SETTINGS_UPDATE, callbacks::put);
|
||||
init();
|
||||
}
|
||||
|
||||
private RequestInfoUpdate processNewReq(BaseRequest<OvernightSettingsNewRequest> newReq) {
|
||||
private RequestInfoUpdate processNewReq(BaseRequest<OvernightSettingsNewRequest> req) {
|
||||
//fixme userRoleVerification.validateRoleAndThrow(newReq);
|
||||
log.info("New overnight settings request: {}", req);
|
||||
OvernightSettingsNewRequest payload = req.getRequestPayload();
|
||||
IValidator validator = osNewValidator.apply(payload);
|
||||
Optional<EnumMessage> err = validator.tillFirstError();
|
||||
if (err.isPresent()) {
|
||||
return new RequestInfoUpdate(req.getId(), Status.Error, msgResolver.resolve(err.get()));
|
||||
}
|
||||
OvernightSettings os = new OvernightSettings();
|
||||
os.setMarket(payload.getMarket());
|
||||
os.setCompanyId(payload.getCompanyId());
|
||||
os.setOvernightType(payload.getOvernightType());
|
||||
osImdg.insert(os);
|
||||
log.info("new overnight system request.id[{}]: {}/{}/{}", os.getId(), os.getCompanyId(), os.getMarket(), os.getOvernightType());
|
||||
return null;
|
||||
}
|
||||
|
||||
private RequestInfoUpdate processUpdate(BaseRequest<OvernightSettingsUpdateRequest> req) {
|
||||
//fixme userRoleVerification.validateRoleAndThrow(newReq);
|
||||
log.info("Update overnight system request: {}", req);
|
||||
OvernightSettingsUpdateRequest payload = req.getRequestPayload();
|
||||
IValidator validator = osUpdateValidator.apply(payload);
|
||||
Optional<EnumMessage> err = validator.tillFirstError();
|
||||
if (err.isPresent()) {
|
||||
return new RequestInfoUpdate(req.getId(), Status.Error, msgResolver.resolve(err.get()));
|
||||
}
|
||||
OvernightSettings os = validator.getStored(Stored.PresentById);
|
||||
os.setMarket(payload.getMarket());
|
||||
os.setCompanyId(payload.getCompanyId());
|
||||
os.setOvernightType(payload.getOvernightType());
|
||||
osImdg.update(os);
|
||||
log.info("updated overnight system request.id[{}]: {}/{}/{}", os.getId(), os.getCompanyId(), os.getMarket(), os.getOvernightType());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
package ru.spcex.clearing.platform.messaging.domain.cud.misc;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import ru.spcex.platform.classes.base.interfaces.WithId;
|
||||
|
||||
public class OvernightSettingsUpdateRequest {
|
||||
public class OvernightSettingsUpdateRequest implements WithId {
|
||||
@JsonProperty
|
||||
public Long id;
|
||||
@JsonProperty
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue