From 3525cf01ad63a22571f770e84bdc042bc1f95e3d Mon Sep 17 00:00:00 2001 From: rajesh Date: Wed, 18 Sep 2024 20:48:34 +0530 Subject: [PATCH] Applied validation in PUT api of form --- .../tendermanagement/config/Translator.java | 5 + .../constants/GepafinConstant.java | 2 +- .../gepafin/tendermanagement/dao/FlowDao.java | 8 +- .../gepafin/tendermanagement/dao/FormDao.java | 91 ++++++++++++++++--- .../enums/ApplicationStatusTypeEnum.java | 3 +- .../tendermanagement/service/FormService.java | 2 +- .../service/impl/FormServiceImpl.java | 4 +- .../web/rest/api/FlowApi.java | 2 + .../web/rest/api/FormApi.java | 4 +- .../web/rest/api/impl/FormApiController.java | 4 +- src/main/resources/message_en.properties | 3 + src/main/resources/message_it.properties | 4 +- 12 files changed, 107 insertions(+), 25 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/config/Translator.java b/src/main/java/net/gepafin/tendermanagement/config/Translator.java index b3c02401..35ad8227 100644 --- a/src/main/java/net/gepafin/tendermanagement/config/Translator.java +++ b/src/main/java/net/gepafin/tendermanagement/config/Translator.java @@ -22,4 +22,9 @@ public class Translator { Locale locale = LocaleContextHolder.getLocale(); return messageSource.getMessage(msgCode, null, locale); } + + public static String toLocale(String key, Object... args) { + return messageSource.getMessage(key, args, LocaleContextHolder.getLocale()); + } + } \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 4ed09d15..acf2e124 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -132,6 +132,6 @@ public class GepafinConstant { public static final String APPLICATION_ALREADY_SUBMITTED="application.already.submitted"; public static final String INITAL_AND_FINAL_FORM_CANNOT_NULL="initial.and.final.form.cannot.null"; public static final String APPLICATION_FORM_NOT_FOUND="application.form.not.found"; - + public static final String UPDATING_FORM_VALUE_IMPACT_ON_FLOW="updating.form.value.impact.on.flow"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java index 0ded1ac5..34bf0e59 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java @@ -135,9 +135,13 @@ public class FlowDao { public FlowDataEntity createFlowDataEntity(FlowDataRequestBean flowDataRequestBean,CallEntity call) { FlowDataEntity flowDataEntity = new FlowDataEntity(); flowDataEntity.setFormId(flowDataRequestBean.getFormId()); + if(Boolean.FALSE.equals(flowDataRequestBean.getChosenField().isEmpty()) || flowDataRequestBean.getChosenField()!=null){ flowDataEntity.setChoosenField(flowDataRequestBean.getChosenField()); - flowDataEntity.setChoosenValue(flowDataRequestBean.getChosenValue()); - flowDataEntity.setCallId(call.getId()); + } + if(Boolean.FALSE.equals(flowDataRequestBean.getChosenValue().isEmpty()) || flowDataRequestBean.getChosenValue()!=null) { + flowDataEntity.setChoosenValue(flowDataRequestBean.getChosenValue()); + } + flowDataEntity.setCallId(call.getId()); return flowDataEntity; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java index 0cc4b2eb..ab882abd 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java @@ -3,14 +3,10 @@ package net.gepafin.tendermanagement.dao; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.*; -import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBean; -import net.gepafin.tendermanagement.model.request.ContentRequestBean; -import net.gepafin.tendermanagement.model.request.FieldValidatorBean; -import net.gepafin.tendermanagement.model.request.FormRequest; +import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.response.ContentResponseBean; import net.gepafin.tendermanagement.model.response.FormResponseBean; -import net.gepafin.tendermanagement.repositories.ApplicationFormRepository; -import net.gepafin.tendermanagement.repositories.FormRepository; +import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.service.CallService; import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.FieldValidator; @@ -21,6 +17,7 @@ import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.text.MessageFormat; import java.time.LocalDateTime; import java.util.LinkedHashMap; import java.util.List; @@ -42,6 +39,15 @@ public class FormDao { @Autowired private CallDao callDao; + @Autowired + private FlowDataRepository flowDataRepository; + + @Autowired + private FlowEdgesRepository flowEdgesRepository; + + @Autowired + private CallRepository callRepository; + public FormEntity saveFormEntity(FormEntity formEntity){ formEntity=formRepository.save(formEntity); return formEntity; @@ -66,6 +72,16 @@ public class FormDao { } public FormResponseBean createForm(Long callId,FormRequest formRequest){ validateForm(formRequest); + CallEntity callEntity=callService.validateCall(callId); + List flowDataEntities=flowDataRepository.findByCallId(callId); + List flowEdgesEntities=flowEdgesRepository.findByCallId(callId); + if(Boolean.FALSE.equals(flowDataEntities.isEmpty() || flowDataEntities==null ) || Boolean.FALSE.equals(flowEdgesEntities.isEmpty() || flowEdgesEntities==null) ){ + flowDataRepository.deleteAll(flowDataEntities); + flowEdgesRepository.deleteAll(flowEdgesEntities); + callEntity.setInitialForm(null); + callEntity.setFinalForm(null); + callRepository.save(callEntity); + } FormEntity formEntity=convertFormRequestToFormEntity(callId,formRequest); return convertFormEntityToFormResponseBean(formEntity); } @@ -74,14 +90,55 @@ public class FormDao { throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.REQUIRED_PARAMETER_NOT_FOUND_FOR_FORM)); } } - public FormResponseBean updateForm(Long formId, FormRequest formRequest){ + public FormResponseBean updateForm(Long formId, FormRequest formRequest,Boolean forceDeleteFlow){ + ContentRequestBean contentRequestBean2=null; FormEntity formEntity = validateForm(formId); - callDao.validateUpdate(formEntity.getCall()); - Utils.setIfUpdated(formEntity::getLabel,formEntity::setLabel,formRequest.getLabel()); - Utils.setIfUpdated(formEntity::getContent,formEntity::setContent,setContentResponseBean(formRequest.getContent())); - formEntity.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); - formEntity=saveFormEntity(formEntity); - return convertFormEntityToFormResponseBean(formEntity); + callDao.validateUpdate(formEntity.getCall()); + FlowDataEntity flowDataEntity=flowDataRepository.findByFormIdAndCallId(formEntity.getId(),formEntity.getCall().getId()); + String choosenField=flowDataEntity.getChoosenField(); + List contentRequestBean=Utils.convertJsonStringToList(formEntity.getContent(),ContentRequestBean.class); + for (ContentRequestBean contentRequestBean1:contentRequestBean){ + if(Boolean.TRUE.equals(contentRequestBean1.getId().equals(choosenField))){ + contentRequestBean2=contentRequestBean1; + break; + } + } + if (contentRequestBean2 != null) { + List settingRequestBeansDB = contentRequestBean2.getSettings(); + for (ContentRequestBean contentRequestBeanRequest : formRequest.getContent()) { + if (contentRequestBeanRequest.getId().equals(contentRequestBean2.getId())) { + for (SettingRequestBean settingRequestBeanRequest : contentRequestBeanRequest.getSettings()) { + for (SettingRequestBean settingRequestBeanDB : settingRequestBeansDB) { + if (settingRequestBeanRequest.getName().equals(settingRequestBeanDB.getName())) { + if (!settingRequestBeanRequest.getValue().equals(settingRequestBeanDB.getValue())) { + if(Boolean.TRUE.equals(forceDeleteFlow)) { + Utils.setIfUpdated(formEntity::getLabel,formEntity::setLabel,formRequest.getLabel()); + Utils.setIfUpdated(formEntity::getContent,formEntity::setContent,setContentResponseBean(formRequest.getContent())); + formEntity.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + formEntity=saveFormEntity(formEntity); + List flowDataEntities=flowDataRepository.findByCallId(formEntity.getCall().getId()); + List flowEdgesEntities=flowEdgesRepository.findByCallId(formEntity.getCall().getId()); + flowDataRepository.deleteAll(flowDataEntities); + flowEdgesRepository.deleteAll(flowEdgesEntities); + CallEntity callEntity=formEntity.getCall(); + callEntity.setInitialForm(null); + callEntity.setFinalForm(null); + callRepository.save(callEntity); + return convertFormEntityToFormResponseBean(formEntity); + }else { + throw new CustomValidationException( + Status.BAD_REQUEST, + Translator.toLocale(GepafinConstant.UPDATING_FORM_VALUE_IMPACT_ON_FLOW, choosenField) + ); + } + } + } + } + } + } + } + } + return null; } public FormEntity validateForm(Long formId) { @@ -96,6 +153,14 @@ public class FormDao { } public void deleteFormById(Long formId){ FormEntity formEntity = validateForm(formId); + List flowDataEntities=flowDataRepository.findByCallId(formEntity.getCall().getId()); + List flowEdgesEntities=flowEdgesRepository.findByCallId(formEntity.getCall().getId()); + flowDataRepository.deleteAll(flowDataEntities); + flowEdgesRepository.deleteAll(flowEdgesEntities); + CallEntity callEntity=formEntity.getCall(); + callEntity.setFinalForm(null); + callEntity.setInitialForm(null); + callRepository.save(callEntity); formRepository.delete(formEntity); } public List getFormsByCallId(Long callId){ diff --git a/src/main/java/net/gepafin/tendermanagement/enums/ApplicationStatusTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/ApplicationStatusTypeEnum.java index df120d29..08b436c8 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/ApplicationStatusTypeEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/ApplicationStatusTypeEnum.java @@ -6,8 +6,7 @@ public enum ApplicationStatusTypeEnum { DRAFT("DRAFT"), SUBMIT("SUBMIT"), - EXPIRED("EXPIRED"), - READY_TO_SUBMIT("READY_TO_SUBMIT"); + DISCARD("DISCARD"); private String value; diff --git a/src/main/java/net/gepafin/tendermanagement/service/FormService.java b/src/main/java/net/gepafin/tendermanagement/service/FormService.java index cf896b73..84447ebb 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/FormService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/FormService.java @@ -14,7 +14,7 @@ public interface FormService { public FormResponseBean createForm(HttpServletRequest request,Long callId,FormRequest formRequest); - public FormResponseBean updateForm(HttpServletRequest request, Long formId, FormRequest formRequest); + public FormResponseBean updateForm(HttpServletRequest request, Long formId, FormRequest formRequest,Boolean forceDeleteFlow); public FormResponseBean getFormById(HttpServletRequest request, Long formId); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/FormServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/FormServiceImpl.java index ee56bf88..9d04dbc5 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/FormServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/FormServiceImpl.java @@ -26,8 +26,8 @@ public class FormServiceImpl implements FormService { } @Override - public FormResponseBean updateForm(HttpServletRequest request, Long formId, FormRequest formRequest) { - return formDao.updateForm(formId,formRequest); + public FormResponseBean updateForm(HttpServletRequest request, Long formId, FormRequest formRequest,Boolean forceDeleteFlow) { + return formDao.updateForm(formId,formRequest,forceDeleteFlow); } @Override 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 63d813e6..61115f63 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 @@ -14,6 +14,7 @@ import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -33,6 +34,7 @@ public interface FlowApi { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @PutMapping(value = "/call/{callId}", produces = { "application/json" }) + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN')") 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/FormApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/FormApi.java index 001de040..04417439 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/FormApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/FormApi.java @@ -13,6 +13,7 @@ import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -31,6 +32,7 @@ public interface FormApi { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @PostMapping(value = "/call/{callId}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN')") public ResponseEntity> createForm(HttpServletRequest request,@Parameter(description = "The call ID", required = true) @PathVariable("callId") Long callId, @Parameter(description = "form request object", required = true) @Valid @RequestBody FormRequest formRequest); @@ -49,7 +51,7 @@ public interface FormApi { produces = { "application/json" }) ResponseEntity> updateForm(HttpServletRequest request, @Parameter(description = "The form ID", required = true) @PathVariable("formId") Long formId, - @Parameter(description = "form request object", required = true) @Valid @RequestBody FormRequest formRequest); + @Parameter(description = "form request object", required = true) @Valid @RequestBody FormRequest formRequest,@Parameter(description = "force delete flow ",required = true)@RequestParam(value = "forceDeleteFlow",required = true)Boolean forceDeleteFlow); @Operation(summary = "Api to get form by id", responses = { diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FormApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FormApiController.java index 72e8bd2b..5b8b54a5 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FormApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FormApiController.java @@ -32,8 +32,8 @@ public class FormApiController implements FormApi { } @Override - public ResponseEntity> updateForm(HttpServletRequest request, Long formId, FormRequest formRequest) { - FormResponseBean formResponseBean = formService.updateForm(request, formId, formRequest); + public ResponseEntity> updateForm(HttpServletRequest request, Long formId, FormRequest formRequest,Boolean forceDeleteFlow) { + FormResponseBean formResponseBean = formService.updateForm(request, formId, formRequest,forceDeleteFlow); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(formResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.FORM_UPDATED_SUCCESSFULLY))); } diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index cb423966..b0449f1e 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -166,3 +166,6 @@ validation.message=Validation messages. action.required=Action field required. call.not.published=Call is not published. application.form.not.found=Application form not found. + +updating.form.value.impact.on.flow=Updating this value of form {0} can make impact on flow. + diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 0c47f666..7b464832 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -160,4 +160,6 @@ flow.not.found=Flow not found. validation.message=Messaggi di convalida. action.required=Campo azione obbligatorio. call.not.published=La chiamata non č stata pubblicata. -application.form.not.found=Modulo di domanda non trovato. \ No newline at end of file +application.form.not.found=Modulo di domanda non trovato. + +updating.form.value.impact.on.flow=L'aggiornamento di questo valore del modulo {0} puņ avere un impatto sul flusso. \ No newline at end of file