From 612175db9912e84f4a5536572ca9197c181846bd Mon Sep 17 00:00:00 2001 From: jayasanka-sack <33048395+jayasanka-sack@users.noreply.github.com> Date: Thu, 24 Oct 2024 07:16:19 -0700 Subject: [PATCH] Add pagination --- .../module/emrapi/db/HibernateVisitDAO.java | 5 ++-- .../openmrs/module/emrapi/db/VisitDAO.java | 2 +- .../visit/VisitWithDiagnosesService.java | 2 +- .../visit/VisitWithDiagnosesServiceImpl.java | 4 +-- .../web/controller/VisitController.java | 27 +++++++++++++------ .../web/controller/VisitControllerTest.java | 5 ++-- 6 files changed, 29 insertions(+), 16 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/emrapi/db/HibernateVisitDAO.java b/api/src/main/java/org/openmrs/module/emrapi/db/HibernateVisitDAO.java index 99f9da93..150ecdf3 100644 --- a/api/src/main/java/org/openmrs/module/emrapi/db/HibernateVisitDAO.java +++ b/api/src/main/java/org/openmrs/module/emrapi/db/HibernateVisitDAO.java @@ -22,7 +22,7 @@ public class HibernateVisitDAO implements VisitDAO { @Autowired private SessionFactory sessionFactory; - public List getVisitsByPatientId(Patient patient) { + public List getVisitsByPatientId(Patient patient, int startIndex, int limit) { String visitNoteEncounterTypeUuid = "d7151f82-c1f3-4152-a605-2f9ea7414a79"; @@ -32,7 +32,8 @@ public List getVisitsByPatientId(Patient patient) { "JOIN enc.encounterType et " + "WHERE v.patient.id = :patientId " + "AND et.uuid = :encounterTypeUuid " + - "ORDER BY v.startDatetime DESC"; + "ORDER BY v.startDatetime DESC "+ + "LIMIT :startIndex, :limit"; List visits = sessionFactory.getCurrentSession() .createQuery(hqlVisit) diff --git a/api/src/main/java/org/openmrs/module/emrapi/db/VisitDAO.java b/api/src/main/java/org/openmrs/module/emrapi/db/VisitDAO.java index bf0c7961..24d3f1e5 100644 --- a/api/src/main/java/org/openmrs/module/emrapi/db/VisitDAO.java +++ b/api/src/main/java/org/openmrs/module/emrapi/db/VisitDAO.java @@ -7,5 +7,5 @@ public interface VisitDAO { - List getVisitsByPatientId(Patient patient); + List getVisitsByPatientId(Patient patient, int startIndex, int limit); } diff --git a/api/src/main/java/org/openmrs/module/emrapi/visit/VisitWithDiagnosesService.java b/api/src/main/java/org/openmrs/module/emrapi/visit/VisitWithDiagnosesService.java index 91d35e23..0742872d 100644 --- a/api/src/main/java/org/openmrs/module/emrapi/visit/VisitWithDiagnosesService.java +++ b/api/src/main/java/org/openmrs/module/emrapi/visit/VisitWithDiagnosesService.java @@ -9,5 +9,5 @@ public interface VisitWithDiagnosesService { * @param patientUuid the UUID of the patient * @return a list of visits */ - List getVisitsByPatientId(String patientUuid); + List getVisitsByPatientId(String patientUuid, int startIndex, int limit); } diff --git a/api/src/main/java/org/openmrs/module/emrapi/visit/VisitWithDiagnosesServiceImpl.java b/api/src/main/java/org/openmrs/module/emrapi/visit/VisitWithDiagnosesServiceImpl.java index c44804fb..edba3edd 100644 --- a/api/src/main/java/org/openmrs/module/emrapi/visit/VisitWithDiagnosesServiceImpl.java +++ b/api/src/main/java/org/openmrs/module/emrapi/visit/VisitWithDiagnosesServiceImpl.java @@ -20,7 +20,7 @@ public class VisitWithDiagnosesServiceImpl extends BaseOpenmrsService implements VisitDAO visitDAO; @Override - public List getVisitsByPatientId(String patientUuid) { + public List getVisitsByPatientId(String patientUuid, int startIndex, int limit) { Patient patient = patientService.getPatientByUuid(patientUuid); @@ -28,6 +28,6 @@ public List getVisitsByPatientId(String patientUuid) { throw new ObjectNotFoundException("No patient found with uuid " + patientUuid, Patient.class.getName()); } - return visitDAO.getVisitsByPatientId(patient); + return visitDAO.getVisitsByPatientId(patient, startIndex, limit); } } diff --git a/omod/src/main/java/org/openmrs/module/emrapi/web/controller/VisitController.java b/omod/src/main/java/org/openmrs/module/emrapi/web/controller/VisitController.java index cdd38590..09008342 100644 --- a/omod/src/main/java/org/openmrs/module/emrapi/web/controller/VisitController.java +++ b/omod/src/main/java/org/openmrs/module/emrapi/web/controller/VisitController.java @@ -3,6 +3,10 @@ import org.hibernate.ObjectNotFoundException; import org.openmrs.module.emrapi.visit.VisitWithDiagnoses; import org.openmrs.module.emrapi.visit.VisitWithDiagnosesService; +import org.openmrs.module.webservices.rest.web.RequestContext; +import org.openmrs.module.webservices.rest.web.RestUtil; +import org.openmrs.module.webservices.rest.web.representation.Representation; +import org.openmrs.module.webservices.rest.web.resource.impl.NeedsPaging; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -11,23 +15,30 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.List; @Controller public class VisitController { - + @Autowired VisitWithDiagnosesService visitWithDiagnosesService; - - + @RequestMapping(method = RequestMethod.GET, value = "/rest/**/emrapi/patient/{patientUuid}/visit") - public ResponseEntity getVisitsByPatientId(@PathVariable String patientUuid) { + public ResponseEntity getVisitsByPatientId( + HttpServletRequest request, + HttpServletResponse response, + @PathVariable String patientUuid) { + RequestContext context = RestUtil.getRequestContext(request, response, Representation.DEFAULT); List visits; try { - visits = visitWithDiagnosesService.getVisitsByPatientId(patientUuid); - } catch (ObjectNotFoundException e) { + visits = visitWithDiagnosesService.getVisitsByPatientId(patientUuid, context.getStartIndex(), context.getLimit()); + } + catch (ObjectNotFoundException e) { return ResponseEntity.badRequest().body(e.getMessage()); } - return ResponseEntity.ok(visits); + + return new ResponseEntity<>(new NeedsPaging<>(visits, context), HttpStatus.OK); } -} \ No newline at end of file +} diff --git a/omod/src/test/java/org/openmrs/module/emrapi/web/controller/VisitControllerTest.java b/omod/src/test/java/org/openmrs/module/emrapi/web/controller/VisitControllerTest.java index d41f8455..eef6ab07 100644 --- a/omod/src/test/java/org/openmrs/module/emrapi/web/controller/VisitControllerTest.java +++ b/omod/src/test/java/org/openmrs/module/emrapi/web/controller/VisitControllerTest.java @@ -41,7 +41,8 @@ public void shouldGetVisitsByPatientId() { String visitNoteEncounterTypeUuid = "d7151f82-c1f3-4152-a605-2f9ea7414a79"; String patientUuid = "8604d42e-3ca8-11e3-bf2b-0d0c09861e97"; - ResponseEntity> visitsResponse = (ResponseEntity>) visitController.getVisitsByPatientId(patientUuid); + ResponseEntity> visitsResponse = (ResponseEntity>) + visitController.getVisitsByPatientId(patientUuid); assertNotNull(visitsResponse); List visits = visitsResponse.getBody(); @@ -84,4 +85,4 @@ public void shouldThrowExceptionWhenPatientUuidIsInvalid() { assertNotNull(visitsResponse); assert visitsResponse.getStatusCode().is4xxClientError(); } -} \ No newline at end of file +}