From a325a7fd2e43661a71fa5f63868e7ece78e4fdb8 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Thu, 20 Apr 2023 18:48:47 +0300 Subject: [PATCH] backend-api http://jira.mfd.msk:8088/browse/CLS-273 --- .../TradingClearingRegistryController.java | 97 +++++++++ .../TradingClearingRegistryNewAction.java | 87 ++++++++ .../TradingClearingRegistryUpdateAction.java | 62 ++++++ ...TradingClearingRegistryBackendGetById.java | 46 ++++ ...adingClearingRegistryBackendGetFields.java | 133 ++++++++++++ .../queue/AbstractControllerTest.java | 3 + ...TradingClearingRegistryControllerTest.java | 202 ++++++++++++++++++ .../platform/messaging/domain/Consts.java | 4 + .../TradingClearingRegistryNewRequest.java | 56 +++++ .../TradingClearingRegistryUpdateRequest.java | 26 +++ 10 files changed, 716 insertions(+) create mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryController.java create mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryNewAction.java create mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryUpdateAction.java create mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetById.java create mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetFields.java create mode 100644 clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryControllerTest.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryNewRequest.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryUpdateRequest.java diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryController.java new file mode 100644 index 000000000..a609c42ba --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryController.java @@ -0,0 +1,97 @@ +package ru.spcex.clearing.backendapi.controller.queue.registry; + +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; +import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController; +import ru.spcex.clearing.backendapi.controller.request.cud.registry.TradingClearingRegistryNewAction; +import ru.spcex.clearing.backendapi.controller.request.cud.registry.TradingClearingRegistryUpdateAction; +import ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction; +import ru.spcex.clearing.backendapi.controller.response.BasicSpcexResponse; +import ru.spcex.clearing.backendapi.controller.response.cud.CudResponse; +import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse; +import ru.spcex.clearing.backendapi.controller.response.entity.registry.TradingClearingRegistryBackendGetById; +import ru.spcex.clearing.backendapi.service.IOperator; +import ru.spcex.clearing.backendapi.service.IStateLoader; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.Consts; + +import java.util.Collection; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ExecutionException; + +@Controller +@RequestMapping("/registry/trading-clearing-registry") +public class TradingClearingRegistryController extends AbstractQueueController { + private final IStateLoader stateLoader; + + @Autowired + public TradingClearingRegistryController(IOperator operator, IStateLoader stateLoader) { + super(operator); + this.stateLoader = stateLoader; + } + + @ApiOperation(value = "create TradingClearingRegistry.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public CudResponse add( + @ApiParam(value = "Параметры команды в JSON формате.", required = true) + @RequestBody TradingClearingRegistryNewAction bankAccountNewAction) throws ExecutionException, InterruptedException { + return processRequest(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_NEW, bankAccountNewAction); + } + + @ApiOperation(value = "update TradingClearingRegistry.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public CudResponse update( + @ApiParam(value = "Идентификатор изменяемого объекта.", required = true, example = "1234") + @PathVariable("id") Long id, + @ApiParam(value = "Новые значения полей объекта.", required = true) + @RequestBody TradingClearingRegistryUpdateAction tradingClearingRegistryUpdateAction) throws ExecutionException, InterruptedException { + tradingClearingRegistryUpdateAction.setId(id); + return processRequest(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_UPDATE, tradingClearingRegistryUpdateAction); + } + + @ApiOperation(value = "delete TradingClearingRegistry.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + @ResponseBody + public CudResponse delete(@ApiParam(value = "Идентификатор удаляемого объекта", required = true, example = "1234") + @PathVariable("id") Long id) throws ExecutionException, InterruptedException { + CommonDeleteAction deleteAction = new CommonDeleteAction(); + deleteAction.setId(id); + return processRequest(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_DELETE, deleteAction); + } + + @ApiOperation(value = "get TradingClearingRegistry by id.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = TradingClearingRegistryBackendGetById.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + @ResponseBody + public TradingClearingRegistryBackendGetById getById(@ApiParam(value = "Идентификатор объекта", required = true, example = "1234") + @PathVariable("id") Long id) { + Optional tradingClearingRegistry = stateLoader.getById(id, IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); + TradingClearingRegistryBackendGetById response = new TradingClearingRegistryBackendGetById(); + tradingClearingRegistry.ifPresentOrElse(response::fromEntity, () -> response.setCode(404)); + return response; + } + + @ApiOperation(value = "get all TradingClearingRegistry's.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)}) + @RequestMapping(method = RequestMethod.GET) + @ResponseBody + public CommonGetAllResponse getAll() { + Collection> all = stateLoader.getAllMetaTransform(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); + CommonGetAllResponse response = new CommonGetAllResponse(); + response.fromEntity(all); + return response; + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryNewAction.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryNewAction.java new file mode 100644 index 000000000..dacbfd3ce --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryNewAction.java @@ -0,0 +1,87 @@ +package ru.spcex.clearing.backendapi.controller.request.cud.registry; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; +import ru.spcex.clearing.backendapi.domain.actions.IAction; +import ru.spcex.clearing.backendapi.errors.BackEndError; +import ru.spcex.clearing.platform.messaging.domain.ActionType; +import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryNewRequest; +import ru.spcex.platform.utils.enumeration.EnumMessage; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class TradingClearingRegistryNewAction implements IAction { + @ApiModelProperty(value = "Наименование компании", example = "1200") + @JsonProperty + private Long companyId; + @ApiModelProperty(value = "Номер денежного счета", example = "1500") + @JsonProperty + private Long moneyAccountId; + @ApiModelProperty(value = "Номер депозитарного счета", example = "1600") + @JsonProperty + private Long depoAccountId; + @ApiModelProperty(value = "Наименование статуса", example = "ACTV") + @JsonProperty + private String status; + + @Override + public Collection validate() { + List errors = new ArrayList<>(); + if (this.companyId == null) + errors.add(new EnumMessage(BackEndError.ValidationError, "companyId")); + if (this.moneyAccountId == null) + errors.add(new EnumMessage(BackEndError.ValidationError, "moneyAccountId")); + return errors.isEmpty() ? Collections.emptyList() : errors; + } + + @Override + public TradingClearingRegistryNewRequest toRequest() { + var req = new TradingClearingRegistryNewRequest(); + req.setCompanyId(this.companyId); + req.setMoneyAccountId(this.moneyAccountId); + req.setDepoAccountId(this.depoAccountId); + req.setStatus(this.status); + return req; + } + + @ApiModelProperty(hidden = true) + @Override + public ActionType getActionType() { + return ActionType.NEW; + } + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } + + public Long getMoneyAccountId() { + return moneyAccountId; + } + + public void setMoneyAccountId(Long moneyAccountId) { + this.moneyAccountId = moneyAccountId; + } + + public Long getDepoAccountId() { + return depoAccountId; + } + + public void setDepoAccountId(Long depoAccountId) { + this.depoAccountId = depoAccountId; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryUpdateAction.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryUpdateAction.java new file mode 100644 index 000000000..d7ca8dd71 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/TradingClearingRegistryUpdateAction.java @@ -0,0 +1,62 @@ +package ru.spcex.clearing.backendapi.controller.request.cud.registry; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; +import ru.spcex.clearing.backendapi.domain.actions.IAction; +import ru.spcex.clearing.backendapi.errors.BackEndError; +import ru.spcex.clearing.platform.messaging.domain.ActionType; +import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryUpdateRequest; +import ru.spcex.platform.utils.enumeration.EnumMessage; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class TradingClearingRegistryUpdateAction implements IAction { + + @ApiModelProperty(hidden = true) + @JsonProperty + public Long id; + + @JsonProperty + private String status; + + @Override + public Collection validate() { + List errors = new ArrayList<>(); + if (this.id == null) + errors.add(new EnumMessage(BackEndError.ValidationError, "id")); + return errors.isEmpty() ? Collections.emptyList() : errors; + } + + @Override + public TradingClearingRegistryUpdateRequest toRequest() { + var req = new TradingClearingRegistryUpdateRequest(); + req.setId(this.id); + req.setStatus(this.status); + return req; + } + + @ApiModelProperty(hidden = true) + @Override + public ActionType getActionType() { + return ActionType.UPDATE; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetById.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetById.java new file mode 100644 index 000000000..27feabab4 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetById.java @@ -0,0 +1,46 @@ +package ru.spcex.clearing.backendapi.controller.response.entity.registry; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.spcex.clearing.backendapi.controller.response.BasicSpcexResponse; + +/** + * Банковские реквизиты для перечисления денежных средств + * + * @ApiModel(description = "Ответ в результате отправки операции в топик Kafka.") + * @ApiModelProperty(value = "Информация о принятом запросе") + **/ +@ApiModel(description = "Ответ при получении объекта TradingClearingRegistry.") +public class TradingClearingRegistryBackendGetById extends BasicSpcexResponse { + + @JsonProperty + @ApiModelProperty(value = "Поля объекта") + private TradingClearingRegistryBackendGetFields payload; + + public TradingClearingRegistryBackendGetFields getPayload() { + return payload; + } + + public void setPayload(TradingClearingRegistryBackendGetFields payload) { + this.payload = payload; + } + + public void fromEntity(TradingClearingRegistry tcr) { + var payload = new TradingClearingRegistryBackendGetFields(); + this.setPayload(payload); + payload.setId(tcr.getId()); + payload.setCompanyId(tcr.getCompanyId()); + payload.setCode(tcr.getCode()); + payload.setMoneyAccountId(tcr.getMoneyAccountId()); + payload.setDepoAaccountId(tcr.getDepoAaccountId()); + payload.setTradingClearingRegistryType(tcr.getTradingClearingRegistryType()); + payload.setTradingClearingRegistryLevel(tcr.getTradingClearingRegistryLevel()); + payload.setTradingClearingRegistryPurpose(tcr.getTradingClearingRegistryPurpose()); + payload.setStatus(tcr.getStatus()); + payload.setCreatedAt(tcr.getCreated()); + payload.setUpdatedAt(tcr.getUpdated()); + } + +} \ No newline at end of file diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetFields.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetFields.java new file mode 100644 index 000000000..60495a336 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/registry/TradingClearingRegistryBackendGetFields.java @@ -0,0 +1,133 @@ +package ru.spcex.clearing.backendapi.controller.response.entity.registry; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.annotations.ApiModelProperty; +import ru.spcex.clearing.platform.messaging.domain.json.serialize.InstantSerializer; + +import java.time.Instant; + +public class TradingClearingRegistryBackendGetFields { + @JsonProperty + @ApiModelProperty(value = "Идентификатор", example = "1234") + private Long id; + @JsonProperty + @ApiModelProperty(value = "Идентификатор компании", example = "1234") + private Long companyId; + @JsonProperty + @ApiModelProperty(value = "од торгово-клирингового регистра", example = "ABCD") + private String code; + @JsonProperty + @ApiModelProperty(value = "Идентификатор денежного счета", example = "") + private Long moneyAccountId; + @JsonProperty + @ApiModelProperty(value = "Идентификатор депозитарного счета", example = "") + private Long depoAaccountId; + @JsonProperty + @ApiModelProperty(value = "Код торгово-клирингового регистра", example = "") + private String tradingClearingRegistryType; + @JsonProperty + @ApiModelProperty(value = "Код торгово-клирингового регистра", example = "") + private String tradingClearingRegistryLevel; + @JsonProperty + @ApiModelProperty(value = "Код области применения", example = "") + private String tradingClearingRegistryPurpose; + @JsonProperty + @ApiModelProperty(value = "Наименование статуса", example = "ACTV") + private String status; + + @JsonProperty("Дата-время создания записи") + @JsonSerialize(using = InstantSerializer.class) + private Instant createdAt; + @JsonProperty("Дата-время изменения записи") + @JsonSerialize(using = InstantSerializer.class) + private Instant updatedAt; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public Long getMoneyAccountId() { + return moneyAccountId; + } + + public void setMoneyAccountId(Long moneyAccountId) { + this.moneyAccountId = moneyAccountId; + } + + public Long getDepoAaccountId() { + return depoAaccountId; + } + + public void setDepoAaccountId(Long depoAaccountId) { + this.depoAaccountId = depoAaccountId; + } + + public String getTradingClearingRegistryType() { + return tradingClearingRegistryType; + } + + public void setTradingClearingRegistryType(String tradingClearingRegistryType) { + this.tradingClearingRegistryType = tradingClearingRegistryType; + } + + public String getTradingClearingRegistryLevel() { + return tradingClearingRegistryLevel; + } + + public void setTradingClearingRegistryLevel(String tradingClearingRegistryLevel) { + this.tradingClearingRegistryLevel = tradingClearingRegistryLevel; + } + + public String getTradingClearingRegistryPurpose() { + return tradingClearingRegistryPurpose; + } + + public void setTradingClearingRegistryPurpose(String tradingClearingRegistryPurpose) { + this.tradingClearingRegistryPurpose = tradingClearingRegistryPurpose; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + public Instant getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Instant updatedAt) { + this.updatedAt = updatedAt; + } +} diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java index 588d6812c..4f345a0a4 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java @@ -40,6 +40,7 @@ import ru.spcex.clearing.backendapi.controller.queue.liabilities.LiabilitiesClai import ru.spcex.clearing.backendapi.controller.queue.misc.*; import ru.spcex.clearing.backendapi.controller.queue.payment.PaymentInstructionController; import ru.spcex.clearing.backendapi.controller.queue.register.*; +import ru.spcex.clearing.backendapi.controller.queue.registry.TradingClearingRegistryController; import ru.spcex.clearing.backendapi.controller.queue.scheduler.*; import ru.spcex.clearing.backendapi.controller.queue.securities.*; import ru.spcex.clearing.backendapi.controller.queue.user.UserController; @@ -129,6 +130,8 @@ import static ru.spcex.clearing.test.json.MatcherFactoryWithJson.usingIgnoringFi OrderRegisterController.class, ReportRegisterController.class, UncoveredDealRegisterController.class, + //registry + TradingClearingRegistryController.class, //scheduler ClearingCalendarController.class, LauncherController.class, diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryControllerTest.java new file mode 100644 index 000000000..d09377db7 --- /dev/null +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/registry/TradingClearingRegistryControllerTest.java @@ -0,0 +1,202 @@ +package ru.spcex.clearing.backendapi.controller.queue.registry; + +import org.junit.jupiter.api.Test; +import org.springframework.core.NestedExceptionUtils; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.spcex.clearing.backendapi.controller.queue.AbstractControllerTest; +import ru.spcex.clearing.backendapi.controller.request.cud.registry.TradingClearingRegistryNewAction; +import ru.spcex.clearing.backendapi.controller.request.cud.registry.TradingClearingRegistryUpdateAction; +import ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction; +import ru.spcex.clearing.backendapi.controller.response.entity.registry.TradingClearingRegistryBackendGetById; +import ru.spcex.clearing.backendapi.controller.response.entity.registry.TradingClearingRegistryBackendGetFields; +import ru.spcex.clearing.backendapi.domain.actions.IAction; +import ru.spcex.clearing.backendapi.errors.ActionValidationException; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryNewRequest; +import ru.spcex.platform.imdg.api.Imdg; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static ru.spcex.clearing.test.json.JsonUtil.writeValue; + +class TradingClearingRegistryControllerTest extends AbstractControllerTest { + private static final String REST_URL = "/registry/trading-clearing-registry/"; + + /** + * {@link TradingClearingRegistryController#add(TradingClearingRegistryNewAction)}
+ * Тест проверяет получение сущности {@link TradingClearingRegistryNewAction} по REST API и отправку в Apache Kafka.
+ * Входной запрос {@link TradingClearingRegistryNewRequest}:
+ * {@link TradingClearingRegistryNewRequest#companyId} - 1234567890
+ * {@link TradingClearingRegistryNewRequest#moneyAccountId} - 18415056336414057
+ * {@link TradingClearingRegistryNewRequest#depoAccountId} - 21239757374450030
+ * {@link TradingClearingRegistryNewRequest#status} - ACTV
+ */ + @Test + void add() throws Exception { + //ARRANGE + TradingClearingRegistryNewAction tradingClearingRegistryNewAction = getTradingClearingRegistryNewAction( + 0, + 1234567890L, 18415056336414057L, 21239757374450030L, "ACTV" + ); + + //ACT and ASSERT + checkAddingByRestApi(REST_URL, tradingClearingRegistryNewAction); + checkSendedMessegeFromKafka(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_NEW, tradingClearingRegistryNewAction); + } + + /** + * {@link TradingClearingRegistryController#add(TradingClearingRegistryNewAction)}
+ * Тест проверяет работу валидации сущности {@link TradingClearingRegistryNewAction} принятой по REST API для отправку в Apache Kafka.
+ * Входной запрос {@link TradingClearingRegistryNewRequest}:
+ * {@link TradingClearingRegistryNewRequest#companyId} - 1234567890 / null
+ * {@link TradingClearingRegistryNewRequest#moneyAccountId} - 18415056336414057 / null
+ * {@link TradingClearingRegistryNewRequest#depoAccountId} - 21239757374450030
+ * {@link TradingClearingRegistryNewRequest#status} - ACTV
+ */ + @Test + void addWithException() { + assertThrowsForNew(getTradingClearingRegistryNewAction(0, null, 18415056336414057L, 21239757374450030L, "ACTV")); + assertThrowsForNew(getTradingClearingRegistryNewAction(0, 1234567890L, null, 21239757374450030L, "ACTV")); + } + + /** + * {@link TradingClearingRegistryController#update(Long, TradingClearingRegistryUpdateAction)}
+ * Тест проверяет получение сущности {@link TradingClearingRegistryUpdateAction} по REST API и отправку в Apache Kafka.
+ * Входной запрос {@link TradingClearingRegistryUpdateAction}:
+ * {@link TradingClearingRegistryUpdateAction#id} - generated
+ * {@link TradingClearingRegistryUpdateAction#code} - ACTV
+ */ + @Test + void update() throws Exception { + //ARRANGE + long id = 0; + TradingClearingRegistryUpdateAction tradingClearingRegistryUpdateAction = getTradingClearingRegistryUpdateAction( + id, "ACTV" + ); + + //ACT and ASSERT + checkUpdatingByRestApi(REST_URL, tradingClearingRegistryUpdateAction, id); + checkSendedMessegeFromKafka(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_UPDATE, tradingClearingRegistryUpdateAction); + } + + /** + * {@link TradingClearingRegistryController#delete(Long)}
+ * Тест проверяет получение id сущности {@link Long} по REST API и отправку в Apache Kafka.
+ * Входной запрос /registry/trading-clearing-registry/{@link Long}: - 0L
+ */ + @Test + void delete() throws Exception { + //ARRANGE + long id = currentId.getAndIncrement(); + CommonDeleteAction deleteAction = new CommonDeleteAction(); + deleteAction.setId(id); + //ACT and ASSERT + checkDeletingByRestApi(REST_URL, id); + checkSendedMessegeFromKafka(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_DELETE, deleteAction); + } + + /** + * {@link TradingClearingRegistryController#getById(Long)}
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_TradingClearingRegistry.
+ * Входной запрос /registry/trading-clearing-registry/{@link Long}: - 0L
+ * Ответ BankAccountBackendGetById
+ */ + @Test + void getById() throws Exception { + //ARRANGE + TradingClearingRegistry existTradingClearingRegistry = new TradingClearingRegistry(); + existTradingClearingRegistry.setCompanyId(365L); + existTradingClearingRegistry.setCode("99999"); + existTradingClearingRegistry.setMoneyAccountId(404L); + existTradingClearingRegistry.setDepoAaccountId(512L); + existTradingClearingRegistry.setTradingClearingRegistryType("RUB"); + existTradingClearingRegistry.setTradingClearingRegistryLevel("OOO ROGA I KOPITA"); + existTradingClearingRegistry.setTradingClearingRegistryPurpose("848484848484"); + existTradingClearingRegistry.setStatus("ACTV"); + existTradingClearingRegistry.setId(currentId.get()); + + Imdg inDocumentJournalImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); + inDocumentJournalImdg.insert(existTradingClearingRegistry); + + TradingClearingRegistryBackendGetById expected = new TradingClearingRegistryBackendGetById(); + TradingClearingRegistryBackendGetFields payload = new TradingClearingRegistryBackendGetFields(); + payload.setId(existTradingClearingRegistry.getId()); + payload.setCompanyId(existTradingClearingRegistry.getCompanyId()); + payload.setCode(existTradingClearingRegistry.getCode()); + payload.setMoneyAccountId(existTradingClearingRegistry.getMoneyAccountId()); + payload.setDepoAaccountId(existTradingClearingRegistry.getDepoAaccountId()); + payload.setTradingClearingRegistryType(existTradingClearingRegistry.getTradingClearingRegistryType()); + payload.setTradingClearingRegistryLevel(existTradingClearingRegistry.getTradingClearingRegistryLevel()); + payload.setTradingClearingRegistryPurpose(existTradingClearingRegistry.getTradingClearingRegistryPurpose()); + payload.setStatus(existTradingClearingRegistry.getStatus()); + payload.setCreatedAt(existTradingClearingRegistry.getCreated()); + payload.setUpdatedAt(existTradingClearingRegistry.getUpdated()); + expected.setPayload(payload); + //ACT + perform(MockMvcRequestBuilders.get(REST_URL + existTradingClearingRegistry.getId()) + .contentType(MediaType.APPLICATION_JSON)) + .andDo(print())//output to the log request and response +// ASSERT + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(content().json(writeValue(expected))); + } + + /** + * {@link TradingClearingRegistryController#getAll()}
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_BankAccount.
+ * Входной запрос /registry/trading-clearing-registry/
+ * Ответ CommonGetAllResponse
+ */ + @Test + void getAll() throws Exception { + //ARRANGE + TradingClearingRegistry existTradingClearingRegistry = new TradingClearingRegistry(); + existTradingClearingRegistry.setCompanyId(365L); + existTradingClearingRegistry.setCode("99999"); + existTradingClearingRegistry.setMoneyAccountId(404L); + existTradingClearingRegistry.setDepoAaccountId(512L); + existTradingClearingRegistry.setTradingClearingRegistryType("RUB"); + existTradingClearingRegistry.setTradingClearingRegistryLevel("OOO ROGA I KOPITA"); + existTradingClearingRegistry.setTradingClearingRegistryPurpose("848484848484"); + existTradingClearingRegistry.setStatus("ACTV"); + existTradingClearingRegistry.setId(currentId.get()); + + //ACT and ASSERT + checkGettingAllFromRestApi(IMDGDistributedNames.Map_TradingClearingRegistry, existTradingClearingRegistry, REST_URL); + } + + private void assertThrowsForNew(IAction iAction) { + assertThrows(ActionValidationException.class, () -> { + try { + perform(MockMvcRequestBuilders.post(REST_URL).contentType(MediaType.APPLICATION_JSON).content(writeValue(iAction))); + } catch (Exception e) { + Throwable rootCause = NestedExceptionUtils.getRootCause(e); + throw rootCause != null ? rootCause : e; + } + }); + } + + private TradingClearingRegistryNewAction getTradingClearingRegistryNewAction(long id, + Long companyId, Long moneyAccountId, Long depoAccountId, String status + ) { + TradingClearingRegistryNewAction tradingClearingRegistryNewAction = new TradingClearingRegistryNewAction(); + tradingClearingRegistryNewAction.setCompanyId(companyId); + tradingClearingRegistryNewAction.setMoneyAccountId(moneyAccountId); + tradingClearingRegistryNewAction.setDepoAccountId(21239757374450030L); + tradingClearingRegistryNewAction.setStatus(status); + return tradingClearingRegistryNewAction; + } + + private TradingClearingRegistryUpdateAction getTradingClearingRegistryUpdateAction(Long id, String status) { + TradingClearingRegistryUpdateAction tradingClearingRegistryUpdateAction = new TradingClearingRegistryUpdateAction(); + tradingClearingRegistryUpdateAction.setId(id); + tradingClearingRegistryUpdateAction.setStatus(status); + return tradingClearingRegistryUpdateAction; + } +} \ No newline at end of file diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java index 32ccec396..f07a3033e 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java @@ -69,6 +69,10 @@ public interface Consts { String DESTINATION_CLIENT_CODE_UPDATE = "client-code-update"; String DESTINATION_CLIENT_CODE_DELETE = "client-code-delete"; + String DESTINATION_TRADING_CLEARING_REGISTRY_NEW = "trading-clearing-registry-new"; + String DESTINATION_TRADING_CLEARING_REGISTRY_UPDATE = "trading-clearing-registry-update"; + String DESTINATION_TRADING_CLEARING_REGISTRY_DELETE = "trading-clearing-registry-delete"; + String DESTINATION_SDF08_NEW = "s-df-08-new"; String DESTINATION_SDF02_NEW = "s-df-02-new"; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryNewRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryNewRequest.java new file mode 100644 index 000000000..75041b81e --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryNewRequest.java @@ -0,0 +1,56 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.registry; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import ru.spcex.clearing.platform.messaging.domain.json.deserialize.InstantDateTimeDeserializer; +import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer; +import ru.spcex.clearing.platform.messaging.domain.json.serialize.InstantDateTimeSerializer; +import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer; + +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; + +public class TradingClearingRegistryNewRequest { + @JsonProperty + private Long companyId; + @JsonProperty + private Long moneyAccountId; + @JsonProperty + private Long depoAccountId; + @JsonProperty + private String status; + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } + + public Long getMoneyAccountId() { + return moneyAccountId; + } + + public void setMoneyAccountId(Long moneyAccountId) { + this.moneyAccountId = moneyAccountId; + } + + public Long getDepoAccountId() { + return depoAccountId; + } + + public void setDepoAccountId(Long depoAccountId) { + this.depoAccountId = depoAccountId; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryUpdateRequest.java new file mode 100644 index 000000000..4db96de10 --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/TradingClearingRegistryUpdateRequest.java @@ -0,0 +1,26 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.registry; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class TradingClearingRegistryUpdateRequest { + @JsonProperty + private Long id; + @JsonProperty + private String status; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +}