diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ContactValidationConfig.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ContactValidationConfig.java index a69e7731c..e051d7c14 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ContactValidationConfig.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ContactValidationConfig.java @@ -7,14 +7,13 @@ import ru.clearing.classes.statics.data.profile.Contact; import ru.clearing.platform.dictionary.ContactTypeDictionary; import ru.spcex.clearing.company.error.CompanyErrors; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactUpdateRequest; import ru.spcex.clearing.validation.common.rules.DictionaryPresentRule; -import ru.spcex.clearing.validation.common.rules.EnumPresentRule; import ru.spcex.clearing.validation.common.rules.FieldRequiredRule; import ru.spcex.clearing.validation.common.rules.IdPresentRule; import ru.spcex.platform.classes.base.SpcexObjectBase; -import ru.spcex.platform.enumeration.ContactTypes; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.validation.IValidator; @@ -92,4 +91,32 @@ public class ContactValidationConfig { }; } + @Bean("contactDeleteRequestValidator") + public Function contactDeleteRequestValidator( + Map> imdgForValidation + ) { + return contactDeleteRequest -> { + ImdgValidationContext context = new ImdgValidationContext<>(); + context.setValidatedObject(contactDeleteRequest); + Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); + addImdg.accept(IMDGDistributedNames.Map_Company); + addImdg.accept(IMDGDistributedNames.Map_Contact); + return new ValidatorImpl<>(context, + IdPresentRule.instance("id", + CommonDeleteRequest::getId, + IMDGDistributedNames.Map_Contact, + Contact.class, + CompanyErrors.RequiredFieldEmpty, + CompanyErrors.RecordNotFound, + contact -> { + Imdg companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class); + Company company = companyImdg.getSingleObjectByID(contact.getCompanyId()); + if (company == null) { + return CompanyErrors.ContactNotFound; + } + return null; + }) + ); + }; + } } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java index 7096e823f..48d592a95 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java @@ -12,6 +12,7 @@ import ru.clearing.classes.statics.data.profile.Contact; 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.company.ContactNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactUpdateRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; @@ -31,6 +32,7 @@ public class ContactService extends QueueConsumer implements InitializingBean { private final ValidationHelper validationHelper; private final Function contactNewRequestValidator; private final Function contactUpdateRequestValidator; + private final Function contactDeleteRequestValidator; private final UserRoleVerification userRoleVerification; @Autowired @@ -40,6 +42,7 @@ public class ContactService extends QueueConsumer implements InitializingBean { ValidationHelper validationHelper, UserRoleVerification userRoleVerification, @Qualifier("contactNewRequestValidator") Function contactNewRequestValidator, + @Qualifier("contactDeleteRequestValidator") Function contactDeleteRequestValidator, @Qualifier("contactUpdateRequestValidator") Function contactUpdateRequestValidator) { super(kafkaQueue, kafkaProducer); this.contactMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Contact, Contact.class); @@ -47,6 +50,7 @@ public class ContactService extends QueueConsumer implements InitializingBean { this.userRoleVerification = userRoleVerification; this.contactNewRequestValidator = contactNewRequestValidator; this.contactUpdateRequestValidator = contactUpdateRequestValidator; + this.contactDeleteRequestValidator = contactDeleteRequestValidator; } @Override @@ -57,6 +61,9 @@ public class ContactService extends QueueConsumer implements InitializingBean { callback(ContactUpdateRequest.class) .setFunction(this::contactUpdate) .forDestination(Consts.DESTINATION_CONTACT_UPDATE, callbacks::put); + callback(CommonDeleteRequest.class) + .setFunction(this::companySymbolDelete) + .forDestination(Consts.DESTINATION_CONTACT_DELETE, callbacks::put); init(); } @@ -98,4 +105,22 @@ public class ContactService extends QueueConsumer implements InitializingBean { log.debug("successfully processed, id {}", contact.getId()); return null; } + + public RequestInfoUpdate companySymbolDelete(BaseRequest userRequest) { + log.debug("CommonDeleteRequest received for contact service."); + + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, contactDeleteRequestValidator); + if (requestInfoUpdate != null) return requestInfoUpdate; + + CommonDeleteRequest req = userRequest.getRequestPayload(); + + Contact contact = contactMap.getSingleObjectByID(req.getId()); + + contactMap.delete(contact); + log.debug("successfully deleted, id {}", contact.getId()); + return null; + } } \ No newline at end of file