From 59110cdff8d5c41c4242060fcc1b430b76d95d44 Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 2 Dec 2022 13:56:58 +0300 Subject: [PATCH 1/2] http://jira.mfd.msk:8088/browse/CLS-80 --- .../queue/scheduler/SchedulerController.java | 50 ++++++++++- .../cud/schedule/SchedulerNewAction.java | 83 +++++++++++++++++++ .../spcex/platform/utils/text/TextUtil.java | 4 + 3 files changed, 135 insertions(+), 2 deletions(-) create mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/schedule/SchedulerNewAction.java diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/SchedulerController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/SchedulerController.java index e9a611a5e..d913e8ff1 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/SchedulerController.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/SchedulerController.java @@ -1,29 +1,40 @@ package ru.spcex.clearing.backendapi.controller.queue.scheduler; 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.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import ru.clearing.classes.statics.data.scheduler.Scheduler; +import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController; +import ru.spcex.clearing.backendapi.controller.request.cud.schedule.SchedulerNewAction; +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.schedule.SchedulerBackendGetAll; +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.concurrent.ExecutionException; @Controller @RequestMapping("/schedule/schedulers") -public class SchedulerController { +public class SchedulerController extends AbstractQueueController { private final IStateLoader stateLoader; @Autowired - public SchedulerController(IStateLoader stateLoader) { + public SchedulerController(IStateLoader stateLoader, IOperator operator) { + super(operator); this.stateLoader = stateLoader; } @@ -37,4 +48,39 @@ public class SchedulerController { response.fromEntity(all); return response; } + + @ApiOperation(value = "create scheduler.") + @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 SchedulerNewAction schedulerNewAction) throws ExecutionException, InterruptedException { + return processRequest(Consts.DESTINATION_SCHEDULER_NEW, schedulerNewAction); + } + + // + //@ApiOperation(value = "update money security.") + //@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 MoneyMarketSecurityUpdateAction moneySecurityUpdateAction) throws ExecutionException, InterruptedException { + // moneySecurityUpdateAction.setId(id); + // return processRequest(Consts.DESTINATION_MONEY_MARKET_SECURITY_UPDATE, moneySecurityUpdateAction); + //} + // + //@ApiOperation(value = "delete money security.") + //@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_MONEY_MARKET_SECURITY_DELETE, deleteAction); + //} } diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/schedule/SchedulerNewAction.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/schedule/SchedulerNewAction.java new file mode 100644 index 000000000..2e83c5fe8 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/schedule/SchedulerNewAction.java @@ -0,0 +1,83 @@ +package ru.spcex.clearing.backendapi.controller.request.cud.schedule; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +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.schedule.SchedulerNewRequest; +import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer; +import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalTimeDeserializer; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.text.TextUtil; + +import java.time.LocalDate; +import java.time.LocalTime; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class SchedulerNewAction implements IAction { + @ApiModelProperty(value = "Идентификатор задачи", example = "ABCD") + @JsonProperty + private String task; + + @ApiModelProperty(value = "Время", example = "01:30:00") + @JsonDeserialize(using = LocalTimeDeserializer.class) + @JsonProperty + public LocalTime taskTime; + + @ApiModelProperty(value = "Дата", example = "2022-01-20") + @JsonDeserialize(using = LocalDateDeserializer.class) + @JsonProperty + public LocalDate clearingDate; + + @ApiModelProperty(value = "Секция", example = "ABCD") + @JsonProperty + private String market; + + @ApiModelProperty(value = "Статус", example = "ABCD") + @JsonProperty + private String taskStatus; + + @ApiModelProperty(value = "Инструмент", example = "1000") + @JsonProperty + private Long securityId; + + @Override + public SchedulerNewRequest toRequest() { + SchedulerNewRequest schedulerNewRequest = new SchedulerNewRequest(); + schedulerNewRequest.setTask(task); + schedulerNewRequest.setTaskTime(taskTime); + schedulerNewRequest.setClearingDate(clearingDate); + schedulerNewRequest.setMarket(market); + schedulerNewRequest.setTaskStatus(taskStatus); + schedulerNewRequest.setSecurityId(securityId); + return schedulerNewRequest; + } + + @Override + public ActionType getActionType() { + return ActionType.NEW; + } + + @Override + public Collection validate() { + List validationErrors = new ArrayList<>(); + if (TextUtil.isEmpty(task)) { + validationErrors.add(new EnumMessage(BackEndError.ValidationError, "task")); + } + if (taskTime == null) { + validationErrors.add(new EnumMessage(BackEndError.ValidationError, "taskTime")); + } + if (clearingDate == null) { + validationErrors.add(new EnumMessage(BackEndError.ValidationError, "clearingDate")); + } + if (TextUtil.isEmpty(taskStatus)) { + validationErrors.add(new EnumMessage(BackEndError.ValidationError, "taskStatus")); + } + return validationErrors; + } + +} diff --git a/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/text/TextUtil.java b/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/text/TextUtil.java index e1041a0c9..3d43ea1b5 100644 --- a/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/text/TextUtil.java +++ b/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/text/TextUtil.java @@ -7,6 +7,10 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class TextUtil { + public static boolean isEmpty(String cs) { + return cs == null || cs.trim().length() == 0; + } + public static String format(String template, Map parameters) { StringBuilder newTemplate = new StringBuilder(template); List valueList = new ArrayList<>(); From 874eaaa8ce407e8bffb9b606806ceb849930204c Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 2 Dec 2022 13:57:26 +0300 Subject: [PATCH 2/2] CookieSameSite bug fix --- .../java/ru/spcex/clearing/backendapi/config/WebConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/WebConfig.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/WebConfig.java index a3a296a94..5a4e2c0d8 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/WebConfig.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/WebConfig.java @@ -90,7 +90,7 @@ public class WebConfig implements WebMvcConfigurer { } else if (sameSite.equalsIgnoreCase(Cookie.SameSite.NONE.attributeValue())) { return CookieSameSiteSupplier.ofNone(); } else if (sameSite.equalsIgnoreCase(Cookie.SameSite.LAX.attributeValue())) { - return CookieSameSiteSupplier.ofNone(); + return CookieSameSiteSupplier.ofLax(); } else if (sameSite.equalsIgnoreCase(Cookie.SameSite.STRICT.attributeValue())) { return CookieSameSiteSupplier.ofStrict(); } else {