diff --git a/src/main/java/com/iemr/helpline104/repository/disease/DiseaseRepository.java b/src/main/java/com/iemr/helpline104/repository/disease/DiseaseRepository.java index eea299e..a3d40d4 100644 --- a/src/main/java/com/iemr/helpline104/repository/disease/DiseaseRepository.java +++ b/src/main/java/com/iemr/helpline104/repository/disease/DiseaseRepository.java @@ -44,8 +44,8 @@ public interface DiseaseRepository extends CrudRepository { @Query("UPDATE Disease set deleted = :deleted where diseasesummaryID = :diseasesummaryID") public int deleteDisease(@Param("diseasesummaryID") Integer diseasesummaryID,@Param("deleted") Boolean deleted); - @Query("Select count(*) from Disease disease ") - public Integer getDiseaseCount(); + @Query("Select count(*) from Disease disease d where d.deleted = false") + public Integer getDiseaseCountExcludingDeleted(); @Transactional @Modifying diff --git a/src/main/java/com/iemr/helpline104/service/disease/DiseaseServiceImpl.java b/src/main/java/com/iemr/helpline104/service/disease/DiseaseServiceImpl.java index 443a555..dfd8a46 100644 --- a/src/main/java/com/iemr/helpline104/service/disease/DiseaseServiceImpl.java +++ b/src/main/java/com/iemr/helpline104/service/disease/DiseaseServiceImpl.java @@ -98,37 +98,58 @@ public String deleteDisease(String request) { @Override public String getDisease(String request) throws IEMRException { - logger.info("getDisease - Start"); - Disease disease = InputMapper.gson().fromJson(request, Disease.class); - Integer totalCount = diseaseRepository.getDiseaseCount(); - - CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); - CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Disease.class); - Root root = criteriaQuery.from(Disease.class); - List predicates = new ArrayList(); + logger.info("getDisease - Start"); + + Disease disease = InputMapper.gson().fromJson(request, Disease.class); + + if (disease == null) { + throw new IEMRException("Invalid request: Unable to parse disease object"); + } + + Integer totalCount = diseaseRepository.getDiseaseCountExcludingDeleted(); - criteriaQuery.select(root).where(predicates.toArray(new Predicate[] {})); - TypedQuery typedQuery = entityManager.createQuery(criteriaQuery); - - if (disease.getPageNo() != null && disease.getPageSize() != null) - { - typedQuery.setMaxResults(disease.getPageSize()) - .setFirstResult((disease.getPageNo() - 1) * disease.getPageSize()); - } - - List list=typedQuery.getResultList(); - - Integer totalPages= getPageCount(totalCount, disease.getPageSize()); - - Map responseMap = new HashMap<>(); - - responseMap.put("DiseaseList", list); - responseMap.put("totalPages", totalPages); - - logger.info("getDisease - End"); - return responseMap.toString(); + CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); + CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Disease.class); + Root root = criteriaQuery.from(Disease.class); + + List predicates = new ArrayList<>(); + + // Exclude deleted diseases (assuming soft delete logic) + predicates.add(criteriaBuilder.equal(root.get("deleted"), false)); + + // Build query with predicates and sorting by newest first + criteriaQuery.select(root) + .where(predicates.toArray(new Predicate[0])) + .orderBy(criteriaBuilder.desc(root.get("diseasesummaryID"))); + + logger.info("Executing disease fetch query with predicates: {}" , predicates); + + TypedQuery typedQuery = entityManager.createQuery(criteriaQuery); + + // Apply pagination if provided + if (disease.getPageNo() != null && disease.getPageSize() != null) { + if (disease.getPageNo()<=0 || disease.getPageSize()<=0) { + throw new IEMRException("Invalid pagination parameter, page no and page size must be positive"); + } + + int offset = (disease.getPageNo() - 1) * disease.getPageSize(); + typedQuery.setFirstResult(offset); + typedQuery.setMaxResults(disease.getPageSize()); + } + + List list = typedQuery.getResultList(); + + Integer totalPages = getPageCount(totalCount, disease.getPageSize()); + + Map responseMap = new HashMap<>(); + responseMap.put("DiseaseList", list); + responseMap.put("totalPages", totalPages); + + logger.info("getDisease - End"); + + return responseMap.toString(); } - + private int getPageCount(Integer totalCount, Integer pageSize) { if (pageSize > 0) { if (totalCount % pageSize == 0)