From 9938b95c8571f629836261dd20654ccbc6d8ed24 Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 12 Sep 2024 19:29:04 +0530 Subject: [PATCH] Updated endpoint to create flow --- .../gepafin/tendermanagement/dao/FlowDao.java | 51 ++++++++++++------- .../entities/FlowEdgesEntity.java | 3 ++ .../model/request/FlowEdgesRequestBean.java | 2 + .../model/response/FlowEdgesResponseBean.java | 2 +- .../tendermanagement/service/FlowService.java | 2 +- .../service/impl/FlowServiceImpl.java | 7 ++- .../web/rest/api/FlowApi.java | 11 ++-- .../web/rest/api/impl/FlowApiController.java | 6 +-- .../db/changelog/db.changelog-1.0.0.xml | 6 +++ 9 files changed, 56 insertions(+), 34 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java index 985560f3..8b6931bc 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java @@ -20,11 +20,13 @@ import net.gepafin.tendermanagement.repositories.FlowEdgesRepository; import net.gepafin.tendermanagement.repositories.FlowEdgesRepository; import net.gepafin.tendermanagement.service.CallService; import net.gepafin.tendermanagement.service.FormService; +import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -47,10 +49,11 @@ public class FlowDao { @Autowired private FormService formService; - public FlowResponseBean createFlow(FlowRequestBean flowRequestBean, Long callId) { + public FlowResponseBean createOrUpdateFlow(FlowRequestBean flowRequestBean, Long callId) { validateFlowRequestBean(flowRequestBean); - CallEntity call = setInitialAndFinalFormInCall(flowRequestBean, callId); - checkIfFlowExits(callId); + CallEntity call = callService.validateCall(callId); + checkIfFlowExits(call); + call= setInitialAndFinalFormInCall(flowRequestBean, call); validateFlowRequest(flowRequestBean); List flowDataEntities = createFlowData(flowRequestBean,call); List flowEdgesEntities = createFlowEdges(flowRequestBean,call); @@ -59,23 +62,29 @@ public class FlowDao { } public void validateFlowRequestBean(FlowRequestBean flowRequestBean){ - if(flowRequestBean.getFlowData()==null || flowRequestBean.getFlowEdges()==null){ - throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.FLOW_REQUEST_NOT_PROPER)); + if (flowRequestBean.getFlowEdges() == null || flowRequestBean.getFlowEdges().isEmpty()) { + throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.FLOW_REQUEST_NOT_PROPER)); } } - public void checkIfFlowExits(Long callId) { - List flowDataEntities = flowDataRepository.findByCallId(callId); - List flowEdgesEntities = flowEdgesRepository.findByCallId(callId); - if (!flowDataEntities.isEmpty() || !flowEdgesEntities.isEmpty()) { - throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.FLOW_ALREADY_EXISTS)); + public void checkIfFlowExits(CallEntity call) { + List flowDataEntities = flowDataRepository.findByCallId(call.getId()); + List flowEdgesEntities = flowEdgesRepository.findByCallId(call.getId()); + if (Boolean.FALSE.equals(flowDataEntities.isEmpty()) || Boolean.FALSE.equals(flowEdgesEntities.isEmpty())) { + call.setInitialForm(null); + call.setFinalForm(null); + call=callRepository.save(call); + flowDataRepository.deleteAll(flowDataEntities); + flowEdgesRepository.deleteAll(flowEdgesEntities); } } public void validateFlowRequest(FlowRequestBean flowRequestBean) { formService.validateForm(flowRequestBean.getInitialForm()); formService.validateForm(flowRequestBean.getFinalForm()); - flowRequestBean.getFlowData().forEach(flowData -> formService.validateForm(flowData.getFormId())); + if(flowRequestBean.getFlowData()!=null && !flowRequestBean.getFlowData().isEmpty()) { + flowRequestBean.getFlowData().forEach(flowData -> formService.validateForm(flowData.getFormId())); + } } private List createFlowEdgesResponseBean(List flowEdgesEntities) { @@ -96,19 +105,22 @@ public class FlowDao { return flowResponseBean; } - private CallEntity setInitialAndFinalFormInCall(FlowRequestBean flowRequestBean, Long callId) { - CallEntity call = callService.validateCall(callId); + private CallEntity setInitialAndFinalFormInCall(FlowRequestBean flowRequestBean, CallEntity call) { call.setInitialForm(flowRequestBean.getInitialForm()); call.setFinalForm(flowRequestBean.getFinalForm()); + call.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); call = callRepository.save(call); return call; } public List createFlowData(FlowRequestBean flowRequestBean, CallEntity call) { - List flowDataEntities = flowRequestBean.getFlowData().stream() - .map(flowDataRequestBean -> createFlowDataEntity(flowDataRequestBean, call)) - .collect(Collectors.toList()); - return flowDataRepository.saveAll(flowDataEntities); + if (flowRequestBean.getFlowData() != null || !flowRequestBean.getFlowEdges().isEmpty()) { + List flowDataEntities = flowRequestBean.getFlowData().stream() + .map(flowDataRequestBean -> createFlowDataEntity(flowDataRequestBean, call)) + .collect(Collectors.toList()); + return flowDataRepository.saveAll(flowDataEntities); + } + return null; } public FlowDataEntity createFlowDataEntity(FlowDataRequestBean flowDataRequestBean,CallEntity call) { @@ -129,6 +141,7 @@ public class FlowDao { public FlowEdgesEntity createFlowEdgesEntity(FlowEdgesRequestBean flowEdgesRequestBean,CallEntity call) { FlowEdgesEntity flowEdgesEntity = new FlowEdgesEntity(); + flowEdgesEntity.setTrackingId(flowEdgesRequestBean.getId()); flowEdgesEntity.setSourceId(Long.valueOf(flowEdgesRequestBean.getSource())); flowEdgesEntity.setTargetId(Long.valueOf(flowEdgesRequestBean.getTarget())); flowEdgesEntity.setType(flowEdgesRequestBean.getType()); @@ -147,7 +160,7 @@ public class FlowDao { public FlowEdgesResponseBean convertFlowEdgesEntityToFlowEdgesResponseBean(FlowEdgesEntity flowEdgesEntity) { FlowEdgesResponseBean flowEdgesResponseBean = new FlowEdgesResponseBean(); - flowEdgesResponseBean.setId(flowEdgesEntity.getId()); + flowEdgesResponseBean.setId(flowEdgesEntity.getTrackingId()); flowEdgesResponseBean.setType(flowEdgesEntity.getType()); flowEdgesResponseBean.setSource(String.valueOf(flowEdgesEntity.getSourceId())); flowEdgesResponseBean.setTarget(String.valueOf(flowEdgesEntity.getTargetId())); @@ -163,7 +176,7 @@ public class FlowDao { List flowEdgesResponseBeans=createFlowEdgesResponseBean(flowEdgesEntities); flowResponseBean.setFlowData(flowDataResponseBeans); flowResponseBean.setFlowEdges(flowEdgesResponseBeans); - if(flowResponseBean.getFlowData().isEmpty() || flowResponseBean.getFlowEdges().isEmpty()){ + if( flowResponseBean.getFlowEdges().isEmpty()){ return null; } flowResponseBean.setCallId(call.getId()); diff --git a/src/main/java/net/gepafin/tendermanagement/entities/FlowEdgesEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/FlowEdgesEntity.java index 685c484c..119af700 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/FlowEdgesEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/FlowEdgesEntity.java @@ -25,4 +25,7 @@ public class FlowEdgesEntity extends BaseEntity { @Column(name="CALL_ID") private Long callId; + @Column(name="TRACKING_ID") + private String trackingId; + } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/FlowEdgesRequestBean.java b/src/main/java/net/gepafin/tendermanagement/model/request/FlowEdgesRequestBean.java index 45d4195f..57a0e7a7 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/FlowEdgesRequestBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/FlowEdgesRequestBean.java @@ -5,6 +5,8 @@ import lombok.Data; @Data public class FlowEdgesRequestBean { + private String id; + private String source; private String target; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/FlowEdgesResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/FlowEdgesResponseBean.java index 0ffa3c62..9424a79a 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/FlowEdgesResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/FlowEdgesResponseBean.java @@ -6,7 +6,7 @@ import org.springframework.security.core.parameters.P; @Data public class FlowEdgesResponseBean { - private Long id; + private String id; private String source; diff --git a/src/main/java/net/gepafin/tendermanagement/service/FlowService.java b/src/main/java/net/gepafin/tendermanagement/service/FlowService.java index 16d76f8d..7c38a01f 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/FlowService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/FlowService.java @@ -6,7 +6,7 @@ import net.gepafin.tendermanagement.model.response.FlowResponseBean; public interface FlowService { - public FlowResponseBean createFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId); + public FlowResponseBean createOrUpdateFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId); public FlowResponseBean getFlowByCallId(HttpServletRequest request, Long callId); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/FlowServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/FlowServiceImpl.java index 7f173472..2ae5546f 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/FlowServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/FlowServiceImpl.java @@ -7,6 +7,7 @@ import net.gepafin.tendermanagement.model.response.FlowResponseBean; import net.gepafin.tendermanagement.service.FlowService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service public class FlowServiceImpl implements FlowService { @@ -15,11 +16,13 @@ public class FlowServiceImpl implements FlowService { private FlowDao flowDao; @Override - public FlowResponseBean createFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId) { - return flowDao.createFlow(flowRequestBean,callId); + @Transactional(rollbackFor = Exception.class) + public FlowResponseBean createOrUpdateFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId) { + return flowDao.createOrUpdateFlow(flowRequestBean,callId); } @Override + @org.springframework.transaction.annotation.Transactional(readOnly = true) public FlowResponseBean getFlowByCallId(HttpServletRequest request, Long callId) { return flowDao.getFlowByCallId(callId); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/FlowApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/FlowApi.java index 126dedd6..63d813e6 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/FlowApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/FlowApi.java @@ -15,17 +15,14 @@ import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.*; import java.util.List; @Validated public interface FlowApi { - @Operation(summary = "Api to create flow", + @Operation(summary = "Api to create or update flow", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @@ -34,9 +31,9 @@ public interface FlowApi { @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) - @PostMapping(value = "/call/{callId}", + @PutMapping(value = "/call/{callId}", produces = { "application/json" }) - ResponseEntity> createFlow(HttpServletRequest request, + ResponseEntity> createOrUpdateFlow(HttpServletRequest request, @Parameter(description = " Flow request object", required = true) @Valid @RequestBody FlowRequestBean flowRequestBean, @Parameter(description = "The call ID", required = true) @PathVariable("callId") Long callId); diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FlowApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FlowApiController.java index e2e41cb3..6245a420 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FlowApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FlowApiController.java @@ -26,15 +26,13 @@ public class FlowApiController implements FlowApi { private FlowService flowService; @Override - @Transactional(rollbackFor=Exception.class) - public ResponseEntity> createFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId) { - FlowResponseBean flowResponseBean=flowService.createFlow(httpServletRequest,flowRequestBean,callId); + public ResponseEntity> createOrUpdateFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId) { + FlowResponseBean flowResponseBean=flowService.createOrUpdateFlow(httpServletRequest,flowRequestBean,callId); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(flowResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.FLOW_CREATED_SUCCESSFULLY))); } @Override - @Transactional(rollbackFor=Exception.class) public ResponseEntity> getFlowByCallId(HttpServletRequest request, Long callId) { FlowResponseBean flowResponseBean=flowService.getFlowByCallId(request,callId); return ResponseEntity.status(HttpStatus.OK) diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index a18178e7..4f664bd0 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -633,4 +633,10 @@ + + + + + +