From d2fed5e1688ab1967007a84c1badaf3898fa05af Mon Sep 17 00:00:00 2001 From: rajesh Date: Tue, 17 Sep 2024 16:15:15 +0530 Subject: [PATCH] Applied validation --- .../tendermanagement/constants/GepafinConstant.java | 4 ++++ .../gepafin/tendermanagement/dao/ApplicationDao.java | 8 ++++++-- .../net/gepafin/tendermanagement/dao/CallDao.java | 12 +++++++++++- .../net/gepafin/tendermanagement/dao/FlowDao.java | 9 +++++++++ .../net/gepafin/tendermanagement/dao/FormDao.java | 4 ++++ .../request/ApplicationFormFieldRequestBean.java | 4 +--- .../repositories/CallRepository.java | 2 ++ .../tendermanagement/service/CallService.java | 4 +++- .../service/impl/CallServiceImpl.java | 7 ++++++- .../tendermanagement/util/FieldValidator.java | 3 +++ .../web/rest/api/ApplicationApi.java | 2 +- .../tendermanagement/web/rest/api/FaqApi.java | 2 +- src/main/resources/message_en.properties | 3 +++ src/main/resources/message_it.properties | 3 +++ 14 files changed, 57 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 719efd30..3d8a17d5 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -128,4 +128,8 @@ public class GepafinConstant { public static final String FLOW_NOT_FOUND = "flow.not.found"; public static final String VALIDATION_MESSAGE = "validation.message"; public static final String ACTION_REQUIRED = "action.required"; + public static final String CALL_NOT_PUBLISHED="call.not.published"; + 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"; + } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index da057631..d6e5e77a 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -50,8 +50,11 @@ public class ApplicationDao { public ApplicationResponseBean createApplication(ApplicationRequestBean applicationRequestBean, UserEntity userEntity, Long formId,Long applicationId) { FormEntity formEntity = formService.validateForm(formId); - CallEntity call = callService.validateCall(formEntity.getCall().getId()); + CallEntity call = callService.validatePublishedCall(formEntity.getCall().getId()); ApplicationEntity applicationEntity = validateApplication(applicationId); + if(Boolean.TRUE.equals(applicationEntity.getStatus().equals(ApplicationStatusTypeEnum.SUBMIT.getValue()))){ + throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.APPLICATION_ALREADY_SUBMITTED)); + } formService.validateFormField(applicationRequestBean.getFormFields(),applicationEntity,formEntity); ApplicationFormEntity applicationFormEntity = getApplicationFormOrCreate(formEntity, applicationEntity); createOrUpdateMultipleFormFields(applicationRequestBean.getFormFields(), applicationFormEntity); @@ -326,7 +329,8 @@ public class ApplicationDao { public ApplicationResponse createApplicationByCallId(ApplicationRequest applicationRequest,Long callId,UserEntity userEntity){ CallEntity call=callService.validateCall(callId); - checkIfApplicationExists(call,userEntity); + call = callService.validatePublishedCall(call.getId()); + checkIfApplicationExists(call,userEntity); ApplicationEntity applicationEntity=createApplicationEntity(userEntity,call); applicationEntity.setComments(applicationRequest.getComments()); applicationEntity=saveApplicationEntity(applicationEntity); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index 18f56347..8861ccbc 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -387,7 +387,7 @@ public class CallDao { return createCallResponseBean; } - private void validateUpdate(CallEntity callEntity) { + public void validateUpdate(CallEntity callEntity) { if(callEntity.getStatus().equals(CallStatusEnum.PUBLISH.getValue())) { throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.PUBLISHED_CALL_NOT_UPDATE)); @@ -622,5 +622,15 @@ public class CallDao { } } + public CallEntity validatePublishedCall(Long callId) { + CallEntity callEntity= callRepository + .findByIdAndStatus(callId, CallStatusEnum.PUBLISH.getValue()); + if(callEntity==null){ + throw new ResourceNotFoundException( + Status.NOT_FOUND, + Translator.toLocale(GepafinConstant.CALL_NOT_PUBLISHED)); + } + return callEntity; + } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java index 8b6931bc..0ded1ac5 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java @@ -21,6 +21,7 @@ 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.util.FieldValidator; 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; @@ -49,6 +50,9 @@ public class FlowDao { @Autowired private FormService formService; + @Autowired + private CallDao callDao; + public FlowResponseBean createOrUpdateFlow(FlowRequestBean flowRequestBean, Long callId) { validateFlowRequestBean(flowRequestBean); CallEntity call = callService.validateCall(callId); @@ -62,12 +66,17 @@ public class FlowDao { } public void validateFlowRequestBean(FlowRequestBean flowRequestBean){ + if (FieldValidator.isNullOrZero(flowRequestBean.getInitialForm()) || FieldValidator.isNullOrZero(flowRequestBean.getFinalForm())) { + throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.INITAL_AND_FINAL_FORM_CANNOT_NULL)); + } + if (flowRequestBean.getFlowEdges() == null || flowRequestBean.getFlowEdges().isEmpty()) { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.FLOW_REQUEST_NOT_PROPER)); } } public void checkIfFlowExits(CallEntity call) { + callDao.validateUpdate(call); List flowDataEntities = flowDataRepository.findByCallId(call.getId()); List flowEdgesEntities = flowEdgesRepository.findByCallId(call.getId()); if (Boolean.FALSE.equals(flowDataEntities.isEmpty()) || Boolean.FALSE.equals(flowEdgesEntities.isEmpty())) { diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java index f0c6289c..7acec284 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java @@ -38,6 +38,9 @@ public class FormDao { @Autowired private ApplicationFormRepository applicationFormRepository; + @Autowired + private CallDao callDao; + public FormEntity saveFormEntity(FormEntity formEntity){ formEntity=formRepository.save(formEntity); return formEntity; @@ -72,6 +75,7 @@ public class FormDao { } public FormResponseBean updateForm(Long formId, FormRequest formRequest){ 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())); diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationFormFieldRequestBean.java b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationFormFieldRequestBean.java index 065c2f3f..029eb470 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationFormFieldRequestBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationFormFieldRequestBean.java @@ -6,9 +6,7 @@ import net.gepafin.tendermanagement.entities.ApplicationFormEntity; @Data public class ApplicationFormFieldRequestBean { - - private Long id; - + private String fieldId; private String fieldValue; diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java index 23f83f04..6fa6bbde 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java @@ -11,4 +11,6 @@ public interface CallRepository extends JpaRepository { public CallEntity findByIdAndStatusNotIn(Long id, List status); List findByStatusIn(List callStatus); + + public CallEntity findByIdAndStatus(Long id,String status); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/CallService.java b/src/main/java/net/gepafin/tendermanagement/service/CallService.java index 500eb854..aa6ea872 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/CallService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/CallService.java @@ -31,4 +31,6 @@ public interface CallService { CallEntity validateCall(Long callId); -} + CallEntity validatePublishedCall(Long callId); + + } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java index 5ba8952d..a6a6a901 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java @@ -87,4 +87,9 @@ public class CallServiceImpl implements CallService { public CallEntity validateCall(Long callId) { return callDao.validateCall(callId); } -} + + @Override + public CallEntity validatePublishedCall(Long callId) { + return callDao.validatePublishedCall(callId); + } + } diff --git a/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java index c9b05f8e..18a1f042 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java +++ b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java @@ -62,4 +62,7 @@ public class FieldValidator { errors.add(errorMessage); return this; } + public static boolean isNullOrZero(Long value) { + return value == null || value == 0L; + } } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java index 879691e4..9499bfe0 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java @@ -28,7 +28,7 @@ import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; @Validated public interface ApplicationApi { - @Operation(summary = "Api to create application form", + @Operation(summary = "Api to create or update application form", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/FaqApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/FaqApi.java index e174621d..f44491a8 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/FaqApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/FaqApi.java @@ -23,7 +23,7 @@ public interface FaqApi { @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = "application/json", examples = @ExampleObject(value = "{ \"error\": \"Not Found\" }"))) }) @PostMapping(value = "/call/{callId}", consumes = "application/json", produces = "application/json") - ResponseEntity> createFaq(HttpServletRequest request, @Parameter(description = "evaluation criteria id", required = true) + ResponseEntity> createFaq(HttpServletRequest request, @Parameter(description = "call id", required = true) @PathVariable("callId") Long callId, @Valid @RequestBody FaqReq faqRequest); @Operation(summary = "API to get FAQ by id", diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 536c0b56..b1ec7f96 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -139,6 +139,7 @@ flow.created.successfully=Flow created successfully. flow.fetched.successfully=Flow fetched successfully. flow.already.exists= Flow already exist for this call. flow.request.not.complete=Flow request is not complete. +initial.and.final.form.cannot.null=Initial and final form cannot be null. # Application related messages application.created.success=Application successfully created. @@ -149,6 +150,7 @@ application.not.found=Application not found with the given ID. application.form.field.not.found=Application form field not found. Form.not.matches.to.call.initial.form=Form id does not matches to initial form id of call. application.already.exists=Application already exists for this call. +application.already.submitted=Application is already submitted. #Validation related messages validation.field.required=Field {0} is required. @@ -162,3 +164,4 @@ current.form.incomplete=Current form is not filled. flow.not.found=Flow not found. validation.message=Validation messages. action.required=Action field required. +call.not.published=Call is not published. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 55a645b2..82bff2ee 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -135,6 +135,7 @@ flow.created.successfully=Flusso creato con successo. flow.fetched.successfully=Flusso recuperato con successo. flow.already.exists= Il flusso esiste gi� per questa chiamata. flow.request.not.complete=La richiesta di flusso non � completa. +initial.and.final.form.cannot.null=La forma iniziale e finale non possono essere nulle. # Application related messages application.created.success=Applicazione creata con successo. @@ -145,6 +146,7 @@ application.not.found=Applicazione non trovata con l'ID fornito. application.form.field.not.found=Campo del modulo di domanda non trovato. Form.not.matches.to.call.initial.form=L'ID del modulo non corrisponde all'ID del modulo iniziale della chiamata. application.already.exists=L'applicazione esiste gi� per questa chiamata. +application.already.submitted=La domanda è già stata inviata. #Validation related messages validation.field.required=Il campo {0} � obbligatorio. @@ -157,3 +159,4 @@ current.form.incomplete=il modulo corrente non � compilato flow.not.found=Flow not found. validation.message=Messaggi di convalida. action.required=Campo azione obbligatorio. +call.not.published=La chiamata non è stata pubblicata. \ No newline at end of file