From ac580533cee18ad61d8a3a7a8930bb2c77701517 Mon Sep 17 00:00:00 2001 From: Sehjot Singh Pannu Date: Fri, 14 Aug 2026 17:31:19 +0530 Subject: [PATCH] Adding villageId and providerServiceMapId param in api /getByBeneficiary --- .../controller/DynamicFormResponseController.java | 10 +++++++--- .../com/iemr/flw/repo/iemr/FormResponseRepo.java | 8 ++++++++ .../iemr/flw/service/DynamicFormResponseService.java | 10 ++++++++-- .../service/impl/DynamicFormResponseServiceImpl.java | 12 +++++++++--- 4 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/DynamicFormResponseController.java b/src/main/java/com/iemr/flw/controller/DynamicFormResponseController.java index 1c44380e..7c5e9b07 100644 --- a/src/main/java/com/iemr/flw/controller/DynamicFormResponseController.java +++ b/src/main/java/com/iemr/flw/controller/DynamicFormResponseController.java @@ -84,13 +84,17 @@ public ResponseEntity submitBulk( new ApiResponse(true, "Bulk submit complete: " + saved.size() + " saved", saved)); } - @Operation(summary = "Get all form responses for a beneficiary filtered by form UUID") + @Operation(summary = "Get all form responses for a beneficiary filtered by form UUID. " + + "If beneficiaryId is omitted, villageId and/or providerServiceMapId are used instead " + + "to return responses for every matching beneficiary.") @RequestMapping(value = "/getByBeneficiary", method = RequestMethod.GET) public ResponseEntity getByBeneficiary( - @RequestParam Long beneficiaryId, + @RequestParam(required = false) Long beneficiaryId, + @RequestParam(required = false) Integer villageId, + @RequestParam(required = false) Integer providerServiceMapId, @RequestParam String formUuid) { List dtos = - responseService.getResponsesByBeneficiary(beneficiaryId, formUuid); + responseService.getResponsesByBeneficiary(beneficiaryId, villageId, providerServiceMapId, formUuid); return ResponseEntity.ok(new ApiResponse(true, "Responses fetched successfully", dtos)); } diff --git a/src/main/java/com/iemr/flw/repo/iemr/FormResponseRepo.java b/src/main/java/com/iemr/flw/repo/iemr/FormResponseRepo.java index b9735b40..f389b5de 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/FormResponseRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/FormResponseRepo.java @@ -53,6 +53,14 @@ List findByFormIdAndStatusInFiltered(@Param("formId") Long formId, @Param("villageId") Integer villageId, @Param("providerServiceMapId") Integer providerServiceMapId); + @Query("SELECT r FROM FormResponse r WHERE r.formId = :formId " + + "AND r.beneficiaryId IN (SELECT b.beneficiaryID FROM BenFlowStatus b WHERE b.deleted = false " + + "AND (:villageId IS NULL OR b.villageID = :villageId) " + + "AND (:providerServiceMapId IS NULL OR b.providerServiceMapId = :providerServiceMapId))") + List findByFormIdFiltered(@Param("formId") Long formId, + @Param("villageId") Integer villageId, + @Param("providerServiceMapId") Integer providerServiceMapId); + @Query("SELECT r.beneficiaryId FROM FormResponse r " + "WHERE r.beneficiaryId IN :benIds " + "AND r.formId = :formId " + diff --git a/src/main/java/com/iemr/flw/service/DynamicFormResponseService.java b/src/main/java/com/iemr/flw/service/DynamicFormResponseService.java index 567b062f..1f2255f3 100644 --- a/src/main/java/com/iemr/flw/service/DynamicFormResponseService.java +++ b/src/main/java/com/iemr/flw/service/DynamicFormResponseService.java @@ -43,8 +43,14 @@ public interface DynamicFormResponseService { /** Save POST_SUBMIT section answers and advance status to COMPLETE. */ FormResponseDTO completeForm(FormResponseRequest request, String jwtToken) throws IEMRException; - /** All responses for a beneficiary filtered by form UUID. */ - List getResponsesByBeneficiary(Long beneficiaryId, String formUuid); + /** + * Responses to the given form, either for one beneficiary or for every beneficiary matching + * villageId/providerServiceMapId. At least one of beneficiaryId, villageId, or + * providerServiceMapId is required: pass beneficiaryId for a single beneficiary, or leave it + * null and use villageId and/or providerServiceMapId to filter across beneficiaries. + */ + List getResponsesByBeneficiary(Long beneficiaryId, Integer villageId, + Integer providerServiceMapId, String formUuid); /** Single response with all nested section and question answers. */ FormResponseDTO getResponseById(Long responseId); diff --git a/src/main/java/com/iemr/flw/service/impl/DynamicFormResponseServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DynamicFormResponseServiceImpl.java index a34f7cde..e163959c 100644 --- a/src/main/java/com/iemr/flw/service/impl/DynamicFormResponseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DynamicFormResponseServiceImpl.java @@ -152,12 +152,18 @@ public FormResponseDTO completeForm(FormResponseRequest request, String jwtToken @Override @Transactional(readOnly = true) - public List getResponsesByBeneficiary(Long beneficiaryId, String formUuid) { + public List getResponsesByBeneficiary(Long beneficiaryId, Integer villageId, + Integer providerServiceMapId, String formUuid) { + if (beneficiaryId == null && villageId == null && providerServiceMapId == null) { + throw new IllegalArgumentException( + "At least one of beneficiaryId, villageId, or providerServiceMapId must be provided"); + } FormVersion version = resolveLatestVersion(formUuid); Long formId = version.getDynamicForm().getFormId(); - List responses = - formResponseRepo.findByBeneficiaryIdAndFormId(beneficiaryId, formId); + List responses = beneficiaryId != null + ? formResponseRepo.findByBeneficiaryIdAndFormId(beneficiaryId, formId) + : formResponseRepo.findByFormIdFiltered(formId, villageId, providerServiceMapId); return responses.stream() .map(r -> buildFormResponseDTO(r, loadSectionResponseDTOs(r.getResponseId()))) .collect(Collectors.toList());