report requests validators

This commit is contained in:
akulikov 2023-05-15 18:06:02 +03:00
parent a2873620a3
commit c76aee2428
3 changed files with 112 additions and 29 deletions

View file

@ -6,9 +6,12 @@ import org.springframework.context.annotation.Configuration;
import ru.clearing.classes.statics.data.company.Company;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithPeriod;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionId;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionIdList;
import ru.spcex.clearing.reports.errors.ReportError;
import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.clearing.validation.common.rules.EndDtAfterStartDtRule;
import ru.spcex.clearing.validation.common.rules.EnumPresentRule;
import ru.spcex.clearing.validation.common.rules.FieldRequiredRule;
import ru.spcex.platform.classes.base.SpcexObjectBase;
@ -16,6 +19,7 @@ import ru.spcex.platform.enumeration.ReportType;
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.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.validation.IValidator;
import ru.spcex.platform.utils.validation.ValidatorImpl;
@ -44,8 +48,32 @@ public class ValidationConfig {
return new ValidationHelper(messageResolver);
}
@Bean("reportRequestFromExecutionValidator")
public Function<ReportRequestWithSessionId, IValidator> reportRequestFromExecutionValidator(
@Bean("reportRequestValidator")
public Function<ReportRequest, IValidator> reportRequestValidator(
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
) {
return reportRequest -> {
ImdgValidationContext<ReportRequest> context = new ImdgValidationContext<>();
context.setValidatedObject(reportRequest);
Consumer<String> addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s));
// todo add dictionary for check reportId
return new ValidatorImpl<>(context,
EnumPresentRule.instance("reportId",
ReportRequest::getReportId,
new IEnumKey[]{
ReportType.SUMMARY_LIABILITIES_CLAIMS,
ReportType.SUMMARY_MONEY_CHANGE
},
ReportError.WrongFieldValue,
ReportError.RequiredFieldEmpty)
);
};
}
@Bean("reportRequestWithSessionIdValidator")
public Function<ReportRequestWithSessionId, IValidator> reportRequestWithSessionIdValidator(
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
) {
return reportRequestWithSessionId -> {
@ -58,10 +86,9 @@ public class ValidationConfig {
return new ValidatorImpl<>(context,
EnumPresentRule.instance("reportId",
ReportRequestWithSessionId::getReportId,
new ReportType[]{
new IEnumKey[]{
ReportType.OPERATIONAL_LIABILITIES_CLAIMS,
ReportType.SUMMARY_LIABILITIES_CLAIMS,
ReportType.PERIOD_LIABILITIES_CLAIMS,
ReportType.OPERATIONAL_MONEY_CHANGE,
ReportType.EXECUTED_DEAL_REPORT,
ReportType.UNFULFILLED_DEAL_REPORT
},
@ -69,35 +96,71 @@ public class ValidationConfig {
ReportError.RequiredFieldEmpty),
FieldRequiredRule.instance("sessionId",
ReportRequestWithSessionId::getSessionId,
ReportError.RequiredFieldEmpty)
ReportError.RequiredFieldEmpty,
sessionId -> sessionId > 0 ? null : ReportError.WrongFieldValue)
);
};
}
@Bean("reportRequestFromRegistryValidator")
public Function<ReportRequest, IValidator> reportRequestFromRegistryValidator(
@Bean("reportRequestWithSessionIdListValidator")
public Function<ReportRequestWithSessionIdList, IValidator> reportRequestWithSessionIdListValidator(
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
) {
return reportRequest -> {
ImdgValidationContext<ReportRequest> context = new ImdgValidationContext<>();
context.setValidatedObject(reportRequest);
return reportRequestWithSessionIdList -> {
ImdgValidationContext<ReportRequestWithSessionIdList> context = new ImdgValidationContext<>();
context.setValidatedObject(reportRequestWithSessionIdList);
Consumer<String> addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s));
// todo add dictionary for check reportId
return new ValidatorImpl<>(context,
EnumPresentRule.instance("reportId",
reportRequest::getReportId,
new ReportType[]{
ReportType.OPERATIONAL_MONEY_CHANGE,
ReportType.SUMMARY_MONEY_CHANGE,
ReportType.PERIOD_MONEY_CHANGE
ReportRequestWithSessionIdList::getReportId,
new IEnumKey[]{
ReportType.PERIOD_LIABILITIES_CLAIMS
},
ReportError.WrongFieldValue,
ReportError.RequiredFieldEmpty)
ReportError.RequiredFieldEmpty),
FieldRequiredRule.instance("sessionIdList",
ReportRequestWithSessionIdList::getSessionIdList,
ReportError.RequiredFieldEmpty,
sessionIdList -> {
if (sessionIdList == null || sessionIdList.isEmpty())
return ReportError.WrongFieldValue;
return null;
})
);
};
}
@Bean("reportRequestWithPeriodValidator")
public Function<ReportRequestWithPeriod, IValidator> reportRequestWithPeriodValidator(
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
) {
return reportRequestWithPeriod -> {
ImdgValidationContext<ReportRequestWithPeriod> context = new ImdgValidationContext<>();
context.setValidatedObject(reportRequestWithPeriod);
Consumer<String> addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s));
// todo add dictionary for check reportId
return new ValidatorImpl<>(context,
EnumPresentRule.instance("reportId",
ReportRequestWithPeriod::getReportId,
new IEnumKey[]{
ReportType.PERIOD_MONEY_CHANGE,
},
ReportError.WrongFieldValue,
ReportError.RequiredFieldEmpty),
EndDtAfterStartDtRule.instance("endDate", "startDate",
ReportRequestWithPeriod::getEndDate,
ReportRequestWithPeriod::getStartDate,
ReportError.RequiredFieldEmpty,
ReportError.WrongFieldValue)
);
};
}
}

View file

@ -27,8 +27,10 @@ public class ReportService extends QueueConsumer implements InitializingBean {
private final IMessageResolver messageResolver;
private final UserRoleVerification userRoleVerification;
private final ValidationHelper validationHelper;
private final Function<ReportRequestWithSessionId, IValidator> reportRequestFromExecutionValidator;
private final Function<ReportRequest, IValidator> reportRequestFromRegistryValidator;
private final Function<ReportRequest, IValidator> reportRequestValidator;
private final Function<ReportRequestWithSessionId, IValidator> reportRequestWithSessionIdValidator;
private final Function<ReportRequestWithSessionIdList, IValidator> reportRequestWithSessionIdListValidator;
private final Function<ReportRequestWithPeriod, IValidator> reportRequestWithPeriodValidator;
public ReportService(Consumer<String, Object> kafkaQueue,
Producer<String, Object> kafkaResponseQueue,
@ -36,17 +38,23 @@ public class ReportService extends QueueConsumer implements InitializingBean {
IMessageResolver messageResolver,
UserRoleVerification userRoleVerification,
ValidationHelper validationHelper,
@Qualifier("reportRequestFromExecutionValidator")
Function<ReportRequestWithSessionId, IValidator> reportRequestFromExecutionValidator,
@Qualifier("reportRequestFromRegistryValidator")
Function<ReportRequest, IValidator> reportRequestFromRegistryValidator) {
@Qualifier("reportRequestValidator")
Function<ReportRequest, IValidator> reportRequestValidator,
@Qualifier("reportRequestWithSessionIdValidator")
Function<ReportRequestWithSessionId, IValidator> reportRequestWithSessionIdValidator,
@Qualifier("reportRequestWithSessionIdListValidator")
Function<ReportRequestWithSessionIdList, IValidator> reportRequestWithSessionIdListValidator,
@Qualifier("reportRequestWithPeriodValidator")
Function<ReportRequestWithPeriod, IValidator> ReportRequestWithPeriodValidator) {
super(kafkaQueue, kafkaResponseQueue);
this.imdgProvider = imdgProvider;
this.messageResolver = messageResolver;
this.userRoleVerification = userRoleVerification;
this.validationHelper = validationHelper;
this.reportRequestFromExecutionValidator = reportRequestFromExecutionValidator;
this.reportRequestFromRegistryValidator = reportRequestFromRegistryValidator;
this.reportRequestValidator = reportRequestValidator;
this.reportRequestWithSessionIdValidator = reportRequestWithSessionIdValidator;
this.reportRequestWithSessionIdListValidator = reportRequestWithSessionIdListValidator;
reportRequestWithPeriodValidator = ReportRequestWithPeriodValidator;
}
@Override
@ -69,7 +77,7 @@ public class ReportService extends QueueConsumer implements InitializingBean {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return null;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestFromRegistryValidator);
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestValidator);
if (requestInfoUpdate != null) return null;
return null;
@ -79,17 +87,29 @@ public class ReportService extends QueueConsumer implements InitializingBean {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return null;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestFromExecutionValidator);
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdValidator);
if (requestInfoUpdate != null) return null;
return null;
}
public RequestInfoUpdate createReportForSessionIdList(BaseRequest<ReportRequestWithSessionIdList> userRequest) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return null;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdListValidator);
if (requestInfoUpdate != null) return null;
return null;
}
public RequestInfoUpdate createReportForPeriod(BaseRequest<ReportRequestWithPeriod> userRequest) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return null;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithPeriodValidator);
if (requestInfoUpdate != null) return null;
return null;
}

View file

@ -14,11 +14,11 @@ public class ReportRequestWithSessionIdList extends ReportRequest {
@JsonProperty
protected List<Long> sessionId;
public List<Long> getSessionId() {
public List<Long> getSessionIdList() {
return sessionId;
}
public void setSessionId(List<Long> sessionId) {
public void setSessionIdList(List<Long> sessionId) {
this.sessionId = sessionId;
}
}