Updated Application Evaluation API to return single object response instead of array

This commit is contained in:
harish
2024-10-28 21:09:33 +05:30
parent 1031cfc7b5
commit 528d266cb8
10 changed files with 61 additions and 90 deletions

View File

@@ -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 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 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 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_ASSIGNED= "application.assigned.success.msg";
public static final String APPLICATION_ALREADY_ASSIGNED = "application.already.assigned.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"; public static final String ASSIGNED_APPLICATION_NOT_FOUND_MSG="aasigned.application.not.found";

View File

@@ -14,6 +14,7 @@ import net.gepafin.tendermanagement.repositories.*;
import net.gepafin.tendermanagement.service.ApplicationService; import net.gepafin.tendermanagement.service.ApplicationService;
import net.gepafin.tendermanagement.service.UserService; import net.gepafin.tendermanagement.service.UserService;
import net.gepafin.tendermanagement.util.Utils; 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.ResourceNotFoundException;
import net.gepafin.tendermanagement.web.rest.api.errors.Status; import net.gepafin.tendermanagement.web.rest.api.errors.Status;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -93,17 +94,8 @@ public class ApplicationEvaluationDao {
private void populateBasicDetails(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response) { private void populateBasicDetails(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response) {
response.setId(entity.getId()); response.setId(entity.getId());
response.setApplicationId(entity.getApplicationId()); response.setApplicationId(entity.getApplicationId());
AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(entity.getApplicationId()).orElse(null);
List<AssignedApplicationsEntity> assignedApplicationsList = response.setAssignedApplicationId(assignedApplications.getId());
assignedApplicationsRepository.findAllByApplicationId(entity.getApplicationId());
if (assignedApplicationsList.isEmpty()) {
response.setAssignedApplicationId(null);
} else {
// AssignedApplicationsEntity assignedApplications = assignedApplicationsList.get(0);
response.setAssignedApplicationId(entity.getAssignedApplicationsEntity().getId());
}
response.setNote(entity.getNote()); response.setNote(entity.getNote());
response.setStatus(ApplicationEvaluationStatusTypeEnum.valueOf(entity.getStatus())); response.setStatus(ApplicationEvaluationStatusTypeEnum.valueOf(entity.getStatus()));
response.setCreatedDate(entity.getCreatedDate()); response.setCreatedDate(entity.getCreatedDate());
@@ -111,6 +103,7 @@ public class ApplicationEvaluationDao {
} }
private void setCriteriaResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<EvaluationCriteriaEntity> evaluationCriterias) { private void setCriteriaResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<EvaluationCriteriaEntity> evaluationCriterias) {
List<CriteriaResponse> criteriaResponsesFromEntity = entity.getCriteria() != null List<CriteriaResponse> criteriaResponsesFromEntity = entity.getCriteria() != null
? Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() { ? Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {
@@ -341,7 +334,14 @@ public class ApplicationEvaluationDao {
public ApplicationEvaluationResponse createOrUpdateApplicationEvaluation(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) { public ApplicationEvaluationResponse createOrUpdateApplicationEvaluation(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) {
Optional<ApplicationEvaluationEntity> existingEntityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplciationId); Optional<ApplicationEvaluationEntity> existingEntityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplciationId);
ApplicationEvaluationEntity entity; ApplicationEvaluationEntity entity;
Optional<AssignedApplicationsEntity> 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()) { if (existingEntityOptional.isPresent()) {
entity = existingEntityOptional.get(); entity = existingEntityOptional.get();
entity.setCriteria(Utils.convertObjectToJson(filterNonNullCriteria(processCriteria(entity, req)))); entity.setCriteria(Utils.convertObjectToJson(filterNonNullCriteria(processCriteria(entity, req))));
@@ -508,26 +508,27 @@ public class ApplicationEvaluationDao {
} }
public List<ApplicationEvaluationResponse> getApplicationEvaluationByApplicationId(UserEntity user, Long applicationId, Long assignedApplicationId) { public ApplicationEvaluationResponse getApplicationEvaluationByApplicationId(UserEntity user, Long applicationId, Long assignedApplicationId) {
if (applicationId != null && assignedApplicationId == null) {
applicationService.validateApplication(applicationId); applicationService.validateApplication(applicationId);
List<ApplicationEvaluationEntity> evaluationEntities = applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationId);
return evaluationEntities.stream() Optional<ApplicationEvaluationEntity> entityOptional;
.map(this::convertToResponse)
.collect(Collectors.toList()); 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();
} }
return entityOptional.map(this::convertToResponse)
Optional<ApplicationEvaluationEntity> entityOptional = .orElseGet(() -> {
(applicationId != null && assignedApplicationId != null) return getEvaluationResponseByApplicationid(user, applicationId, assignedApplicationId);
? applicationEvaluationRepository.findByApplicationIdAndAssignedApplicationsEntity_IdAndIsDeletedFalse(applicationId, assignedApplicationId) });
: applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplicationId);
return entityOptional
.map(entity -> Collections.singletonList(convertToResponse(entity)))
.orElseGet(() -> Collections.singletonList(getEvaluationResponseByApplicationid(user, applicationId, assignedApplicationId)));
} }
public ApplicationEvaluationResponse getEvaluationResponseByApplicationid(UserEntity user, Long applicationId, Long assignedApplicationId) { public ApplicationEvaluationResponse getEvaluationResponseByApplicationid(UserEntity user, Long applicationId, Long assignedApplicationId) {
ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity(); ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity();
ApplicationEvaluationResponse response = new ApplicationEvaluationResponse(); ApplicationEvaluationResponse response = new ApplicationEvaluationResponse();

View File

@@ -12,12 +12,14 @@ import java.util.Optional;
@Repository @Repository
public interface ApplicationEvaluationRepository extends JpaRepository<ApplicationEvaluationEntity, Long> { public interface ApplicationEvaluationRepository extends JpaRepository<ApplicationEvaluationEntity, Long> {
List<ApplicationEvaluationEntity> findByApplicationIdAndIsDeletedFalse(Long applicationId); Optional<ApplicationEvaluationEntity> findByApplicationIdAndIsDeletedFalse(Long applicationId);
Optional<ApplicationEvaluationEntity> findByIdAndIsDeletedFalse(Long id); Optional<ApplicationEvaluationEntity> findByIdAndIsDeletedFalse(Long id);
Optional<ApplicationEvaluationEntity> findByAssignedApplicationsEntity_IdAndIsDeletedFalse(Long assignedApplicationId); Optional<ApplicationEvaluationEntity> findByAssignedApplicationsEntity_IdAndIsDeletedFalse(Long assignedApplicationId);
Optional<ApplicationEvaluationEntity> findByApplicationIdAndAssignedApplicationsEntity_IdAndIsDeletedFalse(Long applicationId, Long assignedApplicationId); Optional<ApplicationEvaluationEntity> findByApplicationIdAndAssignedApplicationsEntity_IdAndIsDeletedFalse(Long applicationId, Long assignedApplicationId);
Optional<ApplicationEvaluationEntity> findFirstByIsDeletedFalseOrderByCreatedDateDesc(); Optional<ApplicationEvaluationEntity> findFirstByIsDeletedFalseOrderByCreatedDateDesc();
boolean existsByApplicationIdAndIsDeletedFalse(Long applicationId);
} }

View File

@@ -13,15 +13,11 @@ import java.util.Optional;
public interface AssignedApplicationsRepository extends JpaRepository<AssignedApplicationsEntity,Long>, JpaSpecificationExecutor<AssignedApplicationsEntity>{ public interface AssignedApplicationsRepository extends JpaRepository<AssignedApplicationsEntity,Long>, JpaSpecificationExecutor<AssignedApplicationsEntity>{
Optional<AssignedApplicationsEntity> findByApplicationIdAndIsDeletedFalse(Long applicationId); Optional<AssignedApplicationsEntity> findByApplicationIdAndIsDeletedFalse(Long applicationId);
Optional<AssignedApplicationsEntity> findByIdAndIsDeletedFalse(Long id); Optional<AssignedApplicationsEntity> findByIdAndIsDeletedFalse(Long id);
@Query("SELECT aa FROM AssignedApplicationsEntity aa WHERE aa.isDeleted = false AND aa.application.id = :applicationId") @Query("SELECT aa FROM AssignedApplicationsEntity aa WHERE aa.isDeleted = false " +
List<AssignedApplicationsEntity> findAllByApplicationId(@Param("applicationId") Long applicationId); "AND (:applicationId IS NULL OR aa.application.id = :applicationId) " +
"AND (:id IS NULL OR aa.id = :id)")
@Query("SELECT aa FROM AssignedApplicationsEntity aa WHERE aa.isDeleted = false AND aa.application.id = :applicationId AND aa.id = :assignedApplicationId") Optional<AssignedApplicationsEntity> findByApplicationIdOrId(@Param("applicationId") Long applicationId,
Optional<AssignedApplicationsEntity> findByApplicationIdAndAssignedApplicationId( @Param("id") Long id);
@Param("applicationId") Long applicationId,
@Param("assignedApplicationId") Long assignedApplicationId);
@Query("SELECT aa FROM AssignedApplicationsEntity aa WHERE aa.isDeleted = false AND aa.id = :assignedApplicationId")
Optional<AssignedApplicationsEntity> findByAssignedApplicationId(@Param("assignedApplicationId") Long assignedApplicationId);
} }

View File

@@ -14,7 +14,7 @@ public interface ApplicationEvaluationService {
ApplicationEvaluationResponse createOrUpdateApplicationEvaluation(HttpServletRequest request, ApplicationEvaluationRequest applicationEvaluationRequest,Long assignedApplicationsId); ApplicationEvaluationResponse createOrUpdateApplicationEvaluation(HttpServletRequest request, ApplicationEvaluationRequest applicationEvaluationRequest,Long assignedApplicationsId);
void deleteApplicationEvaluation(HttpServletRequest request,Long id); void deleteApplicationEvaluation(HttpServletRequest request,Long id);
List<ApplicationEvaluationResponse> getApplicationEvaluationByApplicationId(HttpServletRequest request,Long applicationId,Long assignedApplicationId); ApplicationEvaluationResponse getApplicationEvaluationByApplicationId(HttpServletRequest request,Long applicationId,Long assignedApplicationId);
ApplicationEvaluationResponse updateApplicationEvaluationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedEvaluationStatus status); ApplicationEvaluationResponse updateApplicationEvaluationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedEvaluationStatus status);

View File

@@ -48,7 +48,7 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe
@Override @Override
@Transactional(readOnly = true) @Transactional(readOnly = true)
public List<ApplicationEvaluationResponse> getApplicationEvaluationByApplicationId( public ApplicationEvaluationResponse getApplicationEvaluationByApplicationId(
HttpServletRequest request, Long applicationId, Long assignedApplicationId) { HttpServletRequest request, Long applicationId, Long assignedApplicationId) {
if (applicationId == null && assignedApplicationId == null) { if (applicationId == null && assignedApplicationId == null) {
throw new CustomValidationException( throw new CustomValidationException(
@@ -56,45 +56,20 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe
Translator.toLocale(GepafinConstant.EITHER_APPLICATION_OR_ASSIGNED_APPLICATION_ID_REQUIRED_MSG) Translator.toLocale(GepafinConstant.EITHER_APPLICATION_OR_ASSIGNED_APPLICATION_ID_REQUIRED_MSG)
); );
} }
AssignedApplicationsEntity assignedApplications; Optional<AssignedApplicationsEntity> assignedApplicationsOptional =
assignedApplicationsRepository.findByApplicationIdOrId(applicationId, assignedApplicationId);
if (applicationId != null && assignedApplicationId != null) { AssignedApplicationsEntity assignedApplications = assignedApplicationsOptional
assignedApplications = assignedApplicationsRepository
.findByApplicationIdAndAssignedApplicationId(applicationId, assignedApplicationId)
.orElseThrow(() -> new CustomValidationException( .orElseThrow(() -> new CustomValidationException(
Status.BAD_REQUEST, Status.BAD_REQUEST,
Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG) 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<AssignedApplicationsEntity> assignedApplicationsList = assignedApplicationsRepository
.findAllByApplicationId(applicationId);
if (assignedApplicationsList.isEmpty()) {
throw 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()); UserEntity user = validator.validatePreInstructor(request, assignedApplications.getUserId());
if (applicationId != null && assignedApplicationId == null) { return applicationEvaluationDao.getApplicationEvaluationByApplicationId(
return applicationEvaluationDao.getApplicationEvaluationByApplicationId(user, assignedApplications.getApplication().getId(), null); user,
} assignedApplications.getApplication().getId(),
assignedApplications.getId()
if (applicationId != null && assignedApplicationId != null) { );
return applicationEvaluationDao.getApplicationEvaluationByApplicationId(user, assignedApplications.getApplication().getId(), assignedApplications.getId());
}
return applicationEvaluationDao.getApplicationEvaluationByApplicationId(user, null, assignedApplications.getId());
} }

View File

@@ -39,21 +39,17 @@ public interface ApplicationEvaluationApi {
@Parameter(required = true) @PathVariable("assignedApplicationsId") Long assignedApplicationsId, @Parameter(required = true) @PathVariable("assignedApplicationsId") Long assignedApplicationsId,
@Parameter( required = true) @Valid @RequestBody ApplicationEvaluationRequest evaluationRequest); @Parameter( required = true) @Valid @RequestBody ApplicationEvaluationRequest evaluationRequest);
@Operation( @Operation(summary = "API to get ApplicationEvaluation data for evaluation process",
summary = "API to get ApplicationEvaluation data for evaluation process",
responses = { responses = {
@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), @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) }))
}) })
@GetMapping(value = "/application", produces = MediaType.APPLICATION_JSON_VALUE) @GetMapping(value = "/application", produces = MediaType.APPLICATION_JSON_VALUE)
ResponseEntity<Response<List<ApplicationEvaluationResponse>>> getApplicationEvaluationByApplicationId( ResponseEntity<Response<ApplicationEvaluationResponse>> getApplicationEvaluationByApplicationId(
HttpServletRequest request, HttpServletRequest request,
@Parameter(required = false) @RequestParam(value = "applicationId", required = false) Long applicationId, @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", @Operation(summary = "API to delete ApplicationEvaluation",
responses = { responses = {
@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "200", description = "OK"),

View File

@@ -38,14 +38,13 @@ public class ApplicationEvaluationApiController implements ApplicationEvaluation
} }
@Override @Override
public ResponseEntity<Response<List<ApplicationEvaluationResponse>>> getApplicationEvaluationByApplicationId( public ResponseEntity<Response<ApplicationEvaluationResponse>> getApplicationEvaluationByApplicationId(
HttpServletRequest request, Long applicationId, Long assignedApplicationId) { HttpServletRequest request, Long applicationId, Long assignedApplicationId) {
List<ApplicationEvaluationResponse> responseList = ApplicationEvaluationResponse response = null;
applicationEvaluationService.getApplicationEvaluationByApplicationId(request, applicationId, assignedApplicationId); response = applicationEvaluationService.getApplicationEvaluationByApplicationId(request, applicationId,assignedApplicationId);
return ResponseEntity.status(HttpStatus.OK) 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)));
} }

View File

@@ -263,6 +263,7 @@ application.evaluation.status.updated.successfully=Application evaluation status
evaluationCriteria.invalid=This evaluation criterion does not belong to the current call. 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 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. 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 Messages
hub_create_success=Hub created successfully hub_create_success=Hub created successfully

View File

@@ -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. 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 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. 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.assigned.success.msg =Domanda assegnata con successo
application.already.assigned.msg =La domanda � gi� assegnata application.already.assigned.msg =La domanda � gi� assegnata