From 528d266cb8e6d910db2ca253cff848b089342fce Mon Sep 17 00:00:00 2001 From: harish Date: Mon, 28 Oct 2024 21:09:33 +0530 Subject: [PATCH] Updated Application Evaluation API to return single object response instead of array --- .../constants/GepafinConstant.java | 2 +- .../dao/ApplicationEvaluationDao.java | 59 ++++++++++--------- .../ApplicationEvaluationRepository.java | 4 +- .../AssignedApplicationsRepository.java | 14 ++--- .../service/ApplicationEvaluationService.java | 2 +- .../ApplicationEvaluationServiceImpl.java | 47 ++++----------- .../rest/api/ApplicationEvaluationApi.java | 12 ++-- .../ApplicationEvaluationApiController.java | 9 ++- src/main/resources/message_en.properties | 1 + src/main/resources/message_it.properties | 1 + 10 files changed, 61 insertions(+), 90 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index e53385fa..fff61dcb 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -242,7 +242,7 @@ public class GepafinConstant { public static final String APPLICATION_EVALUATION_STATUS_UPDATED_SUCCESSFULLY = "application.evaluation.status.updated.successfully"; public static final String ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG = "assigned.application.not.found.with.id"; public static final String EITHER_APPLICATION_OR_ASSIGNED_APPLICATION_ID_REQUIRED_MSG = "either.application.or.assigned.application.id.required"; - + public static final String EVALUATION_ALREADY_EXISTS_MSG = "evaluation.already.exists"; public static final String APPLICATION_ASSIGNED= "application.assigned.success.msg"; public static final String APPLICATION_ALREADY_ASSIGNED = "application.already.assigned.msg"; public static final String ASSIGNED_APPLICATION_NOT_FOUND_MSG="aasigned.application.not.found"; diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 656f4777..c1a47b63 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -14,6 +14,7 @@ import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.service.ApplicationService; import net.gepafin.tendermanagement.service.UserService; import net.gepafin.tendermanagement.util.Utils; +import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; @@ -93,17 +94,8 @@ public class ApplicationEvaluationDao { private void populateBasicDetails(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response) { response.setId(entity.getId()); response.setApplicationId(entity.getApplicationId()); - - List assignedApplicationsList = - assignedApplicationsRepository.findAllByApplicationId(entity.getApplicationId()); - - if (assignedApplicationsList.isEmpty()) { - response.setAssignedApplicationId(null); - } else { -// AssignedApplicationsEntity assignedApplications = assignedApplicationsList.get(0); - response.setAssignedApplicationId(entity.getAssignedApplicationsEntity().getId()); - } - + AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(entity.getApplicationId()).orElse(null); + response.setAssignedApplicationId(assignedApplications.getId()); response.setNote(entity.getNote()); response.setStatus(ApplicationEvaluationStatusTypeEnum.valueOf(entity.getStatus())); response.setCreatedDate(entity.getCreatedDate()); @@ -111,6 +103,7 @@ public class ApplicationEvaluationDao { } + private void setCriteriaResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List evaluationCriterias) { List criteriaResponsesFromEntity = entity.getCriteria() != null ? Utils.convertJsonToList(entity.getCriteria(), new TypeReference>() { @@ -341,7 +334,14 @@ public class ApplicationEvaluationDao { public ApplicationEvaluationResponse createOrUpdateApplicationEvaluation(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) { Optional existingEntityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplciationId); ApplicationEvaluationEntity entity; - + Optional assignedApplications=assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplciationId); + {if(assignedApplications.isPresent()) + if (applicationEvaluationRepository.existsByApplicationIdAndIsDeletedFalse(assignedApplications.get().getApplication().getId())) { + throw new CustomValidationException( + Status.BAD_REQUEST, + GepafinConstant.EVALUATION_ALREADY_EXISTS_MSG + ); + }} if (existingEntityOptional.isPresent()) { entity = existingEntityOptional.get(); entity.setCriteria(Utils.convertObjectToJson(filterNonNullCriteria(processCriteria(entity, req)))); @@ -508,26 +508,27 @@ public class ApplicationEvaluationDao { } - public List getApplicationEvaluationByApplicationId(UserEntity user, Long applicationId, Long assignedApplicationId) { - if (applicationId != null && assignedApplicationId == null) { - applicationService.validateApplication(applicationId); - List evaluationEntities = applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationId); - return evaluationEntities.stream() - .map(this::convertToResponse) - .collect(Collectors.toList()); + public ApplicationEvaluationResponse getApplicationEvaluationByApplicationId(UserEntity user, Long applicationId, Long assignedApplicationId) { + + applicationService.validateApplication(applicationId); + + Optional entityOptional; + + if (applicationId != null && assignedApplicationId != null) { + entityOptional = applicationEvaluationRepository.findByApplicationIdAndAssignedApplicationsEntity_IdAndIsDeletedFalse(applicationId, assignedApplicationId); + } else if (applicationId != null) { + entityOptional = applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationId); + } else if (assignedApplicationId != null) { + entityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplicationId); + } else { + entityOptional = applicationEvaluationRepository.findFirstByIsDeletedFalseOrderByCreatedDateDesc(); } - - Optional entityOptional = - (applicationId != null && assignedApplicationId != null) - ? applicationEvaluationRepository.findByApplicationIdAndAssignedApplicationsEntity_IdAndIsDeletedFalse(applicationId, assignedApplicationId) - : applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplicationId); - - return entityOptional - .map(entity -> Collections.singletonList(convertToResponse(entity))) - .orElseGet(() -> Collections.singletonList(getEvaluationResponseByApplicationid(user, applicationId, assignedApplicationId))); + return entityOptional.map(this::convertToResponse) + .orElseGet(() -> { + return getEvaluationResponseByApplicationid(user, applicationId, assignedApplicationId); + }); } - public ApplicationEvaluationResponse getEvaluationResponseByApplicationid(UserEntity user, Long applicationId, Long assignedApplicationId) { ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity(); ApplicationEvaluationResponse response = new ApplicationEvaluationResponse(); diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationRepository.java index 69aa74fe..9ec88ffa 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationRepository.java @@ -12,12 +12,14 @@ import java.util.Optional; @Repository public interface ApplicationEvaluationRepository extends JpaRepository { - List findByApplicationIdAndIsDeletedFalse(Long applicationId); + Optional findByApplicationIdAndIsDeletedFalse(Long applicationId); Optional findByIdAndIsDeletedFalse(Long id); Optional findByAssignedApplicationsEntity_IdAndIsDeletedFalse(Long assignedApplicationId); Optional findByApplicationIdAndAssignedApplicationsEntity_IdAndIsDeletedFalse(Long applicationId, Long assignedApplicationId); Optional findFirstByIsDeletedFalseOrderByCreatedDateDesc(); + boolean existsByApplicationIdAndIsDeletedFalse(Long applicationId); + } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java index a2ceec9e..b9c02945 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java @@ -13,15 +13,11 @@ import java.util.Optional; public interface AssignedApplicationsRepository extends JpaRepository, JpaSpecificationExecutor{ Optional findByApplicationIdAndIsDeletedFalse(Long applicationId); Optional findByIdAndIsDeletedFalse(Long id); - @Query("SELECT aa FROM AssignedApplicationsEntity aa WHERE aa.isDeleted = false AND aa.application.id = :applicationId") - List findAllByApplicationId(@Param("applicationId") Long applicationId); - - @Query("SELECT aa FROM AssignedApplicationsEntity aa WHERE aa.isDeleted = false AND aa.application.id = :applicationId AND aa.id = :assignedApplicationId") - Optional findByApplicationIdAndAssignedApplicationId( - @Param("applicationId") Long applicationId, - @Param("assignedApplicationId") Long assignedApplicationId); - @Query("SELECT aa FROM AssignedApplicationsEntity aa WHERE aa.isDeleted = false AND aa.id = :assignedApplicationId") - Optional findByAssignedApplicationId(@Param("assignedApplicationId") Long assignedApplicationId); + @Query("SELECT aa FROM AssignedApplicationsEntity aa WHERE aa.isDeleted = false " + + "AND (:applicationId IS NULL OR aa.application.id = :applicationId) " + + "AND (:id IS NULL OR aa.id = :id)") + Optional findByApplicationIdOrId(@Param("applicationId") Long applicationId, + @Param("id") Long id); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java b/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java index 04766777..a8b8f419 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java @@ -14,7 +14,7 @@ public interface ApplicationEvaluationService { ApplicationEvaluationResponse createOrUpdateApplicationEvaluation(HttpServletRequest request, ApplicationEvaluationRequest applicationEvaluationRequest,Long assignedApplicationsId); void deleteApplicationEvaluation(HttpServletRequest request,Long id); - List getApplicationEvaluationByApplicationId(HttpServletRequest request,Long applicationId,Long assignedApplicationId); + ApplicationEvaluationResponse getApplicationEvaluationByApplicationId(HttpServletRequest request,Long applicationId,Long assignedApplicationId); ApplicationEvaluationResponse updateApplicationEvaluationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedEvaluationStatus status); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java index e0fa1133..a5e0c8c4 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java @@ -48,7 +48,7 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe @Override @Transactional(readOnly = true) - public List getApplicationEvaluationByApplicationId( + public ApplicationEvaluationResponse getApplicationEvaluationByApplicationId( HttpServletRequest request, Long applicationId, Long assignedApplicationId) { if (applicationId == null && assignedApplicationId == null) { throw new CustomValidationException( @@ -56,45 +56,20 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe Translator.toLocale(GepafinConstant.EITHER_APPLICATION_OR_ASSIGNED_APPLICATION_ID_REQUIRED_MSG) ); } - AssignedApplicationsEntity assignedApplications; + Optional assignedApplicationsOptional = + assignedApplicationsRepository.findByApplicationIdOrId(applicationId, assignedApplicationId); - if (applicationId != null && assignedApplicationId != null) { - assignedApplications = assignedApplicationsRepository - .findByApplicationIdAndAssignedApplicationId(applicationId, assignedApplicationId) - .orElseThrow(() -> new CustomValidationException( - Status.BAD_REQUEST, - Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG) - )); - } else if (assignedApplicationId != null) { - assignedApplications = assignedApplicationsRepository - .findByAssignedApplicationId(assignedApplicationId) - .orElseThrow(() -> new CustomValidationException( - Status.BAD_REQUEST, - Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG) - )); - } else { - List assignedApplicationsList = assignedApplicationsRepository - .findAllByApplicationId(applicationId); - - if (assignedApplicationsList.isEmpty()) { - throw new CustomValidationException( + AssignedApplicationsEntity assignedApplications = assignedApplicationsOptional + .orElseThrow(() -> new CustomValidationException( Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG) - ); - } - - assignedApplications = assignedApplicationsList.get(0); - } - + )); UserEntity user = validator.validatePreInstructor(request, assignedApplications.getUserId()); - if (applicationId != null && assignedApplicationId == null) { - return applicationEvaluationDao.getApplicationEvaluationByApplicationId(user, assignedApplications.getApplication().getId(), null); - } - - if (applicationId != null && assignedApplicationId != null) { - return applicationEvaluationDao.getApplicationEvaluationByApplicationId(user, assignedApplications.getApplication().getId(), assignedApplications.getId()); - } - return applicationEvaluationDao.getApplicationEvaluationByApplicationId(user, null, assignedApplications.getId()); + return applicationEvaluationDao.getApplicationEvaluationByApplicationId( + user, + assignedApplications.getApplication().getId(), + assignedApplications.getId() + ); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java index b6bc4cfb..42455042 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java @@ -39,21 +39,17 @@ public interface ApplicationEvaluationApi { @Parameter(required = true) @PathVariable("assignedApplicationsId") Long assignedApplicationsId, @Parameter( required = true) @Valid @RequestBody ApplicationEvaluationRequest evaluationRequest); - @Operation( - summary = "API to get ApplicationEvaluation data for evaluation process", + @Operation(summary = "API to get ApplicationEvaluation data for evaluation process", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { - @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), - @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { - @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) + @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })) }) @GetMapping(value = "/application", produces = MediaType.APPLICATION_JSON_VALUE) - ResponseEntity>> getApplicationEvaluationByApplicationId( + ResponseEntity> getApplicationEvaluationByApplicationId( HttpServletRequest request, @Parameter(required = false) @RequestParam(value = "applicationId", required = false) Long applicationId, - @Parameter(required = false) @RequestParam(value = "assignedApplicationId", required = false) Long assignedApplicationId); - + @Parameter( required = false) @RequestParam(value = "assignedApplicationId", required = false) Long assignedApplicationId); @Operation(summary = "API to delete ApplicationEvaluation", responses = { @ApiResponse(responseCode = "200", description = "OK"), diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java index 18614cce..5e31135a 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java @@ -38,14 +38,13 @@ public class ApplicationEvaluationApiController implements ApplicationEvaluation } @Override - public ResponseEntity>> getApplicationEvaluationByApplicationId( + public ResponseEntity> getApplicationEvaluationByApplicationId( HttpServletRequest request, Long applicationId, Long assignedApplicationId) { - List responseList = - applicationEvaluationService.getApplicationEvaluationByApplicationId(request, applicationId, assignedApplicationId); - + ApplicationEvaluationResponse response = null; + response = applicationEvaluationService.getApplicationEvaluationByApplicationId(request, applicationId,assignedApplicationId); return ResponseEntity.status(HttpStatus.OK) - .body(new Response<>(responseList, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_FETCHED_SUCCESSFULLY))); + .body(new Response<>(response, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_FETCHED_SUCCESSFULLY))); } diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index e47a62c8..cb1abbef 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -263,6 +263,7 @@ application.evaluation.status.updated.successfully=Application evaluation status evaluationCriteria.invalid=This evaluation criterion does not belong to the current call. assigned.application.not.found.with.id=Assigned application with this application ID not found either.application.or.assigned.application.id.required=Either applicationId or assignedApplicationId is required. +evaluation.already.exists=An application evaluation already exists for this application ID. # Hub Messages hub_create_success=Hub created successfully diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 1eaa302f..6a8e4a2f 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -261,6 +261,7 @@ evaluations.fetched.successfully = Tutte le valutazioni delle applicazioni recup application.evaluation.status.updated.successfully=Stato della valutazione dell'applicazione aggiornato con successo. assigned.application.not.found.with.id=Applicazione assegnata con questo ID dell'applicazione non trovata either.application.or.assigned.application.id.required=È richiesto almeno uno tra applicationId o assignedApplicationId. +evaluation.already.exists=Una valutazione dell'applicazione esiste già per questo ID applicazione. application.assigned.success.msg =Domanda assegnata con successo application.already.assigned.msg =La domanda � gi� assegnata