This commit is contained in:
parent
0b062fc97c
commit
5ed307f639
2 changed files with 110 additions and 7 deletions
|
|
@ -9,20 +9,26 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
|
import ru.spcex.clearing.company.error.CompanyErrors;
|
||||||
|
import ru.spcex.clearing.company.util.RequestHelper;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
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.common.CommonDeleteRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyNewRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||||
//import ru.spcex.clearing.util.security.UserRoleVerification;
|
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||||
|
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
||||||
|
import ru.spcex.clearing.platform.messaging.service.Status;
|
||||||
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.ImdgId;
|
import ru.spcex.platform.imdg.api.ImdgId;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
|
import ru.spcex.platform.utils.error.ClearingBaseException;
|
||||||
import ru.spcex.platform.utils.error.ValidationException;
|
import ru.spcex.platform.utils.error.ValidationException;
|
||||||
|
import ru.spcex.platform.utils.log.ExceptionUtils;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
@ -57,11 +63,12 @@ public class CompanyService extends QueueConsumer implements InitializingBean {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() {
|
public void afterPropertiesSet() {
|
||||||
|
RequestHelper requestHelper = new RequestHelper(log, messageResolver);
|
||||||
callback(CommonDeleteRequest.class)
|
callback(CommonDeleteRequest.class)
|
||||||
.setConsumer(this::deleteCompany)
|
.setConsumer(this::deleteCompany)
|
||||||
.forDestination(Consts.DESTINATION_COMPANY_DELETE, callbacks::put);
|
.forDestination(Consts.DESTINATION_COMPANY_DELETE, callbacks::put);
|
||||||
callback(CompanyNewRequest.class)
|
callback(CompanyNewRequest.class)
|
||||||
.setConsumer(this::createCompany)
|
.setFunction( request -> requestHelper.requestFunction(this::createCompany, request))
|
||||||
.forDestination(Consts.DESTINATION_COMPANY_NEW, callbacks::put);
|
.forDestination(Consts.DESTINATION_COMPANY_NEW, callbacks::put);
|
||||||
callback(CompanyNewRequest.class)
|
callback(CompanyNewRequest.class)
|
||||||
.setConsumer(this::updateCompany)
|
.setConsumer(this::updateCompany)
|
||||||
|
|
@ -72,6 +79,31 @@ public class CompanyService extends QueueConsumer implements InitializingBean {
|
||||||
// .forDestination(Consts.DESTINATION_COMPANY_UPDATE, callbacks::put);
|
// .forDestination(Consts.DESTINATION_COMPANY_UPDATE, callbacks::put);
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
// interface RequestCommand<T> {
|
||||||
|
// Long command(T arg) throws ClearingBaseException;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// protected <X, T extends BaseRequest<X> > Object requestFunction(RequestCommand<T> command, T userRequest) {
|
||||||
|
// try {
|
||||||
|
// Long itemAffected = command.command(userRequest);
|
||||||
|
// log.trace("Item affected: {}", itemAffected);
|
||||||
|
// return null;
|
||||||
|
// } catch (ClearingBaseException expectedE) {
|
||||||
|
// log.trace("{} return expected exception: {}", command, expectedE.toString());
|
||||||
|
// return new RequestInfoUpdate()
|
||||||
|
// .setId(userRequest.getId())
|
||||||
|
// .setStatus(Status.Error)
|
||||||
|
// .setMessage(expectedE.getMessage());
|
||||||
|
// } catch (Exception unexpectedE) {
|
||||||
|
// log.error("Error at {}: {} ", command, ExceptionUtils.getStackTrace(unexpectedE));
|
||||||
|
// String message = messageResolver.resolve(new EnumMessage(CompanyErrors.GeneralError));
|
||||||
|
// return new RequestInfoUpdate()
|
||||||
|
// .setId(userRequest.getId())
|
||||||
|
// .setStatus(Status.Error)
|
||||||
|
// .setMessage(message);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
protected void validateRole(BaseRequest<CompanyNewRequest> req) throws ValidationException {
|
protected void validateRole(BaseRequest<CompanyNewRequest> req) throws ValidationException {
|
||||||
Long requestor = null; // todo требуется передавать это значение из frontendapi! req.getUserId();
|
Long requestor = null; // todo требуется передавать это значение из frontendapi! req.getUserId();
|
||||||
|
|
@ -85,7 +117,8 @@ public class CompanyService extends QueueConsumer implements InitializingBean {
|
||||||
Optional<EnumMessage> error = validator.tillFirstError();
|
Optional<EnumMessage> error = validator.tillFirstError();
|
||||||
if (error.isPresent()) {
|
if (error.isPresent()) {
|
||||||
log.warn("CompanyNewRequest validation error: {}", error.get());
|
log.warn("CompanyNewRequest validation error: {}", error.get());
|
||||||
String errorMsg = messageResolver.resolve(error.get());
|
throw new ValidationException(error.get());
|
||||||
|
// String errorMsg = messageResolver.resolve(error.get());
|
||||||
// return new RequestInfoUpdate() // todo reply message
|
// return new RequestInfoUpdate() // todo reply message
|
||||||
// .setId(userRequest.getId())
|
// .setId(userRequest.getId())
|
||||||
// .setStatus(Status.Error)
|
// .setStatus(Status.Error)
|
||||||
|
|
@ -93,14 +126,12 @@ public class CompanyService extends QueueConsumer implements InitializingBean {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createCompany(BaseRequest<CompanyNewRequest> companyNewRequestBaseRequest) {
|
private Long createCompany(BaseRequest<CompanyNewRequest> companyNewRequestBaseRequest) throws ValidationException {
|
||||||
CompanyNewRequest req = companyNewRequestBaseRequest.getRequestPayload();
|
CompanyNewRequest req = companyNewRequestBaseRequest.getRequestPayload();
|
||||||
log.debug("company-new request received, BaseRequest.id = {}", companyNewRequestBaseRequest.getId());
|
log.debug("company-new request received, BaseRequest.id = {}", companyNewRequestBaseRequest.getId());
|
||||||
try {
|
{ // Валидация, ValidationException
|
||||||
validateRole(companyNewRequestBaseRequest);
|
validateRole(companyNewRequestBaseRequest);
|
||||||
validate(req);
|
validate(req);
|
||||||
} catch (ValidationException e) {
|
|
||||||
throw new RuntimeException(e); // todo true return error
|
|
||||||
}
|
}
|
||||||
Company company = new Company();
|
Company company = new Company();
|
||||||
company.setId(idSequence.nextId());
|
company.setId(idSequence.nextId());
|
||||||
|
|
@ -124,6 +155,8 @@ public class CompanyService extends QueueConsumer implements InitializingBean {
|
||||||
companyMap.insert(company);
|
companyMap.insert(company);
|
||||||
log.debug("company-new request processed, BaseRequest.id = {}, company.id={}",
|
log.debug("company-new request processed, BaseRequest.id = {}, company.id={}",
|
||||||
companyNewRequestBaseRequest.getId(), company.getId());
|
companyNewRequestBaseRequest.getId(), company.getId());
|
||||||
|
|
||||||
|
return company.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,70 @@
|
||||||
|
package ru.spcex.clearing.company.util;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import ru.spcex.clearing.company.error.CompanyErrors;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
||||||
|
import ru.spcex.clearing.platform.messaging.service.Status;
|
||||||
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
|
import ru.spcex.platform.utils.error.ClearingBaseException;
|
||||||
|
import ru.spcex.platform.utils.log.ExceptionUtils;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Упрощает обработку ошибок во время обработки реквестов.
|
||||||
|
* Передаёт регламинтированные ошибки из ClearingBaseException.
|
||||||
|
*
|
||||||
|
* Пример:
|
||||||
|
* callback(CompanyNewRequest.class)
|
||||||
|
* .setFunction( request -> requestHelper.requestFunction(this::createCompany, request))
|
||||||
|
* .forDestination(Consts.DESTINATION_COMPANY_NEW, callbacks::put);
|
||||||
|
*/
|
||||||
|
public class RequestHelper {
|
||||||
|
protected final Logger log;
|
||||||
|
protected final IMessageResolver messageResolver;
|
||||||
|
|
||||||
|
public RequestHelper(Logger log, IMessageResolver messageResolver) {
|
||||||
|
Objects.requireNonNull(log);
|
||||||
|
Objects.requireNonNull(messageResolver);
|
||||||
|
this.log = log;
|
||||||
|
this.messageResolver = messageResolver;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Оборачивает функцию command в try-catch
|
||||||
|
* @param command обработчик реквеста
|
||||||
|
* @param userRequest реквест
|
||||||
|
* @param <X> request payload type
|
||||||
|
* @param <T> тип BaseRequest
|
||||||
|
* @return RequestInfoUpdate или null
|
||||||
|
*/
|
||||||
|
public <X, T extends BaseRequest<X>> RequestInfoUpdate requestFunction(RequestCommand<T> command, T userRequest) {
|
||||||
|
try {
|
||||||
|
Long itemAffected = command.command(userRequest);
|
||||||
|
log.trace("Item affected: {}", itemAffected);
|
||||||
|
return null;
|
||||||
|
} catch (ClearingBaseException expectedE) {
|
||||||
|
log.trace("{} return expected exception: {}", command, expectedE.toString());
|
||||||
|
String message = expectedE.getEnumMsg() == null
|
||||||
|
? expectedE.getMessage()
|
||||||
|
: messageResolver.resolve(expectedE.getEnumMsg());
|
||||||
|
return new RequestInfoUpdate()
|
||||||
|
.setId(userRequest.getId())
|
||||||
|
.setStatus(Status.Error)
|
||||||
|
.setMessage(message);
|
||||||
|
} catch (Exception unexpectedE) {
|
||||||
|
log.error("Error at {}: {} ", command, ExceptionUtils.getStackTrace(unexpectedE));
|
||||||
|
String message = messageResolver.resolve(new EnumMessage(CompanyErrors.GeneralError));
|
||||||
|
return new RequestInfoUpdate()
|
||||||
|
.setId(userRequest.getId())
|
||||||
|
.setStatus(Status.Error)
|
||||||
|
.setMessage(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface RequestCommand<T> {
|
||||||
|
Long command(T arg) throws ClearingBaseException;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue