From 407c2bb4d9d232d37367c20b25450c18af3ca545 Mon Sep 17 00:00:00 2001 From: kavi_elrey <25226238+kavi-egov@users.noreply.github.com> Date: Thu, 26 Oct 2023 15:04:22 +0530 Subject: [PATCH 01/41] added downsync dummy api --- .../health-services-models/CHANGELOG.md | 8 +++ .../beneficiarydownsync/Downsync.java | 50 +++++++++++++++++++ .../beneficiarydownsync/DownsyncCriteria.java | 30 +++++++++++ .../beneficiarydownsync/DownsyncRequest.java | 23 +++++++++ .../beneficiarydownsync/DownsyncResponse.java | 23 +++++++++ .../BeneficiaryDownsyncController.java | 39 +++++++++++++++ 6 files changed, 173 insertions(+) create mode 100644 health-services/libraries/health-services-models/CHANGELOG.md create mode 100644 health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/Downsync.java create mode 100644 health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java create mode 100644 health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncRequest.java create mode 100644 health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncResponse.java create mode 100644 health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java diff --git a/health-services/libraries/health-services-models/CHANGELOG.md b/health-services/libraries/health-services-models/CHANGELOG.md new file mode 100644 index 00000000000..b552656d610 --- /dev/null +++ b/health-services/libraries/health-services-models/CHANGELOG.md @@ -0,0 +1,8 @@ +All notable changes to this module will be documented in this file. + +## 1.0.9 +- stock models updated with sender and receiver information fields. + + +## 1.0.0 +- Base version diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/Downsync.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/Downsync.java new file mode 100644 index 00000000000..c53e28da3fe --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/Downsync.java @@ -0,0 +1,50 @@ +package org.egov.common.models.referralmanagement.beneficiarydownsync; + +import java.util.List; + +import org.egov.common.models.household.Household; +import org.egov.common.models.household.HouseholdMember; +import org.egov.common.models.individual.Individual; +import org.egov.common.models.project.ProjectBeneficiary; +import org.egov.common.models.project.Task; +import org.egov.common.models.referralmanagement.Referral; +import org.egov.common.models.referralmanagement.sideeffect.SideEffect; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class Downsync { + + @JsonProperty("Households") + private List Households; + + @JsonProperty("HouseholdMembers") + private List HouseholdMembers; + + @JsonProperty("Individuals") + private List Individuals; + + @JsonProperty("ProjectBeneficiaries") + private List ProjectBeneficiaries; + + @JsonProperty("Tasks") + private List Tasks; + + @JsonProperty("SideEffects") + private List SideEffects; + + @JsonProperty("Referrals") + private List Referrals; + + @JsonProperty("DownsyncCriteria") + private DownsyncCriteria downsyncCriteria; + +} diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java new file mode 100644 index 00000000000..e75eb1b432a --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java @@ -0,0 +1,30 @@ +package org.egov.common.models.referralmanagement.beneficiarydownsync; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Builder.Default; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class DownsyncCriteria { + + private String locality; + + private Long lastSyncedTime; + + @Default + private Boolean includeDeleted = false; + + @Default + private Integer offset = 0; + + @Default + private Integer limit = 50; + + private Integer totalCount; +} + diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncRequest.java new file mode 100644 index 00000000000..6db2a1f97b9 --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncRequest.java @@ -0,0 +1,23 @@ +package org.egov.common.models.referralmanagement.beneficiarydownsync; + +import org.egov.common.contract.request.RequestInfo; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class DownsyncRequest { + + @JsonProperty("RequestInfo") + private RequestInfo requestInfo; + + @JsonProperty("DownsyncCriteria") + private DownsyncCriteria downsyncCriteria; +} diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncResponse.java new file mode 100644 index 00000000000..23635cf119a --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncResponse.java @@ -0,0 +1,23 @@ +package org.egov.common.models.referralmanagement.beneficiarydownsync; + +import org.egov.common.contract.response.ResponseInfo; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class DownsyncResponse { + + @JsonProperty("ResponseInfo") + private ResponseInfo responseInfo; + + @JsonProperty("Downsync") + private Downsync downsync; +} diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java new file mode 100644 index 00000000000..84996bf6b96 --- /dev/null +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java @@ -0,0 +1,39 @@ +package org.egov.referralmanagement.web.controllers; + +import javax.validation.Valid; + +import org.egov.common.models.referralmanagement.beneficiarydownsync.Downsync; +import org.egov.common.models.referralmanagement.beneficiarydownsync.DownsyncRequest; +import org.egov.common.models.referralmanagement.beneficiarydownsync.DownsyncResponse; +import org.egov.common.utils.ResponseInfoFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import io.swagger.annotations.ApiParam; + +@Controller +@RequestMapping("/beneficiary-downsync") +@Validated +public class BeneficiaryDownsyncController { + + + @RequestMapping(value = "/v1/_create", method = RequestMethod.POST) + public ResponseEntity getBeneficaryData (@ApiParam(value = "Capture details of Side Effect", required = true) @Valid @RequestBody DownsyncRequest request) { + + Downsync.builder(). + downsyncCriteria(request.getDownsyncCriteria()) + .build(); + DownsyncResponse response = DownsyncResponse.builder() + .downsync(new Downsync()) + .responseInfo(ResponseInfoFactory + .createResponseInfo(request.getRequestInfo(), true)) + .build(); + + return ResponseEntity.status(HttpStatus.ACCEPTED).body(response); + } +} From c10f4ff01ce3475734cec0c2042b6a518ab5f6a1 Mon Sep 17 00:00:00 2001 From: kavi_elrey <25226238+kavi-egov@users.noreply.github.com> Date: Thu, 26 Oct 2023 15:38:04 +0530 Subject: [PATCH 02/41] added downsync dummy api with res --- .../BeneficiaryDownsyncController.java | 414 +++++++++++++++++- .../src/main/resources/application.properties | 4 +- 2 files changed, 412 insertions(+), 6 deletions(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java index 84996bf6b96..d66cf0d432e 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java @@ -10,9 +10,9 @@ import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import io.swagger.annotations.ApiParam; @@ -22,8 +22,8 @@ public class BeneficiaryDownsyncController { - @RequestMapping(value = "/v1/_create", method = RequestMethod.POST) - public ResponseEntity getBeneficaryData (@ApiParam(value = "Capture details of Side Effect", required = true) @Valid @RequestBody DownsyncRequest request) { + @PostMapping(value = "/v1/_get") + public ResponseEntity getBeneficaryData (@ApiParam(value = "Capture details of Side Effect", required = true) @Valid @RequestBody DownsyncRequest request) { Downsync.builder(). downsyncCriteria(request.getDownsyncCriteria()) @@ -34,6 +34,412 @@ public ResponseEntity getBeneficaryData (@ApiParam(value = "Ca .createResponseInfo(request.getRequestInfo(), true)) .build(); - return ResponseEntity.status(HttpStatus.ACCEPTED).body(response); + return ResponseEntity.status(HttpStatus.ACCEPTED).body("{\n" + + " \"ResponseInfo\": {\n" + + " \"apiId\": \"string\",\n" + + " \"ver\": \"string\",\n" + + " \"ts\": 0,\n" + + " \"resMsgId\": \"string\",\n" + + " \"msgId\": \"string\",\n" + + " \"status\": \"SUCCESSFUL\"\n" + + " },\n" + + " \"Downsync\": {\n" + + " \"DownsyncCriteria\": {\n" + + " \"locality\": \"string\",\n" + + " \"tenantId\": \"string\",\n" + + " \"offset\": 0,\n" + + " \"limit\": 10,\n" + + " \"lastSyncedTime\": 0,\n" + + " \"includeDeleted\": false,\n" + + " \"totalCount\": \"1\"\n" + + " },\n" + + " \"Households\": [\n" + + " {\n" + + " \"id\": \"string\",\n" + + " \"tenantId\": \"tenantA\",\n" + + " \"clientReferenceId\": \"string\",\n" + + " \"memberCount\": 4,\n" + + " \"address\": {\n" + + " \"id\": \"string\",\n" + + " \"tenantId\": \"tenantA\",\n" + + " \"doorNo\": \"string\",\n" + + " \"latitude\": 90,\n" + + " \"longitude\": 180,\n" + + " \"locationAccuracy\": 10000,\n" + + " \"type\": \"string\",\n" + + " \"addressLine1\": \"string\",\n" + + " \"addressLine2\": \"string\",\n" + + " \"landmark\": \"string\",\n" + + " \"city\": \"string\",\n" + + " \"pincode\": \"string\",\n" + + " \"buildingName\": \"string\",\n" + + " \"street\": \"string\",\n" + + " \"locality\": {\n" + + " \"code\": \"string\",\n" + + " \"name\": \"string\",\n" + + " \"label\": \"string\",\n" + + " \"latitude\": \"string\",\n" + + " \"longitude\": \"string\",\n" + + " \"children\": [\n" + + " \"string\"\n" + + " ],\n" + + " \"materializedPath\": \"string\"\n" + + " }\n" + + " },\n" + + " \"additionalFields\": {\n" + + " \"schema\": \"HOUSEHOLD\",\n" + + " \"version\": 2,\n" + + " \"fields\": [\n" + + " {\n" + + " \"key\": \"height\",\n" + + " \"value\": \"180\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"isDeleted\": true,\n" + + " \"rowVersion\": 0,\n" + + " \"auditDetails\": {\n" + + " \"createdBy\": \"string\",\n" + + " \"lastModifiedBy\": \"string\",\n" + + " \"createdTime\": 0,\n" + + " \"lastModifiedTime\": 0\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"HouseholdMembers\": [\n" + + " {\n" + + " \"id\": \"string\",\n" + + " \"householdId\": \"string\",\n" + + " \"householdClientReferenceId\": \"string\",\n" + + " \"individualId\": \"string\",\n" + + " \"individualClientReferenceId\": \"string\",\n" + + " \"isHeadOfHousehold\": false,\n" + + " \"tenantId\": \"tenantA\",\n" + + " \"additionalFields\": {\n" + + " \"schema\": \"HOUSEHOLD\",\n" + + " \"version\": 2,\n" + + " \"fields\": [\n" + + " {\n" + + " \"key\": \"height\",\n" + + " \"value\": \"180\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"isDeleted\": true,\n" + + " \"rowVersion\": 0,\n" + + " \"auditDetails\": {\n" + + " \"createdBy\": \"string\",\n" + + " \"lastModifiedBy\": \"string\",\n" + + " \"createdTime\": 0,\n" + + " \"lastModifiedTime\": 0\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"Individuals\": [\n" + + " {\n" + + " \"id\": \"string\",\n" + + " \"tenantId\": \"tenantA\",\n" + + " \"clientReferenceId\": \"string\",\n" + + " \"userId\": \"string\",\n" + + " \"name\": {\n" + + " \"givenName\": \"string\",\n" + + " \"familyName\": \"string\",\n" + + " \"otherNames\": \"string\"\n" + + " },\n" + + " \"dateOfBirth\": \"14/10/2022\",\n" + + " \"gender\": \"MALE\",\n" + + " \"bloodGroup\": \"str\",\n" + + " \"mobileNumber\": \"string\",\n" + + " \"altContactNumber\": \"string\",\n" + + " \"email\": \"user@example.com\",\n" + + " \"address\": [\n" + + " {\n" + + " \"id\": \"string\",\n" + + " \"tenantId\": \"tenantA\",\n" + + " \"doorNo\": \"string\",\n" + + " \"latitude\": 90,\n" + + " \"longitude\": 180,\n" + + " \"locationAccuracy\": 10000,\n" + + " \"type\": \"string\",\n" + + " \"addressLine1\": \"string\",\n" + + " \"addressLine2\": \"string\",\n" + + " \"landmark\": \"string\",\n" + + " \"city\": \"string\",\n" + + " \"pincode\": \"string\",\n" + + " \"buildingName\": \"string\",\n" + + " \"street\": \"string\",\n" + + " \"locality\": {\n" + + " \"code\": \"string\",\n" + + " \"name\": \"string\",\n" + + " \"label\": \"string\",\n" + + " \"latitude\": \"string\",\n" + + " \"longitude\": \"string\",\n" + + " \"children\": [\n" + + " \"string\"\n" + + " ],\n" + + " \"materializedPath\": \"string\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"fatherName\": \"string\",\n" + + " \"husbandName\": \"string\",\n" + + " \"identifiers\": [\n" + + " {\n" + + " \"identifierType\": \"SYSTEM_GENERATED\",\n" + + " \"identifierId\": \"ABCD-1212\"\n" + + " }\n" + + " ],\n" + + " \"skills\": [\n" + + " {\n" + + " \"id\": \"string\",\n" + + " \"type\": \"string\",\n" + + " \"level\": \"string\",\n" + + " \"experience\": \"string\"\n" + + " }\n" + + " ],\n" + + " \"photo\": \"string\",\n" + + " \"additionalFields\": {\n" + + " \"schema\": \"HOUSEHOLD\",\n" + + " \"version\": 2,\n" + + " \"fields\": [\n" + + " {\n" + + " \"key\": \"height\",\n" + + " \"value\": \"180\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"isDeleted\": true,\n" + + " \"rowVersion\": 0,\n" + + " \"auditDetails\": {\n" + + " \"createdBy\": \"string\",\n" + + " \"lastModifiedBy\": \"string\",\n" + + " \"createdTime\": 0,\n" + + " \"lastModifiedTime\": 0\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"ProjectBeneficiaries\": [\n" + + " {\n" + + " \"id\": \"string\",\n" + + " \"clientReferenceId\": \"string\",\n" + + " \"tenantId\": \"tenantA\",\n" + + " \"projectId\": \"string\",\n" + + " \"beneficiaryId\": \"string\",\n" + + " \"beneficiaryClientReferenceId\": \"string\",\n" + + " \"dateOfRegistration\": 1663218161,\n" + + " \"additionalFields\": {\n" + + " \"schema\": \"HOUSEHOLD\",\n" + + " \"version\": 2,\n" + + " \"fields\": [\n" + + " {\n" + + " \"key\": \"height\",\n" + + " \"value\": \"180\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"isDeleted\": true,\n" + + " \"rowVersion\": 0,\n" + + " \"auditDetails\": {\n" + + " \"createdBy\": \"string\",\n" + + " \"lastModifiedBy\": \"string\",\n" + + " \"createdTime\": 0,\n" + + " \"lastModifiedTime\": 0\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"Tasks\": [\n" + + " {\n" + + " \"id\": \"string\",\n" + + " \"clientReferenceId\": \"string\",\n" + + " \"tenantId\": \"tenantA\",\n" + + " \"projectId\": \"string\",\n" + + " \"projectBeneficiaryId\": \"R-ID-1\",\n" + + " \"projectBeneficiaryClientReferenceId\": \"R-ID-1\",\n" + + " \"resources\": [\n" + + " {\n" + + " \"id\": \"string\",\n" + + " \"tenantId\": \"tenantA\",\n" + + " \"productVariantId\": \"ID-1\",\n" + + " \"quantity\": 0,\n" + + " \"isDelivered\": true,\n" + + " \"deliveryComment\": \"string\",\n" + + " \"isDeleted\": true,\n" + + " \"auditDetails\": {\n" + + " \"createdBy\": \"string\",\n" + + " \"lastModifiedBy\": \"string\",\n" + + " \"createdTime\": 0,\n" + + " \"lastModifiedTime\": 0\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"plannedStartDate\": 0,\n" + + " \"plannedEndDate\": 0,\n" + + " \"actualStartDate\": 0,\n" + + " \"actualEndDate\": 0,\n" + + " \"createdBy\": \"UUID\",\n" + + " \"createdDate\": 1663218161,\n" + + " \"address\": {\n" + + " \"id\": \"string\",\n" + + " \"tenantId\": \"tenantA\",\n" + + " \"doorNo\": \"string\",\n" + + " \"latitude\": 90,\n" + + " \"longitude\": 180,\n" + + " \"locationAccuracy\": 10000,\n" + + " \"type\": \"string\",\n" + + " \"addressLine1\": \"string\",\n" + + " \"addressLine2\": \"string\",\n" + + " \"landmark\": \"string\",\n" + + " \"city\": \"string\",\n" + + " \"pincode\": \"string\",\n" + + " \"buildingName\": \"string\",\n" + + " \"street\": \"string\",\n" + + " \"locality\": {\n" + + " \"code\": \"string\",\n" + + " \"name\": \"string\",\n" + + " \"label\": \"string\",\n" + + " \"latitude\": \"string\",\n" + + " \"longitude\": \"string\",\n" + + " \"children\": [\n" + + " \"string\"\n" + + " ],\n" + + " \"materializedPath\": \"string\"\n" + + " }\n" + + " },\n" + + " \"additionalFields\": {\n" + + " \"schema\": \"HOUSEHOLD\",\n" + + " \"version\": 2,\n" + + " \"fields\": [\n" + + " {\n" + + " \"key\": \"height\",\n" + + " \"value\": \"180\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"isDeleted\": true,\n" + + " \"rowVersion\": 0,\n" + + " \"auditDetails\": {\n" + + " \"createdBy\": \"string\",\n" + + " \"lastModifiedBy\": \"string\",\n" + + " \"createdTime\": 0,\n" + + " \"lastModifiedTime\": 0\n" + + " },\n" + + " \"status\": \"DELIVERED\"\n" + + " }\n" + + " ],\n" + + " \"SideEffects\": [\n" + + " {\n" + + " \"id\": \"string\",\n" + + " \"clientReferenceId\": \"string\",\n" + + " \"tenantId\": \"tenantA\",\n" + + " \"taskId\": \"string\",\n" + + " \"taskClientReferenceId\": \"R-ID-1\",\n" + + " \"projectBeneficiaryId\": \"string\",\n" + + " \"projectBeneficiaryClientReferenceId\": \"string\",\n" + + " \"symptoms\": [\n" + + " \"string\"\n" + + " ],\n" + + " \"additionalFields\": {\n" + + " \"schema\": \"HOUSEHOLD\",\n" + + " \"version\": 2,\n" + + " \"fields\": [\n" + + " {\n" + + " \"key\": \"height\",\n" + + " \"value\": \"180\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"isDeleted\": true,\n" + + " \"rowVersion\": 0,\n" + + " \"auditDetails\": {\n" + + " \"createdBy\": \"string\",\n" + + " \"lastModifiedBy\": \"string\",\n" + + " \"createdTime\": 0,\n" + + " \"lastModifiedTime\": 0\n" + + " },\n" + + " \"clientAuditDetails\": {\n" + + " \"createdBy\": \"string\",\n" + + " \"lastModifiedBy\": \"string\",\n" + + " \"createdTime\": 0,\n" + + " \"lastModifiedTime\": 0\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"Referrals\": [\n" + + " {\n" + + " \"id\": \"string\",\n" + + " \"clientReferenceId\": \"string\",\n" + + " \"tenantId\": \"tenantA\",\n" + + " \"projectBeneficiaryId\": \"string\",\n" + + " \"projectBeneficiaryClientReferenceId\": \"string\",\n" + + " \"referrerId\": \"string\",\n" + + " \"recipientId\": \"string\",\n" + + " \"recipientType\": \"string\",\n" + + " \"reasons\": [\n" + + " \"string\"\n" + + " ],\n" + + " \"sideEffect\": {\n" + + " \"id\": \"string\",\n" + + " \"clientReferenceId\": \"string\",\n" + + " \"tenantId\": \"tenantA\",\n" + + " \"taskId\": \"string\",\n" + + " \"taskClientReferenceId\": \"R-ID-1\",\n" + + " \"projectBeneficiaryId\": \"string\",\n" + + " \"projectBeneficiaryClientReferenceId\": \"string\",\n" + + " \"symptoms\": [\n" + + " \"string\"\n" + + " ],\n" + + " \"additionalFields\": {\n" + + " \"schema\": \"HOUSEHOLD\",\n" + + " \"version\": 2,\n" + + " \"fields\": [\n" + + " {\n" + + " \"key\": \"height\",\n" + + " \"value\": \"180\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"isDeleted\": true,\n" + + " \"rowVersion\": 0,\n" + + " \"auditDetails\": {\n" + + " \"createdBy\": \"string\",\n" + + " \"lastModifiedBy\": \"string\",\n" + + " \"createdTime\": 0,\n" + + " \"lastModifiedTime\": 0\n" + + " },\n" + + " \"clientAuditDetails\": {\n" + + " \"createdBy\": \"string\",\n" + + " \"lastModifiedBy\": \"string\",\n" + + " \"createdTime\": 0,\n" + + " \"lastModifiedTime\": 0\n" + + " }\n" + + " },\n" + + " \"additionalFields\": {\n" + + " \"schema\": \"HOUSEHOLD\",\n" + + " \"version\": 2,\n" + + " \"fields\": [\n" + + " {\n" + + " \"key\": \"height\",\n" + + " \"value\": \"180\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"isDeleted\": true,\n" + + " \"rowVersion\": 0,\n" + + " \"auditDetails\": {\n" + + " \"createdBy\": \"string\",\n" + + " \"lastModifiedBy\": \"string\",\n" + + " \"createdTime\": 0,\n" + + " \"lastModifiedTime\": 0\n" + + " },\n" + + " \"clientAuditDetails\": {\n" + + " \"createdBy\": \"string\",\n" + + " \"lastModifiedBy\": \"string\",\n" + + " \"createdTime\": 0,\n" + + " \"lastModifiedTime\": 0\n" + + " }\n" + + " }\n" + + " ]\n" + + " }\n" + + "}"); } } diff --git a/health-services/referralmanagement/src/main/resources/application.properties b/health-services/referralmanagement/src/main/resources/application.properties index 1241002ce27..3177ede912f 100644 --- a/health-services/referralmanagement/src/main/resources/application.properties +++ b/health-services/referralmanagement/src/main/resources/application.properties @@ -1,5 +1,5 @@ server.servlet.context-path=/referralmanagement -server.port=8080 +server.port=8082 app.timezone=UTC # REDIS CONFIG @@ -24,7 +24,7 @@ spring.flyway.table=public spring.flyway.baseline-on-migrate=true spring.flyway.outOfOrder=true spring.flyway.locations=classpath:/db/migration/main -spring.flyway.enabled=true +spring.flyway.enabled=false # TRACER CONFIG # KAFKA SERVER CONFIG From 8be1c336869986c7c6d6959ee3616fe1dbdb5c4d Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Mon, 23 Oct 2023 16:41:55 +0530 Subject: [PATCH 03/41] HLM-4062: added count api changes for household --- .../repository/HouseholdRepository.java | 34 +++++++++++----- .../household/service/HouseholdService.java | 40 +++++++++---------- .../controllers/HouseholdApiController.java | 5 ++- .../household/HouseholdBulkResponse.java | 4 ++ 4 files changed, 49 insertions(+), 34 deletions(-) diff --git a/health-services/household/src/main/java/org/egov/household/repository/HouseholdRepository.java b/health-services/household/src/main/java/org/egov/household/repository/HouseholdRepository.java index b23a6df9c18..b9e9a16c336 100644 --- a/health-services/household/src/main/java/org/egov/household/repository/HouseholdRepository.java +++ b/health-services/household/src/main/java/org/egov/household/repository/HouseholdRepository.java @@ -6,6 +6,7 @@ import org.egov.common.data.query.builder.SelectQueryBuilder; import org.egov.common.data.query.exception.QueryBuilderException; import org.egov.common.data.repository.GenericRepository; +import org.egov.common.ds.Tuple; import org.egov.common.models.household.Household; import org.egov.common.producer.Producer; import org.egov.household.repository.rowmapper.HouseholdRowMapper; @@ -40,7 +41,7 @@ protected HouseholdRepository(Producer producer, super(producer, namedParameterJdbcTemplate, redisTemplate, selectQueryBuilder, householdRowMapper, Optional.of("household")); } - public List findById(List ids, String columnName, Boolean includeDeleted) { + public Tuple> findById(List ids, String columnName, Boolean includeDeleted) { List objFound = findInCache(ids).stream() .filter(entity -> entity.getIsDeleted().equals(includeDeleted)) .collect(Collectors.toList()); @@ -50,7 +51,7 @@ public List findById(List ids, String columnName, Boolean inc .map(obj -> (String) ReflectionUtils.invokeMethod(idMethod, obj)) .collect(Collectors.toList())); if (ids.isEmpty()) { - return objFound; + return new Tuple<>(Long.valueOf(objFound.size()), objFound); } } @@ -61,12 +62,14 @@ public List findById(List ids, String columnName, Boolean inc Map paramMap = new HashMap(); paramMap.put("ids", ids); + Long totalCount = constructTotalCountCTEAndReturnResult(query, paramMap); + objFound.addAll(this.namedParameterJdbcTemplate.query(query, paramMap, this.rowMapper)); putInCache(objFound); - return objFound; + return new Tuple<>(totalCount, objFound); } - public List find(HouseholdSearch searchObject, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted) throws QueryBuilderException { + public Tuple> find(HouseholdSearch searchObject, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted) throws QueryBuilderException { String query = "SELECT *, a.id as aid,a.tenantid as atenantid, a.clientreferenceid as aclientreferenceid FROM household h LEFT JOIN address a ON h.addressid = a.id"; Map paramsMap = new HashMap<>(); List whereFields = GenericQueryBuilder.getFieldsWithCondition(searchObject, QueryFieldChecker.isNotNull, paramsMap); @@ -82,13 +85,16 @@ public List find(HouseholdSearch searchObject, Integer limit, Integer if (lastChangedSince != null) { query = query + "and lastModifiedTime>=:lastModifiedTime "; } - query = query + "ORDER BY h.id ASC LIMIT :limit OFFSET :offset"; paramsMap.put("tenantId", tenantId); paramsMap.put("isDeleted", includeDeleted); paramsMap.put("lastModifiedTime", lastChangedSince); + + Long totalCount = constructTotalCountCTEAndReturnResult(query, paramsMap); + + query = query + "ORDER BY h.id ASC LIMIT :limit OFFSET :offset"; paramsMap.put("limit", limit); paramsMap.put("offset", offset); - return this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper); + return new Tuple<>(totalCount, this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper)); } /** @@ -102,9 +108,9 @@ public List find(HouseholdSearch searchObject, Integer limit, Integer * * Fetch all the household which falls under the radius provided using longitude and latitude provided. */ - public List findByRadius(HouseholdSearch searchObject, Integer limit, Integer offset, String tenantId, Boolean includeDeleted) throws QueryBuilderException { + public Tuple> findByRadius(HouseholdSearch searchObject, Integer limit, Integer offset, String tenantId, Boolean includeDeleted) throws QueryBuilderException { String query = searchCriteriaWaypointQuery + - "SELECT * FROM (SELECT h.*, a.*, " + calculateDistanceFromTwoWaypointsFormulaQuery + " \n" + + "SELECT * FROM (SELECT h.*, a.*, a.id as aid,a.tenantid as atenantid, a.clientreferenceid as aclientreferenceid, " + calculateDistanceFromTwoWaypointsFormulaQuery + " \n" + "FROM public.household h LEFT JOIN public.address a ON h.addressid = a.id AND h.tenantid = a.tenantid, cte_search_criteria_waypoint cte_scw "; Map paramsMap = new HashMap<>(); List whereFields = GenericQueryBuilder.getFieldsWithCondition(searchObject, QueryFieldChecker.isNotNull, paramsMap); @@ -117,14 +123,22 @@ public List findByRadius(HouseholdSearch searchObject, Integer limit, } query = query + " ) AS rt "; query = query + " WHERE distance < :distance "; - query = query + " ORDER BY distance ASC LIMIT :limit OFFSET :offset "; paramsMap.put("s_latitude", searchObject.getLatitude()); paramsMap.put("s_longitude", searchObject.getLongitude()); paramsMap.put("tenantId", tenantId); paramsMap.put("isDeleted", includeDeleted); paramsMap.put("distance", searchObject.getSearchRadius()); + Long totalCount = constructTotalCountCTEAndReturnResult(query, paramsMap); + query = query + " ORDER BY distance ASC LIMIT :limit OFFSET :offset "; paramsMap.put("limit", limit); paramsMap.put("offset", offset); - return this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper); + return new Tuple<>(totalCount, this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper)); + } + + private Long constructTotalCountCTEAndReturnResult(String query, Map paramsMap) { + String cteQuery = "WITH result_cte AS ("+query+"), totalCount_cte AS (SELECT COUNT(*) AS totalRows FROM result_cte) select * from totalCount_cte"; + return this.namedParameterJdbcTemplate.query(cteQuery, paramsMap, resultSet -> { + return resultSet.getLong("totalRows"); + }); } } diff --git a/health-services/household/src/main/java/org/egov/household/service/HouseholdService.java b/health-services/household/src/main/java/org/egov/household/service/HouseholdService.java index ec03d4b07fb..40b1f23dc38 100644 --- a/health-services/household/src/main/java/org/egov/household/service/HouseholdService.java +++ b/health-services/household/src/main/java/org/egov/household/service/HouseholdService.java @@ -108,7 +108,7 @@ public List create(HouseholdBulkRequest request, boolean isBulk) { return request.getHouseholds(); } - public List search(HouseholdSearch householdSearch, Integer limit, Integer offset, String tenantId, + public Tuple> search(HouseholdSearch householdSearch, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted) { String idFieldName = getIdFieldName(householdSearch); @@ -116,30 +116,26 @@ public List search(HouseholdSearch householdSearch, Integer limit, In List ids = (List) ReflectionUtils.invokeMethod(getIdMethod(Collections .singletonList(householdSearch)), householdSearch); - List households = householdRepository.findById(ids, - idFieldName, includeDeleted).stream() + Tuple> householdsTuple = householdRepository.findById(ids, + idFieldName, includeDeleted); + List households = householdsTuple.getY().stream() .filter(lastChangedSince(lastChangedSince)) .filter(havingTenantId(tenantId)) .filter(includeDeleted(includeDeleted)) .collect(Collectors.toList()); log.info("households found for search by id, size: {}", households.size()); - return households; - } - if(isProximityBasedSearch(householdSearch)) { - try { - List households = householdRepository.findByRadius(householdSearch, limit, offset, tenantId, includeDeleted); - log.info("households found for search, size: {}", households.size()); - return households; - } catch (QueryBuilderException e) { - log.error("error occurred while searching households", e); - throw new CustomException("ERROR_IN_QUERY", e.getMessage()); - } + return new Tuple<>(householdsTuple.getX(), households); } try { - List households = householdRepository.find(householdSearch, limit, offset, - tenantId, lastChangedSince, includeDeleted); - log.info("households found for search, size: {}", households.size()); - return households; + new Tuple<>(null, Collections.emptyList()); + Tuple> householdsTuple; + if(isProximityBasedSearch(householdSearch)) { + householdsTuple = householdRepository.findByRadius(householdSearch, limit, offset, tenantId, includeDeleted); + } else { + householdsTuple = householdRepository.find(householdSearch, limit, offset, tenantId, lastChangedSince, includeDeleted); + } + log.info("households found for search, size: {}", householdsTuple.getY().size()); + return householdsTuple; } catch (QueryBuilderException e) { log.error("error occurred while searching households", e); throw new CustomException("ERROR_IN_QUERY", e.getMessage()); @@ -209,13 +205,13 @@ public List delete(HouseholdBulkRequest request, boolean isBulk) { return request.getHouseholds(); } - public List findById(List houseHoldIds, String columnName, boolean includeDeleted){ + public Tuple> findById(List houseHoldIds, String columnName, boolean includeDeleted){ log.info("finding Households by Ids: {} with columnName: {} and includeDeleted: {}", houseHoldIds, columnName, includeDeleted); log.info("started finding Households by Ids"); - List households = householdRepository.findById(houseHoldIds, columnName, includeDeleted); - log.info("finished finding Households by Ids. Found {} Households", households.size()); - return households; + Tuple> householdsTuple = householdRepository.findById(houseHoldIds, columnName, includeDeleted); + log.info("finished finding Households by Ids. Found {} Households", householdsTuple.getY().size()); + return householdsTuple; } public void putInCache(List households) { diff --git a/health-services/household/src/main/java/org/egov/household/web/controllers/HouseholdApiController.java b/health-services/household/src/main/java/org/egov/household/web/controllers/HouseholdApiController.java index d37a560f8bb..347f3be8239 100644 --- a/health-services/household/src/main/java/org/egov/household/web/controllers/HouseholdApiController.java +++ b/health-services/household/src/main/java/org/egov/household/web/controllers/HouseholdApiController.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.ApiParam; import org.egov.common.contract.response.ResponseInfo; +import org.egov.common.ds.Tuple; import org.egov.common.models.household.Household; import org.egov.common.models.household.HouseholdBulkRequest; import org.egov.common.models.household.HouseholdBulkResponse; @@ -204,9 +205,9 @@ public ResponseEntity householdV1SearchPost(@ApiParam(val @ApiParam(value = "epoch of the time since when the changes on the object should be picked up. Search results from this parameter should include both newly created objects since this time as well as any modified objects since this time. This criterion is included to help polling clients to get the changes in system since a last time they synchronized with the platform. ") @Valid @RequestParam(value = "lastChangedSince", required = false) Long lastChangedSince, @ApiParam(value = "Used in search APIs to specify if (soft) deleted records should be included in search results.", defaultValue = "false") @Valid @RequestParam(value = "includeDeleted", required = false, defaultValue = "false") Boolean includeDeleted) { - List households = householdService.search(request.getHousehold(), limit, offset, tenantId, lastChangedSince, includeDeleted); + Tuple> tuple = householdService.search(request.getHousehold(), limit, offset, tenantId, lastChangedSince, includeDeleted); HouseholdBulkResponse response = HouseholdBulkResponse.builder().responseInfo(ResponseInfoFactory - .createResponseInfo(request.getRequestInfo(), true)).households(households).build(); + .createResponseInfo(request.getRequestInfo(), true)).totalCount(tuple.getX()).households(tuple.getY()).build(); return ResponseEntity.status(HttpStatus.OK).body(response); } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdBulkResponse.java index 58da38df8af..8336aad33be 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdBulkResponse.java @@ -35,6 +35,10 @@ public class HouseholdBulkResponse { @Valid private List households = null; + @JsonProperty("TotalCount") + @Valid + @Builder.Default + private Long totalCount = 0L; public HouseholdBulkResponse addHouseholdItem(Household householdItem) { if (this.households == null) { From 57859601f98727f6f6ce905bb115b2376350d986 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Mon, 23 Oct 2023 16:51:06 +0530 Subject: [PATCH 04/41] HLM-4062: Updated findbyid references --- .../member/validators/HmHouseholdValidator.java | 2 +- .../service/HouseholdMemberEnrichmentService.java | 2 +- .../household/HNonExsistentEntityValidator.java | 2 +- .../validators/household/HRowVersionValidator.java | 2 +- .../org/egov/household/service/HouseholdFindTest.java | 10 +++++----- .../service/HouseholdMemberCreateEnrichmentTest.java | 2 +- .../service/HouseholdMemberUpdateEnrichmentTest.java | 2 +- .../household/service/HouseholdMemberUpdateTest.java | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/health-services/household/src/main/java/org/egov/household/household/member/validators/HmHouseholdValidator.java b/health-services/household/src/main/java/org/egov/household/household/member/validators/HmHouseholdValidator.java index 7294e0a8296..ad9e9c81e84 100644 --- a/health-services/household/src/main/java/org/egov/household/household/member/validators/HmHouseholdValidator.java +++ b/health-services/household/src/main/java/org/egov/household/household/member/validators/HmHouseholdValidator.java @@ -53,7 +53,7 @@ public Map> validate(HouseholdMemberBulkRequest hou List houseHoldIds = getIdList(householdMembers, idMethod); log.info("finding valid household ids from household service"); - List validHouseHoldIds = householdService.findById(houseHoldIds, columnName, false); + List validHouseHoldIds = householdService.findById(houseHoldIds, columnName, false).getY(); log.info("getting unique household ids from valid household ids"); Set uniqueHoldIds = getSet(validHouseHoldIds, columnName == "id" ? "getId": "getClientReferenceId"); diff --git a/health-services/household/src/main/java/org/egov/household/service/HouseholdMemberEnrichmentService.java b/health-services/household/src/main/java/org/egov/household/service/HouseholdMemberEnrichmentService.java index d1943070ba8..afcc8124b8f 100644 --- a/health-services/household/src/main/java/org/egov/household/service/HouseholdMemberEnrichmentService.java +++ b/health-services/household/src/main/java/org/egov/household/service/HouseholdMemberEnrichmentService.java @@ -72,7 +72,7 @@ public void enrichHousehold(List householdMembers) { log.info("getting houseHoldIds for householdMembers"); List houseHoldIds = getIdList(householdMembers, idMethod); log.info("finding households from householdService with ids: {}", houseHoldIds); - List householdList = householdService.findById(houseHoldIds, columnName, false); + List householdList = householdService.findById(houseHoldIds, columnName, false).getY(); log.info("getting method for householdList with columnName: {}", columnName); Method householdMethod = getIdMethod(householdList, columnName); log.info("getting Map of households"); diff --git a/health-services/household/src/main/java/org/egov/household/validators/household/HNonExsistentEntityValidator.java b/health-services/household/src/main/java/org/egov/household/validators/household/HNonExsistentEntityValidator.java index 2ae5f41b4f5..a4ea82912ba 100644 --- a/health-services/household/src/main/java/org/egov/household/validators/household/HNonExsistentEntityValidator.java +++ b/health-services/household/src/main/java/org/egov/household/validators/household/HNonExsistentEntityValidator.java @@ -48,7 +48,7 @@ public Map> validate(HouseholdBulkRequest request) { if (!eMap.isEmpty()) { List entityIds = new ArrayList<>(eMap.keySet()); List existingEntities = householdRepository.findById(entityIds, - getIdFieldName(idMethod), false); + getIdFieldName(idMethod), false).getY(); List nonExistentEntities = checkNonExistentEntities(eMap, existingEntities, idMethod); nonExistentEntities.forEach(task -> { diff --git a/health-services/household/src/main/java/org/egov/household/validators/household/HRowVersionValidator.java b/health-services/household/src/main/java/org/egov/household/validators/household/HRowVersionValidator.java index a27dff638c0..e9ab1f1bae4 100644 --- a/health-services/household/src/main/java/org/egov/household/validators/household/HRowVersionValidator.java +++ b/health-services/household/src/main/java/org/egov/household/validators/household/HRowVersionValidator.java @@ -45,7 +45,7 @@ public Map> validate(HouseholdBulkRequest request) { if (!eMap.isEmpty()) { List entityIds = new ArrayList<>(eMap.keySet()); List existingEntities = repository.findById(entityIds, - getIdFieldName(idMethod), false); + getIdFieldName(idMethod), false).getY(); List entitiesWithMismatchedRowVersion = getEntitiesWithMismatchedRowVersion(eMap, existingEntities, idMethod); entitiesWithMismatchedRowVersion.forEach(individual -> { diff --git a/health-services/household/src/test/java/org/egov/household/service/HouseholdFindTest.java b/health-services/household/src/test/java/org/egov/household/service/HouseholdFindTest.java index 59071f2e372..4d419529569 100644 --- a/health-services/household/src/test/java/org/egov/household/service/HouseholdFindTest.java +++ b/health-services/household/src/test/java/org/egov/household/service/HouseholdFindTest.java @@ -39,14 +39,14 @@ void shouldOnlySearchByIdIfOnlyIdIsPresent() throws QueryBuilderException { HouseholdSearchRequest householdSearchRequest = HouseholdSearchRequest.builder() .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .household(HouseholdSearch.builder().id(Collections.singletonList("some-id")).build()).build(); - when(householdRepository.findById(anyList(), eq("id"), anyBoolean())) + when(householdRepository.findById(anyList(), eq("id"), anyBoolean()).getY()) .thenReturn(Collections.emptyList()); householdService.search(householdSearchRequest.getHousehold(), 10, 0, "default", null, false); verify(householdRepository, times(1)) - .findById(anyList(), eq("id"), anyBoolean()); + .findById(anyList(), eq("id"), anyBoolean()).getY(); } @Test @@ -55,7 +55,7 @@ void shouldOnlySearchByClientReferenceIdIfOnlyClientReferenceIdIsPresent() throw HouseholdSearchRequest householdSearchRequest = HouseholdSearchRequest.builder() .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .household(HouseholdSearch.builder().clientReferenceId(Collections.singletonList("some-id")).build()).build(); - when(householdRepository.findById(anyList(), eq("clientReferenceId"), anyBoolean())) + when(householdRepository.findById(anyList(), eq("clientReferenceId"), anyBoolean()).getY()) .thenReturn(Collections.emptyList()); householdService.search(householdSearchRequest.getHousehold(), 10, 0, "default", @@ -73,7 +73,7 @@ void shouldNotCallFindByIfIfMoreParametersAreAvailable() throws QueryBuilderExce .household(HouseholdSearch.builder().id(Collections.singletonList("someid")) .clientReferenceId(Collections.singletonList("some-id")).build()).build(); when(householdRepository.find(any(HouseholdSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(Collections.emptyList()); + anyInt(), anyString(), anyLong(), anyBoolean()).getY()).thenReturn(Collections.emptyList()); householdService.search(householdSearchRequest.getHousehold(), 10, 0, "default", 0L, false); @@ -90,7 +90,7 @@ void shouldCallFindIfMoreParametersAreAvailable() throws QueryBuilderException { .household(HouseholdSearch.builder().id(Collections.singletonList("someid")) .clientReferenceId(Collections.singletonList("some-id")).build()).build(); when(householdRepository.find(any(HouseholdSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(Collections.emptyList()); + anyInt(), anyString(), anyLong(), anyBoolean()).getY()).thenReturn(Collections.emptyList()); householdService.search(householdSearchRequest.getHousehold(), 10, 0, "default", 0L, false); diff --git a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberCreateEnrichmentTest.java b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberCreateEnrichmentTest.java index 5325b641339..acf740e7662 100644 --- a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberCreateEnrichmentTest.java +++ b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberCreateEnrichmentTest.java @@ -44,7 +44,7 @@ private void mockHouseholdFindIds() { any(List.class), any(String.class), any(Boolean.class) - )).thenReturn( + ).getY()).thenReturn( Collections.singletonList( Household.builder().id("some-household-id").clientReferenceId("some-client-ref-id").build()) ); diff --git a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateEnrichmentTest.java b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateEnrichmentTest.java index f848169ab6d..8207e86ec05 100644 --- a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateEnrichmentTest.java +++ b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateEnrichmentTest.java @@ -43,7 +43,7 @@ private void mockHouseholdFindIds() { any(List.class), any(String.class), any(Boolean.class) - )).thenReturn( + ).getY()).thenReturn( Collections.singletonList( Household.builder().id("some-household-id").clientReferenceId("some-client-ref-id").build()) ); diff --git a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateTest.java b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateTest.java index 4c5bfc4ecb4..b9aa62b8887 100644 --- a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateTest.java +++ b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateTest.java @@ -112,7 +112,7 @@ private void mockHouseholdFindIds() { any(List.class), any(String.class), any(Boolean.class) - )).thenReturn( + ).getY()).thenReturn( Collections.singletonList( Household.builder().id("some-household-id").clientReferenceId("some-client-ref-id").build()) ); From 7041a617dc43a3a23eee3cbae958c309b46dc84b Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Thu, 12 Oct 2023 15:08:13 +0530 Subject: [PATCH 05/41] HLM-3376: review comments commit --- .../contracts/referral-management.yml | 6 +- .../models/referralmanagement/Referral.java | 14 ++- .../ReferralBulkRequest.java | 1 - .../ReferralBulkResponse.java | 1 - .../referralmanagement/ReferralRequest.java | 1 - .../referralmanagement/ReferralResponse.java | 1 - .../referralmanagement/ReferralSearch.java | 1 - .../ReferralSearchRequest.java | 1 - .../sideeffect/SideEffect.java | 1 - .../sideeffect/SideEffectBulkRequest.java | 1 - .../sideeffect/SideEffectBulkResponse.java | 1 - .../sideeffect/SideEffectRequest.java | 1 - .../sideeffect/SideEffectResponse.java | 1 - .../sideeffect/SideEffectSearch.java | 1 - .../sideeffect/SideEffectSearchRequest.java | 1 - .../egov/referralmanagement/Constants.java | 4 +- .../rowmapper/ReferralRowMapper.java | 6 +- .../RmFacilityEntitiesIdValidator.java | 6 +- .../RmProjectBeneficiaryIdValidator.java | 97 +++++++++++++++++++ .../RmProjectEntitiesIdValidator.java | 12 +-- .../validator/RmReferrerIdValidator.java | 50 ++++++++++ .../V20230928113400__referral_create_ddl.sql | 6 +- .../referral-management-persister.yml | 16 +-- 23 files changed, 181 insertions(+), 49 deletions(-) create mode 100644 health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java create mode 100644 health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java diff --git a/docs/health-api-specs/contracts/referral-management.yml b/docs/health-api-specs/contracts/referral-management.yml index d93dbdd05d5..2beb107bd08 100644 --- a/docs/health-api-specs/contracts/referral-management.yml +++ b/docs/health-api-specs/contracts/referral-management.yml @@ -663,17 +663,17 @@ definitions: minLength: 2 maxLength: 64 description: Project Beneficiary Client Reference Id - referringById: + referrerId: type: string minLength: 2 maxLength: 64 description: Worker Id that is referring the Beneficiary - referredToId: + recipientId: type: string minLength: 2 maxLength: 64 description: Individual or Facility Id whom the Beneficiary is referred to. - referredToType: + recipientType: type: string description: Individual or Facility reasons: diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/Referral.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/Referral.java index 50612ab91dc..f40d31b4ded 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/Referral.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/Referral.java @@ -1,7 +1,6 @@ package org.egov.common.models.referralmanagement; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import digit.models.coremodels.AuditDetails; import lombok.AllArgsConstructor; @@ -19,7 +18,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class Referral { @JsonProperty("id") @@ -38,16 +36,16 @@ public class Referral { @Size(min = 2, max = 64) private String projectBeneficiaryClientReferenceId = null; - @JsonProperty("referredById") + @JsonProperty("referrerId") @Size(min = 2, max = 64) - private String referredById = null; + private String referrerId = null; - @JsonProperty("referredToType") - private String referredToType = null; + @JsonProperty("recipientType") + private String recipientType = null; - @JsonProperty("referredToId") + @JsonProperty("recipientId") @Size(min = 2, max = 64) - private String referredToId = null; + private String recipientId = null; @JsonProperty("reasons") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java index fd5621197ed..30ce612f1d4 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java @@ -18,7 +18,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class ReferralBulkRequest { @JsonProperty("RequestInfo") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java index 3dfbd9dff25..c8894d79f0b 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java @@ -17,7 +17,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class ReferralBulkResponse { @JsonProperty("ResponseInfo") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java index 8ad1990acc9..47da2b394ae 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java @@ -15,7 +15,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class ReferralRequest { @JsonProperty("RequestInfo") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java index b367fb35a98..8afacbce8f8 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java @@ -15,7 +15,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class ReferralResponse { @JsonProperty("ResponseInfo") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java index 31c9a223704..eb4303ec120 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java @@ -13,7 +13,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class ReferralSearch { @JsonProperty("id") private List id = null; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java index d6ae41f8f01..2bad3717401 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java @@ -15,7 +15,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class ReferralSearchRequest { @JsonProperty("RequestInfo") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java index badde74f599..fa437ee901d 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java @@ -18,7 +18,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class SideEffect { @JsonProperty("id") diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java index 51319d73b51..274a1b06678 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java @@ -18,7 +18,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class SideEffectBulkRequest { @JsonProperty("RequestInfo") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java index bfcfda3dae4..deae170a7f0 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java @@ -17,7 +17,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class SideEffectBulkResponse { @JsonProperty("ResponseInfo") diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java index 9de2e92b66e..32742cfc2a7 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java @@ -15,7 +15,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class SideEffectRequest { @JsonProperty("RequestInfo") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java index 9e96194482c..3f381882570 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java @@ -15,7 +15,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class SideEffectResponse { @JsonProperty("ResponseInfo") diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java index 3183a2533d6..8cce639ef03 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java @@ -13,7 +13,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class SideEffectSearch { @JsonProperty("id") private List id = null; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java index 69cc688f884..16095101872 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java @@ -15,7 +15,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -@JsonIgnoreProperties(ignoreUnknown = true) public class SideEffectSearchRequest { @JsonProperty("RequestInfo") @NotNull diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/Constants.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/Constants.java index 8aa7a484a82..339f81dd3b5 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/Constants.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/Constants.java @@ -10,6 +10,6 @@ public interface Constants { String MDMS_RESPONSE = "MdmsRes"; String INTERNAL_SERVER_ERROR = "INTERNAL_SERVER_ERROR"; String GET_ID = "getId"; - String PROJECT_STAFF = "project_staff"; - String FACILITY = "facility"; + String STAFF = "STAFF"; + String FACILITY = "WAREHOUSE"; } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/ReferralRowMapper.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/ReferralRowMapper.java index a7a3692d3ed..277cd5baef9 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/ReferralRowMapper.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/ReferralRowMapper.java @@ -65,9 +65,9 @@ public Referral mapRow(ResultSet resultSet, int i) throws SQLException { .clientReferenceId(resultSet.getString("clientreferenceid")) .projectBeneficiaryId(resultSet.getString("projectBeneficiaryId")) .projectBeneficiaryClientReferenceId(resultSet.getString("projectbeneficiaryclientreferenceid")) - .referredById(resultSet.getString("referredById")) - .referredToId(resultSet.getString("referredToId")) - .referredToType(resultSet.getString("referredToType")) + .referrerId(resultSet.getString("referrerId")) + .recipientId(resultSet.getString("recipientId")) + .recipientType(resultSet.getString("recipientType")) .sideEffect(sideEffect) .tenantId(resultSet.getString("tenantid")) .reasons(resultSet.getString("reasons") == null ? null : objectMapper.readValue(resultSet.getString("reasons"), ArrayList.class)) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmFacilityEntitiesIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmFacilityEntitiesIdValidator.java index 83d4377ee0c..ac79e49cc04 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmFacilityEntitiesIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmFacilityEntitiesIdValidator.java @@ -58,8 +58,8 @@ public Map> validate(ReferralBulkRequest request) { final List facilityIdList = new ArrayList<>(); try { referralList.forEach(referral -> { - if(referral.getReferredToType().equals(FACILITY)){ - addIgnoreNull(facilityIdList, referral.getReferredToId()); + if(referral.getRecipientType().equals(FACILITY)){ + addIgnoreNull(facilityIdList, referral.getRecipientId()); } }); FacilitySearch facilitySearch = FacilitySearch.builder() @@ -82,7 +82,7 @@ public Map> validate(ReferralBulkRequest request) { final List existingFacilityIds = new ArrayList<>(); existingFacilityList.forEach(facility -> existingFacilityIds.add(facility.getId())); List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> - (!entity.getReferredToType().equals(FACILITY) || !existingFacilityIds.contains(entity.getReferredToId())) + (!entity.getRecipientType().equals(FACILITY) || !existingFacilityIds.contains(entity.getRecipientId())) ).collect(Collectors.toList()); invalidEntities.forEach(referral -> { Error error = getErrorForNonExistentEntity(); diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java new file mode 100644 index 00000000000..923d5dbb1c9 --- /dev/null +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java @@ -0,0 +1,97 @@ +package org.egov.referralmanagement.validator; + +import lombok.extern.slf4j.Slf4j; +import org.egov.common.data.query.exception.QueryBuilderException; +import org.egov.common.http.client.ServiceRequestClient; +import org.egov.common.models.Error; +import org.egov.common.models.project.BeneficiaryBulkResponse; +import org.egov.common.models.project.BeneficiarySearchRequest; +import org.egov.common.models.project.ProjectBeneficiary; +import org.egov.common.models.project.ProjectBeneficiarySearch; +import org.egov.common.models.referralmanagement.Referral; +import org.egov.common.models.referralmanagement.ReferralBulkRequest; +import org.egov.common.validator.Validator; +import org.egov.referralmanagement.config.ReferralManagementConfiguration; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; + + +/**/ +@Component +@Order(value = 3) +@Slf4j +public class RmProjectBeneficiaryIdValidator implements Validator { + private final ServiceRequestClient serviceRequestClient; + private final ReferralManagementConfiguration referralManagementConfiguration; + + public RmProjectBeneficiaryIdValidator(ServiceRequestClient serviceRequestClient, ReferralManagementConfiguration referralManagementConfiguration) { + this.serviceRequestClient = serviceRequestClient; + this.referralManagementConfiguration = referralManagementConfiguration; + } + + @Override + public Map> validate(ReferralBulkRequest request) { + log.info("validating project beneficiary id"); + Map> errorDetailsMap = new HashMap<>(); + List entities = request.getReferrals(); + Map> tenantIdReferralMap = entities.stream().collect(Collectors.groupingBy(Referral::getTenantId)); + tenantIdReferralMap.forEach((tenantId, referralList) -> { + List existingProjectBeneficiaries = null; + final List projectBeneficiaryIdList = new ArrayList<>(); + final List projectBeneficiaryClientReferenceIdList = new ArrayList<>(); + try { + referralList.forEach(referral -> { + addIgnoreNull(projectBeneficiaryIdList, referral.getProjectBeneficiaryId()); + addIgnoreNull(projectBeneficiaryClientReferenceIdList, referral.getProjectBeneficiaryClientReferenceId()); + }); + ProjectBeneficiarySearch projectBeneficiarySearch = ProjectBeneficiarySearch.builder() + .id(projectBeneficiaryIdList.isEmpty() ? null : projectBeneficiaryIdList) + .clientReferenceId(projectBeneficiaryClientReferenceIdList.isEmpty() ? null : projectBeneficiaryClientReferenceIdList) + .build(); + BeneficiaryBulkResponse beneficiaryBulkResponse = serviceRequestClient.fetchResult( + new StringBuilder(referralManagementConfiguration.getProjectHost() + + referralManagementConfiguration.getProjectBeneficiarySearchUrl() + +"?limit=" + entities.size() + + "&offset=0&tenantId=" + tenantId), + BeneficiarySearchRequest.builder().requestInfo(request.getRequestInfo()).projectBeneficiary(projectBeneficiarySearch).build(), + BeneficiaryBulkResponse.class + ); + existingProjectBeneficiaries = beneficiaryBulkResponse.getProjectBeneficiaries(); + } catch (QueryBuilderException e) { + existingProjectBeneficiaries = Collections.emptyList(); + } catch (Exception e) { + throw new RuntimeException(e); + } + final List existingProjectBeneficiaryIds = new ArrayList<>(); + final List existingProjectBeneficiaryClientReferenceIds = new ArrayList<>(); + existingProjectBeneficiaries.forEach(projectBeneficiary -> { + existingProjectBeneficiaryIds.add(projectBeneficiary.getId()); + existingProjectBeneficiaryClientReferenceIds.add(projectBeneficiary.getClientReferenceId()); + }); + List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> + !existingProjectBeneficiaryIds.contains(entity.getProjectBeneficiaryId()) + && !existingProjectBeneficiaryClientReferenceIds.contains(entity.getProjectBeneficiaryClientReferenceId()) + ).collect(Collectors.toList()); + invalidEntities.forEach(referral -> { + Error error = getErrorForNonExistentEntity(); + populateErrorDetails(referral, error, errorDetailsMap); + }); + }); + return errorDetailsMap; + } + private void addIgnoreNull(List list, String item) { + if(Objects.nonNull(item)) list.add(item); + } +} diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectEntitiesIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectEntitiesIdValidator.java index 61c87b9f4ab..bc7ab32e376 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectEntitiesIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectEntitiesIdValidator.java @@ -60,16 +60,16 @@ public Map> validate(ReferralBulkRequest request) { if (!referralList.isEmpty()) { List existingProjectBeneficiaries = null; List existingProjectStaffList = null; - final List projectBeneficiaryIdList = new ArrayList<>(); + final List projectBeneficiaryIdList = new ArrayList<>(); // done final List projectBeneficiaryClientReferenceIdList = new ArrayList<>(); final List projectStaffIdList = new ArrayList<>(); try { referralList.forEach(referral -> { addIgnoreNull(projectBeneficiaryIdList, referral.getProjectBeneficiaryId()); addIgnoreNull(projectBeneficiaryClientReferenceIdList, referral.getProjectBeneficiaryClientReferenceId()); - addIgnoreNull(projectStaffIdList, referral.getReferredById()); - if(referral.getReferredToType().equals(PROJECT_STAFF)){ - addIgnoreNull(projectStaffIdList, referral.getReferredToId()); + addIgnoreNull(projectStaffIdList, referral.getReferrerId()); + if(referral.getRecipientType().equals(PROJECT_STAFF)){ + addIgnoreNull(projectStaffIdList, referral.getRecipientId()); } }); ProjectBeneficiarySearch projectBeneficiarySearch = ProjectBeneficiarySearch.builder() @@ -113,10 +113,10 @@ public Map> validate(ReferralBulkRequest request) { final List existingProjectStaffIds = new ArrayList<>(); existingProjectStaffList.forEach(projectStaff -> existingProjectStaffIds.add(projectStaff.getId())); List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> - !existingProjectStaffIds.contains(entity.getReferredById()) + !existingProjectStaffIds.contains(entity.getReferrerId()) && !existingProjectBeneficiaryIds.contains(entity.getProjectBeneficiaryId()) && !existingProjectBeneficiaryClientReferenceIds.contains(entity.getProjectBeneficiaryClientReferenceId()) - && (!entity.getReferredToType().equals(PROJECT_STAFF) || !existingProjectStaffIds.contains(entity.getReferredToId())) + && (!entity.getRecipientType().equals(PROJECT_STAFF) || !existingProjectStaffIds.contains(entity.getRecipientId())) ).collect(Collectors.toList()); invalidEntities.forEach(referral -> { Error error = getErrorForNonExistentEntity(); diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java new file mode 100644 index 00000000000..3f8048bf323 --- /dev/null +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java @@ -0,0 +1,50 @@ +package org.egov.referralmanagement.validator; + +import lombok.extern.slf4j.Slf4j; +import org.egov.common.http.client.ServiceRequestClient; +import org.egov.common.models.Error; +import org.egov.common.models.project.ProjectStaff; +import org.egov.common.models.referralmanagement.Referral; +import org.egov.common.models.referralmanagement.ReferralBulkRequest; +import org.egov.common.validator.Validator; +import org.egov.referralmanagement.config.ReferralManagementConfiguration; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +@Component +@Order(value = 3) +@Slf4j +public class RmReferrerIdValidator implements Validator { + + private final ServiceRequestClient serviceRequestClient; + private final ReferralManagementConfiguration referralManagementConfiguration; + + public RmReferrerIdValidator(ServiceRequestClient serviceRequestClient, ReferralManagementConfiguration referralManagementConfiguration) { + this.serviceRequestClient = serviceRequestClient; + this.referralManagementConfiguration = referralManagementConfiguration; + } + + @Override + public Map> validate(ReferralBulkRequest request) { + log.info("validating project beneficiary id"); + Map> errorDetailsMap = new HashMap<>(); + List entities = request.getReferrals(); + Map> tenantIdReferralMap = entities.stream().collect(Collectors.groupingBy(Referral::getTenantId)); + tenantIdReferralMap.forEach((tenantId, referralList) -> { + List existingProjectStaffList = new ArrayList<>(); + referralList.forEach(referral -> addIgnoreNull()); + + }); + return errorDetailsMap; + } + private void addIgnoreNull(List list, String item) { + if(Objects.nonNull(item)) list.add(item); + } +} diff --git a/health-services/referralmanagement/src/main/resources/db/migration/main/V20230928113400__referral_create_ddl.sql b/health-services/referralmanagement/src/main/resources/db/migration/main/V20230928113400__referral_create_ddl.sql index 15ed8373d7f..b17f93e6ee5 100644 --- a/health-services/referralmanagement/src/main/resources/db/migration/main/V20230928113400__referral_create_ddl.sql +++ b/health-services/referralmanagement/src/main/resources/db/migration/main/V20230928113400__referral_create_ddl.sql @@ -5,9 +5,9 @@ CREATE TABLE REFERRAL tenantId character varying(1000), projectBeneficiaryId character varying(64), projectBeneficiaryClientReferenceId character varying(64), - referredById character varying(100), - referredToId character varying(100), - referredToType character varying(100), + referrerId character varying(100), + recipientId character varying(100), + recipientType character varying(100), reasons jsonb, sideEffectId character varying(100), sideEffectClientReferenceId character varying(100), diff --git a/health-services/referralmanagement/src/main/resources/referral-management-persister.yml b/health-services/referralmanagement/src/main/resources/referral-management-persister.yml index a3342191930..c4bec84ddd0 100644 --- a/health-services/referralmanagement/src/main/resources/referral-management-persister.yml +++ b/health-services/referralmanagement/src/main/resources/referral-management-persister.yml @@ -75,7 +75,7 @@ serviceMaps: fromTopic: save-referral-topic isTransaction: true queryMaps: - - query: INSERT INTO REFERRAL(id, clientReferenceId, tenantId, projectBeneficiaryId, projectBeneficiaryClientReferenceId, referredById, referredToId, referredToType, reasons, sideEffectId, createdBy, createdTime, lastModifiedBy, lastModifiedTime, clientCreatedBy, clientCreatedTime, clientLastModifiedBy, clientLastModifiedTime, rowVersion, isDeleted) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); + - query: INSERT INTO REFERRAL(id, clientReferenceId, tenantId, projectBeneficiaryId, projectBeneficiaryClientReferenceId, referrerId, recipientId, recipientType, reasons, sideEffectId, createdBy, createdTime, lastModifiedBy, lastModifiedTime, clientCreatedBy, clientCreatedTime, clientLastModifiedBy, clientLastModifiedTime, rowVersion, isDeleted) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); basePath: $.* jsonMaps: - jsonPath: $.*.id @@ -83,9 +83,9 @@ serviceMaps: - jsonPath: $.*.tenantId - jsonPath: $.*.projectBeneficiaryId - jsonPath: $.*.projectBeneficiaryClientReferenceId - - jsonPath: $.*.referredById - - jsonPath: $.*.referredToId - - jsonPath: $.*.referredToType + - jsonPath: $.*.referrerId + - jsonPath: $.*.recipientId + - jsonPath: $.*.recipientType - jsonPath: $.*.reasons type: JSON dbType: JSONB @@ -106,15 +106,15 @@ serviceMaps: fromTopic: update-referral-topic isTransaction: true queryMaps: - - query: UPDATE REFERRAL SET tenantId = ?, projectBeneficiaryId = ?, projectBeneficiaryClientReferenceId = ?, referredById = ?, referredToId = ?, referredToType = ?, reasons = ?, sideEffectId = ?, createdBy = ?, createdTime = ?, lastModifiedBy = ?, lastModifiedTime = ?, clientCreatedBy = ?, clientCreatedTime = ?, clientLastModifiedBy = ?, clientLastModifiedTime = ?, rowVersion = ?, isDeleted WHERE ID = ?; + - query: UPDATE REFERRAL SET tenantId = ?, projectBeneficiaryId = ?, projectBeneficiaryClientReferenceId = ?, referrerId = ?, recipientId = ?, recipientType = ?, reasons = ?, sideEffectId = ?, createdBy = ?, createdTime = ?, lastModifiedBy = ?, lastModifiedTime = ?, clientCreatedBy = ?, clientCreatedTime = ?, clientLastModifiedBy = ?, clientLastModifiedTime = ?, rowVersion = ?, isDeleted WHERE ID = ?; basePath: $.* jsonMaps: - jsonPath: $.*.tenantId - jsonPath: $.*.projectBeneficiaryId - jsonPath: $.*.projectBeneficiaryClientReferenceId - - jsonPath: $.*.referredById - - jsonPath: $.*.referredToId - - jsonPath: $.*.referredToType + - jsonPath: $.*.referrerId + - jsonPath: $.*.recipientId + - jsonPath: $.*.recipientType - jsonPath: $.*.reasons type: JSON dbType: JSONB From f57c19eb4c25d32053ad3eafae333ba1fce68495 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Sun, 15 Oct 2023 13:10:48 +0530 Subject: [PATCH 06/41] HLM-3069: side effect code comments, code refactor --- .../RmProjectBeneficiaryIdValidator.java | 19 ++++++++++--------- .../RmProjectEntitiesIdValidator.java | 6 +++--- .../validator/RmReferrerIdValidator.java | 5 ++--- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java index 923d5dbb1c9..545385de37b 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java @@ -12,6 +12,7 @@ import org.egov.common.models.referralmanagement.ReferralBulkRequest; import org.egov.common.validator.Validator; import org.egov.referralmanagement.config.ReferralManagementConfiguration; +import org.egov.tracer.model.CustomException; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @@ -51,15 +52,15 @@ public Map> validate(ReferralBulkRequest request) { List existingProjectBeneficiaries = null; final List projectBeneficiaryIdList = new ArrayList<>(); final List projectBeneficiaryClientReferenceIdList = new ArrayList<>(); + referralList.forEach(referral -> { + addIgnoreNull(projectBeneficiaryIdList, referral.getProjectBeneficiaryId()); + addIgnoreNull(projectBeneficiaryClientReferenceIdList, referral.getProjectBeneficiaryClientReferenceId()); + }); + ProjectBeneficiarySearch projectBeneficiarySearch = ProjectBeneficiarySearch.builder() + .id(projectBeneficiaryIdList.isEmpty() ? null : projectBeneficiaryIdList) + .clientReferenceId(projectBeneficiaryClientReferenceIdList.isEmpty() ? null : projectBeneficiaryClientReferenceIdList) + .build(); try { - referralList.forEach(referral -> { - addIgnoreNull(projectBeneficiaryIdList, referral.getProjectBeneficiaryId()); - addIgnoreNull(projectBeneficiaryClientReferenceIdList, referral.getProjectBeneficiaryClientReferenceId()); - }); - ProjectBeneficiarySearch projectBeneficiarySearch = ProjectBeneficiarySearch.builder() - .id(projectBeneficiaryIdList.isEmpty() ? null : projectBeneficiaryIdList) - .clientReferenceId(projectBeneficiaryClientReferenceIdList.isEmpty() ? null : projectBeneficiaryClientReferenceIdList) - .build(); BeneficiaryBulkResponse beneficiaryBulkResponse = serviceRequestClient.fetchResult( new StringBuilder(referralManagementConfiguration.getProjectHost() + referralManagementConfiguration.getProjectBeneficiarySearchUrl() @@ -72,7 +73,7 @@ public Map> validate(ReferralBulkRequest request) { } catch (QueryBuilderException e) { existingProjectBeneficiaries = Collections.emptyList(); } catch (Exception e) { - throw new RuntimeException(e); + throw new CustomException("Project Beneficiaries failed to fetch", "Exception : "+e.getMessage()); } final List existingProjectBeneficiaryIds = new ArrayList<>(); final List existingProjectBeneficiaryClientReferenceIds = new ArrayList<>(); diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectEntitiesIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectEntitiesIdValidator.java index bc7ab32e376..a36d725f61e 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectEntitiesIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectEntitiesIdValidator.java @@ -28,7 +28,7 @@ import java.util.Objects; import java.util.stream.Collectors; -import static org.egov.referralmanagement.Constants.PROJECT_STAFF; +import static org.egov.referralmanagement.Constants.STAFF; import static org.egov.common.utils.CommonUtils.notHavingErrors; import static org.egov.common.utils.CommonUtils.populateErrorDetails; import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; @@ -68,7 +68,7 @@ public Map> validate(ReferralBulkRequest request) { addIgnoreNull(projectBeneficiaryIdList, referral.getProjectBeneficiaryId()); addIgnoreNull(projectBeneficiaryClientReferenceIdList, referral.getProjectBeneficiaryClientReferenceId()); addIgnoreNull(projectStaffIdList, referral.getReferrerId()); - if(referral.getRecipientType().equals(PROJECT_STAFF)){ + if(referral.getRecipientType().equals(STAFF)){ addIgnoreNull(projectStaffIdList, referral.getRecipientId()); } }); @@ -116,7 +116,7 @@ public Map> validate(ReferralBulkRequest request) { !existingProjectStaffIds.contains(entity.getReferrerId()) && !existingProjectBeneficiaryIds.contains(entity.getProjectBeneficiaryId()) && !existingProjectBeneficiaryClientReferenceIds.contains(entity.getProjectBeneficiaryClientReferenceId()) - && (!entity.getRecipientType().equals(PROJECT_STAFF) || !existingProjectStaffIds.contains(entity.getRecipientId())) + && (!entity.getRecipientType().equals(STAFF) || !existingProjectStaffIds.contains(entity.getRecipientId())) ).collect(Collectors.toList()); invalidEntities.forEach(referral -> { Error error = getErrorForNonExistentEntity(); diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java index 3f8048bf323..c2a399d74a2 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java @@ -38,9 +38,8 @@ public Map> validate(ReferralBulkRequest request) { List entities = request.getReferrals(); Map> tenantIdReferralMap = entities.stream().collect(Collectors.groupingBy(Referral::getTenantId)); tenantIdReferralMap.forEach((tenantId, referralList) -> { - List existingProjectStaffList = new ArrayList<>(); - referralList.forEach(referral -> addIgnoreNull()); - + List existingProjectStaffList = new ArrayList<>(); + referralList.forEach(referral -> addIgnoreNull(existingProjectStaffList, referral.getReferrerId())); }); return errorDetailsMap; } From 2d61014fc4ba34e608cd3cc38c3ad8c2e7c9136f Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Mon, 16 Oct 2023 17:56:31 +0530 Subject: [PATCH 07/41] HLM-3376: code review comments and code refactoring --- .../ReferralBulkRequest.java | 5 +- .../ReferralBulkResponse.java | 5 +- .../referralmanagement/ReferralRequest.java | 1 - .../referralmanagement/ReferralResponse.java | 1 - .../referralmanagement/ReferralSearch.java | 13 ++- .../ReferralSearchRequest.java | 1 - .../sideeffect/SideEffect.java | 1 - .../sideeffect/SideEffectBulkRequest.java | 5 +- .../sideeffect/SideEffectBulkResponse.java | 5 +- .../sideeffect/SideEffectRequest.java | 1 - .../sideeffect/SideEffectResponse.java | 1 - .../sideeffect/SideEffectSearch.java | 1 - .../sideeffect/SideEffectSearchRequest.java | 1 - .../consumer/ReferralManagementConsumer.java | 6 +- .../consumer/SideEffectConsumer.java | 6 +- .../service/FacilityService.java | 68 ++++++++++++++ .../service/ReferralManagementService.java | 15 ++- .../util/ValidatorUtil.java | 24 +++++ .../RmProjectBeneficiaryIdValidator.java | 11 ++- .../validator/RmRecipientIdValidator.java | 94 +++++++++++++++++++ .../validator/RmReferrerIdValidator.java | 43 ++++++++- .../validator/RmSideEffectIdValidator.java | 83 ++++++++++++++++ 22 files changed, 356 insertions(+), 35 deletions(-) create mode 100644 health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/FacilityService.java create mode 100644 health-services/referralmanagement/src/main/java/org/egov/referralmanagement/util/ValidatorUtil.java create mode 100644 health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java create mode 100644 health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java index 30ce612f1d4..88a3066f6b5 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java @@ -1,6 +1,5 @@ package org.egov.common.models.referralmanagement; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; @@ -13,6 +12,7 @@ import javax.validation.constraints.Size; import java.util.ArrayList; import java.util.List; +import java.util.Objects; @Data @NoArgsConstructor @@ -31,7 +31,8 @@ public class ReferralBulkRequest { private List referrals = new ArrayList<>(); public ReferralBulkRequest addReferralItem(Referral referralItem) { - this.referrals.add(referralItem); + if(Objects.nonNull(Objects.nonNull(referralItem))) + this.referrals.add(referralItem); return this; } } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java index c8894d79f0b..dde1bc6cba6 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java @@ -1,6 +1,5 @@ package org.egov.common.models.referralmanagement; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; @@ -12,6 +11,7 @@ import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; +import java.util.Objects; @Data @NoArgsConstructor @@ -29,7 +29,8 @@ public class ReferralBulkResponse { private List referrals = new ArrayList<>(); public ReferralBulkResponse addReferralItem(Referral referralItem) { - this.referrals.add(referralItem); + if(Objects.nonNull(referralItem)) + this.referrals.add(referralItem); return this; } } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java index 47da2b394ae..7a4da152c86 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java @@ -1,6 +1,5 @@ package org.egov.common.models.referralmanagement; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java index 8afacbce8f8..d6bd0ec95f7 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java @@ -1,6 +1,5 @@ package org.egov.common.models.referralmanagement; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java index eb4303ec120..79c61b80dfb 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java @@ -1,6 +1,5 @@ package org.egov.common.models.referralmanagement; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; @@ -25,4 +24,16 @@ public class ReferralSearch { @JsonProperty("projectBeneficiaryClientReferenceId") private List projectBeneficiaryClientReferenceId = null; + + @JsonProperty("sideEffectId") + private List sideEffectId = null; + + @JsonProperty("sideEffectClientReferenceId") + private List sideEffectClientReferenceId = null; + + @JsonProperty("referrerId") + private List referrerId = null; + + @JsonProperty("recipientId") + private List recipientId = null; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java index 2bad3717401..99c4efab962 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java @@ -1,6 +1,5 @@ package org.egov.common.models.referralmanagement; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java index fa437ee901d..df7da2a83e0 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java @@ -1,7 +1,6 @@ package org.egov.common.models.referralmanagement.sideeffect; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import digit.models.coremodels.AuditDetails; import lombok.AllArgsConstructor; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java index 274a1b06678..6da7bcf7000 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java @@ -1,6 +1,5 @@ package org.egov.common.models.referralmanagement.sideeffect; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; @@ -13,6 +12,7 @@ import javax.validation.constraints.Size; import java.util.ArrayList; import java.util.List; +import java.util.Objects; @Data @NoArgsConstructor @@ -31,7 +31,8 @@ public class SideEffectBulkRequest { private List sideEffects = new ArrayList<>(); public SideEffectBulkRequest addSideEffectItem(SideEffect sideEffectItem) { - this.sideEffects.add(sideEffectItem); + if(Objects.nonNull(sideEffectItem)) + this.sideEffects.add(sideEffectItem); return this; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java index deae170a7f0..1030c5328f2 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java @@ -1,6 +1,5 @@ package org.egov.common.models.referralmanagement.sideeffect; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; @@ -12,6 +11,7 @@ import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; +import java.util.Objects; @Data @NoArgsConstructor @@ -30,7 +30,8 @@ public class SideEffectBulkResponse { private List sideEffects = new ArrayList<>(); public SideEffectBulkResponse addSideEffectItem(SideEffect sideEffectItem) { - this.sideEffects.add(sideEffectItem); + if(Objects.nonNull(sideEffectItem)) + this.sideEffects.add(sideEffectItem); return this; } } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java index 32742cfc2a7..b9de9d6aa2b 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java @@ -1,6 +1,5 @@ package org.egov.common.models.referralmanagement.sideeffect; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java index 3f381882570..b17c6d9ce7d 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java @@ -1,6 +1,5 @@ package org.egov.common.models.referralmanagement.sideeffect; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java index 8cce639ef03..bee88934df6 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java @@ -1,6 +1,5 @@ package org.egov.common.models.referralmanagement.sideeffect; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java index 16095101872..2692e9b1d96 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java @@ -1,6 +1,5 @@ package org.egov.common.models.referralmanagement.sideeffect; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/consumer/ReferralManagementConsumer.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/consumer/ReferralManagementConsumer.java index d4902d7ea33..c62c099415a 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/consumer/ReferralManagementConsumer.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/consumer/ReferralManagementConsumer.java @@ -39,7 +39,7 @@ public void bulkCreate(Map consumerRecord, } catch (Exception exception) { log.error("Error in Referral consumer bulk create", exception); log.error("Exception trace: ", ExceptionUtils.getStackTrace(exception)); - throw new CustomException("HCM_ADRM_REFERRAL_MANAGEMENT_CREATE", exception.getMessage()); + throw new CustomException("HCM_REFERRAL_MANAGEMENT_REFERRAL_CREATE", exception.getMessage()); } } @@ -52,7 +52,7 @@ public void bulkUpdate(Map consumerRecord, } catch (Exception exception) { log.error("Error in Referral consumer bulk update", exception); log.error("Exception trace: ", ExceptionUtils.getStackTrace(exception)); - throw new CustomException("HCM_ADRM_REFERRAL_MANAGEMENT_CREATE", exception.getMessage()); + throw new CustomException("HCM_REFERRAL_MANAGEMENT_REFERRAL_UPDATE", exception.getMessage()); } } @@ -65,7 +65,7 @@ public void bulkDelete(Map consumerRecord, } catch (Exception exception) { log.error("Error in Referral consumer bulk delete", exception); log.error("Exception trace: ", ExceptionUtils.getStackTrace(exception)); - throw new CustomException("HCM_ADRM_REFERRAL_MANAGEMENT_CREATE", exception.getMessage()); + throw new CustomException("HCM_REFERRAL_MANAGEMENT_REFERRAL_DELETE", exception.getMessage()); } } } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/consumer/SideEffectConsumer.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/consumer/SideEffectConsumer.java index e1d8204cb06..e06cb3a03be 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/consumer/SideEffectConsumer.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/consumer/SideEffectConsumer.java @@ -39,7 +39,7 @@ public void bulkCreate(Map consumerRecord, } catch (Exception exception) { log.error("Error in Side Effect consumer bulk create", exception); log.error("Exception trace: ", ExceptionUtils.getStackTrace(exception)); - throw new CustomException("HCM_PROJECT_SIDE_EFFECT_CREATE", exception.getMessage()); + throw new CustomException("HCM_REFERRAL_MANAGEMENT_SIDE_EFFECT_CREATE", exception.getMessage()); } } @@ -52,7 +52,7 @@ public void bulkUpdate(Map consumerRecord, } catch (Exception exception) { log.error("Error in Side Effect consumer bulk update", exception); log.error("Exception trace: ", ExceptionUtils.getStackTrace(exception)); - throw new CustomException("HCM_PROJECT_SIDE_EFFECT_CREATE", exception.getMessage()); + throw new CustomException("HCM_REFERRAL_MANAGEMENT_SIDE_EFFECT_UPDATE", exception.getMessage()); } } @@ -65,7 +65,7 @@ public void bulkDelete(Map consumerRecord, } catch (Exception exception) { log.error("Error in Side Effect consumer bulk delete", exception); log.error("Exception trace: ", ExceptionUtils.getStackTrace(exception)); - throw new CustomException("HCM_PROJECT_SIDE_EFFECT_CREATE", exception.getMessage()); + throw new CustomException("HCM_REFERRAL_MANAGEMENT_SIDE_EFFECT_DELETE", exception.getMessage()); } } } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/FacilityService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/FacilityService.java new file mode 100644 index 00000000000..7f332239538 --- /dev/null +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/FacilityService.java @@ -0,0 +1,68 @@ +package org.egov.referralmanagement.service; + +import lombok.extern.slf4j.Slf4j; +import org.egov.common.contract.request.RequestInfo; +import org.egov.common.http.client.ServiceRequestClient; +import org.egov.common.models.Error; +import org.egov.common.models.facility.Facility; +import org.egov.common.models.facility.FacilityBulkResponse; +import org.egov.common.models.facility.FacilitySearch; +import org.egov.common.models.facility.FacilitySearchRequest; +import org.egov.referralmanagement.config.ReferralManagementConfiguration; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import static org.egov.common.utils.ValidatorUtils.getErrorForEntityWithNetworkError; + +@Service +@Slf4j +public class FacilityService { + + private final ReferralManagementConfiguration referralManagementConfiguration; + + private final ServiceRequestClient serviceRequestClient; + + public FacilityService(ReferralManagementConfiguration referralManagementConfiguration, ServiceRequestClient serviceRequestClient) { + this.referralManagementConfiguration = referralManagementConfiguration; + this.serviceRequestClient = serviceRequestClient; + } + + public List validateFacilityIds(List entityIds, + List entities, + String tenantId, + Map> errorDetailsMap, + RequestInfo requestInfo) { + + if (CollectionUtils.isEmpty(entityIds)) + return Collections.emptyList(); + + FacilitySearchRequest facilitySearchRequest = FacilitySearchRequest.builder() + .facility(FacilitySearch.builder().id(entityIds).build()) + .requestInfo(requestInfo) + .build(); + + try { + FacilityBulkResponse response = serviceRequestClient.fetchResult( + new StringBuilder(referralManagementConfiguration.getFacilityHost() + + referralManagementConfiguration.getFacilitySearchUrl() + + "?limit=" + entityIds.size() + + "&offset=0&tenantId=" + tenantId), + facilitySearchRequest, + FacilityBulkResponse.class); + return response.getFacilities().stream().map(Facility::getId).collect(Collectors.toList()); + } catch (Exception e) { + log.error("error while fetching facility list", e); + entities.forEach( entity -> { + Error error = getErrorForEntityWithNetworkError(); + populateErrorDetails(entity, error, errorDetailsMap); + }); + return Collections.emptyList(); + } + } +} diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java index ea7f107e0ea..a1fc7507eb5 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java @@ -9,7 +9,10 @@ import org.egov.referralmanagement.validator.RmIsDeletedValidator; import org.egov.referralmanagement.validator.RmNonExistentEntityValidator; import org.egov.referralmanagement.validator.RmNullIdValidator; +import org.egov.referralmanagement.validator.RmProjectBeneficiaryIdValidator; import org.egov.referralmanagement.validator.RmProjectEntitiesIdValidator; +import org.egov.referralmanagement.validator.RmRecipientIdValidator; +import org.egov.referralmanagement.validator.RmSideEffectIdValidator; import org.egov.referralmanagement.validator.RmUniqueEntityValidator; import org.egov.common.ds.Tuple; import org.egov.common.models.ErrorDetails; @@ -54,12 +57,14 @@ public class ReferralManagementService { private final List> validators; private final Predicate> isApplicableForCreate = validator -> - validator.getClass().equals(RmProjectEntitiesIdValidator.class) - || validator.getClass().equals(RmFacilityEntitiesIdValidator.class); + validator.getClass().equals(RmProjectBeneficiaryIdValidator.class) + || validator.getClass().equals(RmRecipientIdValidator.class) + || validator.getClass().equals(RmSideEffectIdValidator.class); private final Predicate> isApplicableForUpdate = validator -> - validator.getClass().equals(RmProjectEntitiesIdValidator.class) - || validator.getClass().equals(RmFacilityEntitiesIdValidator.class) + validator.getClass().equals(RmProjectBeneficiaryIdValidator.class) + || validator.getClass().equals(RmRecipientIdValidator.class) + || validator.getClass().equals(RmSideEffectIdValidator.class) || validator.getClass().equals(RmNullIdValidator.class) || validator.getClass().equals(RmIsDeletedValidator.class) || validator.getClass().equals(RmUniqueEntityValidator.class) @@ -67,7 +72,7 @@ public class ReferralManagementService { private final Predicate> isApplicableForDelete = validator -> validator.getClass().equals(RmNullIdValidator.class) - || validator.getClass().equals(RmNonExistentEntityValidator.class); + || validator.getClass().equals(RmNonExistentEntityValidator.class); public ReferralManagementService(IdGenService idGenService, ReferralRepository referralRepository, ReferralManagementConfiguration referralManagementConfiguration, ReferralManagementEnrichmentService referralManagementEnrichmentService, List> validators) { diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/util/ValidatorUtil.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/util/ValidatorUtil.java new file mode 100644 index 00000000000..54ccc74003e --- /dev/null +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/util/ValidatorUtil.java @@ -0,0 +1,24 @@ +package org.egov.referralmanagement.util; + +import digit.models.coremodels.UserSearchRequest; +import org.egov.common.contract.request.RequestInfo; +import org.egov.common.service.UserService; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.stream.Collectors; + +public class ValidatorUtil { + + public static void validateAndEnrichStaffIds(RequestInfo requestInfo, UserService userService, + List staffIds, List invalidStaffIds) { + if (!CollectionUtils.isEmpty(staffIds)) { + UserSearchRequest userSearchRequest = new UserSearchRequest(); + userSearchRequest.setRequestInfo(requestInfo); + userSearchRequest.setUuid(staffIds); + List validStaffIds = userService.search(userSearchRequest).stream().map(user -> user.getUuid()) + .collect(Collectors.toList()); + invalidStaffIds.removeAll(validStaffIds); + } + } +} diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java index 545385de37b..f02360ecd88 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java @@ -29,11 +29,13 @@ import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; -/**/ +/** + * Validate whether project beneficiary exist in db or not using project beneficiary id and project beneficiary client beneficiary id for Referral object + */ @Component @Order(value = 3) @Slf4j -public class RmProjectBeneficiaryIdValidator implements Validator { +public class RmProjectBeneficiaryIdValidator implements Validator { private final ServiceRequestClient serviceRequestClient; private final ReferralManagementConfiguration referralManagementConfiguration; @@ -61,6 +63,7 @@ public Map> validate(ReferralBulkRequest request) { .clientReferenceId(projectBeneficiaryClientReferenceIdList.isEmpty() ? null : projectBeneficiaryClientReferenceIdList) .build(); try { + // validating project beneficiary ids by callilng project beneficiary search and fetching the valid ids. BeneficiaryBulkResponse beneficiaryBulkResponse = serviceRequestClient.fetchResult( new StringBuilder(referralManagementConfiguration.getProjectHost() + referralManagementConfiguration.getProjectBeneficiarySearchUrl() @@ -82,8 +85,8 @@ public Map> validate(ReferralBulkRequest request) { existingProjectBeneficiaryClientReferenceIds.add(projectBeneficiary.getClientReferenceId()); }); List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> - !existingProjectBeneficiaryIds.contains(entity.getProjectBeneficiaryId()) - && !existingProjectBeneficiaryClientReferenceIds.contains(entity.getProjectBeneficiaryClientReferenceId()) + !existingProjectBeneficiaryClientReferenceIds.contains(entity.getProjectBeneficiaryClientReferenceId()) + && !existingProjectBeneficiaryIds.contains(entity.getProjectBeneficiaryId()) ).collect(Collectors.toList()); invalidEntities.forEach(referral -> { Error error = getErrorForNonExistentEntity(); diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java new file mode 100644 index 00000000000..69b4fd21c02 --- /dev/null +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java @@ -0,0 +1,94 @@ +package org.egov.referralmanagement.validator; + +import lombok.extern.slf4j.Slf4j; +import org.egov.common.models.Error; +import org.egov.common.models.facility.Facility; +import org.egov.common.models.project.ProjectStaff; +import org.egov.common.models.referralmanagement.Referral; +import org.egov.common.models.referralmanagement.ReferralBulkRequest; +import org.egov.common.service.UserService; +import org.egov.common.validator.Validator; +import org.egov.referralmanagement.service.FacilityService; +import org.egov.referralmanagement.util.ValidatorUtil; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; +import static org.egov.referralmanagement.Constants.FACILITY; +import static org.egov.referralmanagement.Constants.STAFF; + +/** + * + */ +@Component +@Order(value = 3) +@Slf4j +public class RmRecipientIdValidator implements Validator { + private final FacilityService facilityService; + private final UserService userService; + + public RmRecipientIdValidator(FacilityService facilityService, UserService userService) { + this.facilityService = facilityService; + this.userService = userService; + } + + /** + * @param request + * @return + */ + @Override + public Map> validate(ReferralBulkRequest request) { + log.info("validating project beneficiary id"); + Map> errorDetailsMap = new HashMap<>(); + List entities = request.getReferrals(); + Map> tenantIdReferralMap = entities.stream().collect(Collectors.groupingBy(Referral::getTenantId)); + tenantIdReferralMap.forEach((tenantId, referralList) -> { + List existingProjectStaffList = new ArrayList<>(); + List existingFacilityList = new ArrayList<>(); + final List projectStaffUuidList = new ArrayList<>(); + final List facilityIdList = new ArrayList<>(); + referralList.forEach(referral -> { + switch (referral.getRecipientType()) { + case STAFF : + addIgnoreNull(projectStaffUuidList, referral.getRecipientId()); + break; + case FACILITY: + addIgnoreNull(facilityIdList, referral.getRecipientId()); + } + }); + + List invalidStaffIds = new ArrayList<>(projectStaffUuidList); + // validate and remove valid identifiers from invalidStaffIds + ValidatorUtil.validateAndEnrichStaffIds(request.getRequestInfo(), userService, projectStaffUuidList, invalidStaffIds); + + // validate and remove valid identifiers from invalidfacilityIds + List invalidFacilityIds = new ArrayList<>(projectStaffUuidList); + List validFacilityIds = facilityService.validateFacilityIds(facilityIdList, (List) entities, + tenantId, errorDetailsMap, request.getRequestInfo()); + invalidFacilityIds.removeAll(validFacilityIds); + + List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> + entity.getRecipientType().equals(STAFF) ? invalidStaffIds.contains(entity.getRecipientId()) : invalidFacilityIds.contains(entity.getRecipientId()) + ).collect(Collectors.toList()); + + invalidEntities.forEach(referral -> { + Error error = getErrorForNonExistentEntity(); + populateErrorDetails(referral, error, errorDetailsMap); + }); + }); + return errorDetailsMap; + } + + private void addIgnoreNull(List list, String item) { + if(Objects.nonNull(item)) list.add(item); + } +} diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java index c2a399d74a2..ca9e9a6c808 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java @@ -4,10 +4,14 @@ import org.egov.common.http.client.ServiceRequestClient; import org.egov.common.models.Error; import org.egov.common.models.project.ProjectStaff; +import org.egov.common.models.project.ProjectStaffBulkResponse; +import org.egov.common.models.project.ProjectStaffSearch; +import org.egov.common.models.project.ProjectStaffSearchRequest; import org.egov.common.models.referralmanagement.Referral; import org.egov.common.models.referralmanagement.ReferralBulkRequest; import org.egov.common.validator.Validator; import org.egov.referralmanagement.config.ReferralManagementConfiguration; +import org.egov.tracer.model.CustomException; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @@ -18,6 +22,13 @@ import java.util.Objects; import java.util.stream.Collectors; +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; + +/** + * + */ @Component @Order(value = 3) @Slf4j @@ -33,13 +44,39 @@ public RmReferrerIdValidator(ServiceRequestClient serviceRequestClient, Referral @Override public Map> validate(ReferralBulkRequest request) { - log.info("validating project beneficiary id"); + log.info("validating referrer id"); Map> errorDetailsMap = new HashMap<>(); List entities = request.getReferrals(); Map> tenantIdReferralMap = entities.stream().collect(Collectors.groupingBy(Referral::getTenantId)); tenantIdReferralMap.forEach((tenantId, referralList) -> { - List existingProjectStaffList = new ArrayList<>(); - referralList.forEach(referral -> addIgnoreNull(existingProjectStaffList, referral.getReferrerId())); + List existingProjectStaffList = new ArrayList<>(); + final List projectStaffUuidList = new ArrayList<>(); + referralList.forEach(referral -> addIgnoreNull(projectStaffUuidList, referral.getReferrerId())); + ProjectStaffSearch projectStaffSearch = ProjectStaffSearch.builder() + .id(projectStaffUuidList.isEmpty() ? null : projectStaffUuidList) + .build(); + try { + ProjectStaffBulkResponse projectStaffBulkResponse = serviceRequestClient.fetchResult( + new StringBuilder(referralManagementConfiguration.getProjectHost() + + referralManagementConfiguration.getProjectStaffSearchUrl() + +"?limit=" + entities.size() + + "&offset=0&tenantId=" + tenantId), + ProjectStaffSearchRequest.builder().requestInfo(request.getRequestInfo()).projectStaff(projectStaffSearch).build(), + ProjectStaffBulkResponse.class + ); + existingProjectStaffList = projectStaffBulkResponse.getProjectStaff(); + } catch (Exception e) { + throw new CustomException("Project Staff failed to fetch", "Exception : "+e.getMessage()); + } + final List existingProjectStaffUuids = new ArrayList<>(); + existingProjectStaffList.forEach(projectStaff -> existingProjectStaffUuids.add(projectStaff.getId())); + List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> + !existingProjectStaffUuids.contains(entity.getReferrerId()) + ).collect(Collectors.toList()); + invalidEntities.forEach(referral -> { + Error error = getErrorForNonExistentEntity(); + populateErrorDetails(referral, error, errorDetailsMap); + }); }); return errorDetailsMap; } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java new file mode 100644 index 00000000000..1d519333f58 --- /dev/null +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java @@ -0,0 +1,83 @@ +package org.egov.referralmanagement.validator; + +import lombok.extern.slf4j.Slf4j; +import org.egov.common.models.Error; +import org.egov.common.models.referralmanagement.Referral; +import org.egov.common.models.referralmanagement.ReferralBulkRequest; +import org.egov.common.models.referralmanagement.sideeffect.SideEffect; +import org.egov.common.models.referralmanagement.sideeffect.SideEffectSearch; +import org.egov.common.models.referralmanagement.sideeffect.SideEffectSearchRequest; +import org.egov.common.validator.Validator; +import org.egov.referralmanagement.service.SideEffectService; +import org.egov.tracer.model.CustomException; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; + +/** + * Validate Side Effect id from the Referral Objects + */ +@Component +@Order(value = 3) +@Slf4j +public class RmSideEffectIdValidator implements Validator { + private final SideEffectService sideEffectService; + public RmSideEffectIdValidator(SideEffectService sideEffectService) { + this.sideEffectService = sideEffectService; + } + + /** + * @param request + * @return + */ + @Override + public Map> validate(ReferralBulkRequest request) { + log.info("validating project beneficiary id"); + Map> errorDetailsMap = new HashMap<>(); + List entities = request.getReferrals(); + Map> tenantIdReferralMap = entities.stream().collect(Collectors.groupingBy(Referral::getTenantId)); + tenantIdReferralMap.forEach((tenantId, referralList) -> { + List sideEffectIds = new ArrayList<>(); + referralList.forEach(referral -> { + if (Objects.nonNull(referral.getSideEffect())) + addIgnoreNull(sideEffectIds, referral.getSideEffect().getId()); + }); + List validSideEffectIds; + try { + validSideEffectIds = sideEffectService.search( + SideEffectSearchRequest.builder().sideEffect(SideEffectSearch.builder().id(sideEffectIds).build()).build(), + sideEffectIds.size(), 0, tenantId, null, false + ).stream().map(SideEffect::getId).collect(Collectors.toList()); + } catch (Exception e) { + throw new CustomException("Side Effect failed to fetch", "Exception : " + e.getMessage()); + } + sideEffectIds.removeAll(validSideEffectIds); + List invalidSideEffectIds = new ArrayList<>(sideEffectIds); + + List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> + Objects.nonNull(entity.getSideEffect()) && invalidSideEffectIds.contains(entity.getSideEffect().getId()) + ).collect(Collectors.toList()); + + invalidEntities.forEach(referral -> { + Error error = getErrorForNonExistentEntity(); + populateErrorDetails(referral, error, errorDetailsMap); + }); + + }); + + return errorDetailsMap; + } + private void addIgnoreNull(List list, String item) { + if(Objects.nonNull(item)) list.add(item); + } +} From 942b34f5b8af9c49d5bfa04749b52db0742b2bef Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Wed, 18 Oct 2023 17:35:38 +0530 Subject: [PATCH 08/41] updated the common-models version to 1.0.10, and updated in dependent service --- health-services/libraries/health-services-models/pom.xml | 2 +- health-services/referralmanagement/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/health-services/libraries/health-services-models/pom.xml b/health-services/libraries/health-services-models/pom.xml index 619fbb2bf28..089d0878172 100644 --- a/health-services/libraries/health-services-models/pom.xml +++ b/health-services/libraries/health-services-models/pom.xml @@ -5,7 +5,7 @@ 4.0.0 org.egov.common health-services-models - 1.0.9-SNAPSHOT + 1.0.10-SNAPSHOT 8 diff --git a/health-services/referralmanagement/pom.xml b/health-services/referralmanagement/pom.xml index 3b5fded205c..c2aefd82d79 100644 --- a/health-services/referralmanagement/pom.xml +++ b/health-services/referralmanagement/pom.xml @@ -52,7 +52,7 @@ org.egov.common health-services-models - 1.0.9-SNAPSHOT + 1.0.10-SNAPSHOT compile From 6f788cdddefc038cceb708112367d60e6f61a987 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Thu, 19 Oct 2023 11:50:17 +0530 Subject: [PATCH 09/41] HLM-3376 : Added additional field in side effect, referral. --- .../contracts/referral-management.yml | 4 + .../models/referralmanagement/Referral.java | 31 ++- .../sideeffect/SideEffect.java | 27 +- .../repository/ReferralRepository.java | 4 +- .../rowmapper/ReferralRowMapper.java | 38 +-- .../rowmapper/SideEffectRowMapper.java | 3 + ...rral_side_effect_additionaldetails_ddl.sql | 2 + .../referral-management-persister.yml | 234 +++++++++--------- 8 files changed, 192 insertions(+), 151 deletions(-) create mode 100644 health-services/referralmanagement/src/main/resources/db/migration/main/V20231019114100__referral_side_effect_additionaldetails_ddl.sql diff --git a/docs/health-api-specs/contracts/referral-management.yml b/docs/health-api-specs/contracts/referral-management.yml index 2beb107bd08..074ad2b152a 100644 --- a/docs/health-api-specs/contracts/referral-management.yml +++ b/docs/health-api-specs/contracts/referral-management.yml @@ -548,6 +548,8 @@ definitions: type: array items: type: string + additionalFields: + $ref: '#/definitions/additionalFields' isDeleted: $ref: '#/definitions/isDeleted' rowVersion: @@ -682,6 +684,8 @@ definitions: type: string sideEffect: $ref: '#/definition/SideEffect' + additionalFields: + $ref: '#/definitions/additionalFields' isDeleted: $ref: '#/definitions/isDeleted' rowVersion: diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/Referral.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/Referral.java index f40d31b4ded..61271060c1c 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/Referral.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/Referral.java @@ -7,6 +7,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.egov.common.models.project.AdditionalFields; import org.egov.common.models.referralmanagement.sideeffect.SideEffect; import javax.validation.Valid; @@ -22,57 +23,61 @@ public class Referral { @JsonProperty("id") @Size(min = 2, max = 64) - private String id = null; + private String id; @JsonProperty("clientReferenceId") @Size(min = 2, max = 64) - private String clientReferenceId = null; + private String clientReferenceId; @JsonProperty("projectBeneficiaryId") @Size(min = 2, max = 64) - private String projectBeneficiaryId = null; + private String projectBeneficiaryId; @JsonProperty("projectBeneficiaryClientReferenceId") @Size(min = 2, max = 64) - private String projectBeneficiaryClientReferenceId = null; + private String projectBeneficiaryClientReferenceId; @JsonProperty("referrerId") @Size(min = 2, max = 64) - private String referrerId = null; + private String referrerId; @JsonProperty("recipientType") - private String recipientType = null; + private String recipientType; @JsonProperty("recipientId") @Size(min = 2, max = 64) - private String recipientId = null; + private String recipientId; @JsonProperty("reasons") @NotNull @Size(min=1) - private List reasons = null; + private List reasons; @JsonProperty("sideEffect") - private SideEffect sideEffect = null; + private SideEffect sideEffect; @JsonProperty("tenantId") @NotNull @Size(min=2, max = 1000) - private String tenantId = null; + private String tenantId; @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; @JsonProperty("rowVersion") - private Integer rowVersion = null; + private Integer rowVersion; @JsonProperty("auditDetails") @Valid - private AuditDetails auditDetails = null; + private AuditDetails auditDetails; @JsonProperty("clientAuditDetails") @Valid - private AuditDetails clientAuditDetails = null; + private AuditDetails clientAuditDetails; + + @JsonProperty("additionalFields") + @Valid + private AdditionalFields additionalFields; @JsonIgnore private Boolean hasErrors = Boolean.FALSE; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java index df7da2a83e0..f91a733c8b3 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java @@ -7,6 +7,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.egov.common.models.project.AdditionalFields; import javax.validation.Valid; import javax.validation.constraints.NotNull; @@ -21,52 +22,56 @@ public class SideEffect { @JsonProperty("id") @Size(min = 2, max = 64) - private String id = null; + private String id; @JsonProperty("clientReferenceId") @Size(min = 2, max = 64) - private String clientReferenceId = null; + private String clientReferenceId; @JsonProperty("taskId") @Size(min = 2, max = 64) - private String taskId = null; + private String taskId; @JsonProperty("taskClientReferenceId") @NotNull @Size(min = 2, max = 64) - private String taskClientReferenceId = null; + private String taskClientReferenceId; @JsonProperty("projectBeneficiaryId") @Size(min = 2, max = 64) - private String projectBeneficiaryId = null; + private String projectBeneficiaryId; @JsonProperty("projectBeneficiaryClientReferenceId") @Size(min = 2, max = 64) - private String projectBeneficiaryClientReferenceId = null; + private String projectBeneficiaryClientReferenceId; @JsonProperty("symptoms") @NotNull @Size(min=1) - private List symptoms = null; + private List symptoms; @JsonProperty("tenantId") @NotNull @Size(min=2, max = 1000) - private String tenantId = null; + private String tenantId; @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; @JsonProperty("rowVersion") - private Integer rowVersion = null; + private Integer rowVersion; @JsonProperty("auditDetails") @Valid - private AuditDetails auditDetails = null; + private AuditDetails auditDetails; @JsonProperty("clientAuditDetails") @Valid - private AuditDetails clientAuditDetails = null; + private AuditDetails clientAuditDetails; + + @JsonProperty("additionalFields") + @Valid + private AdditionalFields additionalFields; @JsonIgnore private Boolean hasErrors = Boolean.FALSE; diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java index ca6e891bf97..ce7a002e3d5 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java @@ -40,7 +40,7 @@ protected ReferralRepository(Producer producer, NamedParameterJdbcTemplate named public List find(ReferralSearch searchObject, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted) throws QueryBuilderException { - String query = "SELECT r.*, se.id, se.clientreferenceid, se.tenantid, se.taskid, se.taskclientreferenceid, se.symptoms, se.reattempts, se.createdby, se.createdtime, se.lastmodifiedby, se.lastmodifiedtime, se.clientcreatedtime, se.clientlastmodifiedtime, se.rowversion, se.isdeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid"; + String query = "SELECT r.*, se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedBy, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid"; Map paramsMap = new HashMap<>(); List whereFields = GenericQueryBuilder.getFieldsWithCondition(searchObject, QueryFieldChecker.isNotNull, paramsMap); @@ -80,7 +80,7 @@ public List findById(List ids, String columnName, Boolean incl } } - String query = String.format("SELECT r.*, se.id, se.clientreferenceid, se.tenantid, se.taskid, se.taskclientreferenceid, se.symptoms, se.reattempts, se.createdby, se.createdtime, se.lastmodifiedby, se.lastmodifiedtime, se.clientcreatedtime, se.clientlastmodifiedtime, se.rowversion, se.isdeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid WHERE r.%s IN (:ids) ", columnName); + String query = String.format("SELECT r.*, , se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedBy, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid WHERE r.%s IN (:ids) ", columnName); if (includeDeleted == null || !includeDeleted) { query += " AND r.isDeleted = false "; } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/ReferralRowMapper.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/ReferralRowMapper.java index 277cd5baef9..244c91126d2 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/ReferralRowMapper.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/ReferralRowMapper.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import digit.models.coremodels.AuditDetails; +import org.egov.common.models.project.AdditionalFields; import org.egov.common.models.referralmanagement.Referral; import org.egov.common.models.referralmanagement.sideeffect.SideEffect; import org.springframework.beans.factory.annotation.Autowired; @@ -26,24 +27,31 @@ public Referral mapRow(ResultSet resultSet, int i) throws SQLException { String sideEffectClientReferenceId = resultSet.getString("sideEffectClientReferenceId"); if(sideEffectClientReferenceId != null) { AuditDetails sideEffectAuditDetails = AuditDetails.builder() - .createdBy(resultSet.getString("se.createdBy")) - .createdTime(resultSet.getLong("se.createdTime")) - .lastModifiedBy(resultSet.getString("se.lastModifiedBy")) - .lastModifiedTime(resultSet.getLong("se.lastModifiedTime")) + .createdBy(resultSet.getString("sCreatedBy")) + .createdTime(resultSet.getLong("sCreatedTime")) + .lastModifiedBy(resultSet.getString("sLastModifiedBy")) + .lastModifiedTime(resultSet.getLong("sLastModifiedTime")) .build(); AuditDetails sideEffectClientAuditDetails = AuditDetails.builder() - .createdTime(resultSet.getLong("se.clientCreatedTime")) - .lastModifiedTime(resultSet.getLong("se.clientLastModifiedTime")) + .createdBy(resultSet.getString("sClientCreatedBy")) + .createdTime(resultSet.getLong("sClientCreatedTime")) + .lastModifiedBy(resultSet.getString("sClientLastModifiedBy")) + .lastModifiedTime(resultSet.getLong("sClientLastModifiedTime")) .build(); sideEffect = SideEffect.builder() - .id(resultSet.getString("se.id")) - .clientReferenceId(resultSet.getString("se.clientreferenceid")) - .taskId(resultSet.getString("se.taskId")) - .taskClientReferenceId(resultSet.getString("se.taskClientreferenceid")) - .tenantId(resultSet.getString("se.tenantid")) - .symptoms(resultSet.getString("se.symptoms") == null ? null : objectMapper.readValue(resultSet.getString("se.symptoms"), ArrayList.class)) - .rowVersion(resultSet.getInt("se.rowversion")) - .isDeleted(resultSet.getBoolean("se.isdeleted")) + .id(resultSet.getString("sId")) + .clientReferenceId(resultSet.getString("sClientReferenceId")) + .taskId(resultSet.getString("sTaskId")) + .taskClientReferenceId(resultSet.getString("sTaskClientReferenceId")) + .projectBeneficiaryId(resultSet.getString("sProjectBeneficiaryId")) + .projectBeneficiaryClientReferenceId(resultSet.getString("sProjectBeneficiaryClientReferenceId")) + .tenantId(resultSet.getString("sTenantId")) + .symptoms(resultSet.getString("sSymptoms") == null ? null : objectMapper + .readValue(resultSet.getString("sSymptoms"), ArrayList.class)) + .additionalFields(resultSet.getString("sAdditionalDetails") == null ? null : objectMapper + .readValue(resultSet.getString("sAdditionalDetails"), AdditionalFields.class)) + .rowVersion(resultSet.getInt("sRowVersion")) + .isDeleted(resultSet.getBoolean("sIsDeleted")) .auditDetails(sideEffectAuditDetails) .clientAuditDetails(sideEffectClientAuditDetails) .build(); @@ -71,6 +79,8 @@ public Referral mapRow(ResultSet resultSet, int i) throws SQLException { .sideEffect(sideEffect) .tenantId(resultSet.getString("tenantid")) .reasons(resultSet.getString("reasons") == null ? null : objectMapper.readValue(resultSet.getString("reasons"), ArrayList.class)) + .additionalFields(resultSet.getString("additionalDetails") == null ? null : objectMapper + .readValue(resultSet.getString("additionalDetails"), AdditionalFields.class)) .rowVersion(resultSet.getInt("rowversion")) .isDeleted(resultSet.getBoolean("isdeleted")) .auditDetails(auditDetails) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/SideEffectRowMapper.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/SideEffectRowMapper.java index 7a49ceef93e..3fdae4349ea 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/SideEffectRowMapper.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/SideEffectRowMapper.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import digit.models.coremodels.AuditDetails; +import org.egov.common.models.project.AdditionalFields; import org.egov.common.models.referralmanagement.sideeffect.SideEffect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.RowMapper; @@ -42,6 +43,8 @@ public SideEffect mapRow(ResultSet resultSet, int i) throws SQLException { .projectBeneficiaryClientReferenceId(resultSet.getString("projectBeneficiaryClientReferenceId")) .tenantId(resultSet.getString("tenantid")) .symptoms(resultSet.getString("symptoms") == null ? null : objectMapper.readValue(resultSet.getString("symptoms"), ArrayList.class)) + .additionalFields(resultSet.getString("additionalDetails") == null ? null : objectMapper + .readValue(resultSet.getString("additionalDetails"), AdditionalFields.class)) .rowVersion(resultSet.getInt("rowversion")) .isDeleted(resultSet.getBoolean("isdeleted")) .auditDetails(auditDetails) diff --git a/health-services/referralmanagement/src/main/resources/db/migration/main/V20231019114100__referral_side_effect_additionaldetails_ddl.sql b/health-services/referralmanagement/src/main/resources/db/migration/main/V20231019114100__referral_side_effect_additionaldetails_ddl.sql new file mode 100644 index 00000000000..9cf29e89062 --- /dev/null +++ b/health-services/referralmanagement/src/main/resources/db/migration/main/V20231019114100__referral_side_effect_additionaldetails_ddl.sql @@ -0,0 +1,2 @@ +ALTER TABLE side_effect ADD COLUMN IF NOT EXISTS additionalDetails jsonb; +ALTER TABLE referral ADD COLUMN IF NOT EXISTS additionalDetails jsonb; \ No newline at end of file diff --git a/health-services/referralmanagement/src/main/resources/referral-management-persister.yml b/health-services/referralmanagement/src/main/resources/referral-management-persister.yml index c4bec84ddd0..98f04078df7 100644 --- a/health-services/referralmanagement/src/main/resources/referral-management-persister.yml +++ b/health-services/referralmanagement/src/main/resources/referral-management-persister.yml @@ -6,7 +6,7 @@ serviceMaps: fromTopic: save-side-effect-topic isTransaction: true queryMaps: - - query: INSERT INTO SIDE_EFFECT(id, clientReferenceId, tenantId, taskId, taskClientReferenceId, projectBeneficiaryId, projectBeneficiaryClientReferenceId,symptoms, createdBy, createdTime, lastModifiedBy, lastModifiedTime, clientCreatedBy, clientCreatedTime, clientLastModifiedBy, clientLastModifiedTime, rowVersion, isDeleted) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); + - query: INSERT INTO SIDE_EFFECT(id, clientReferenceId, tenantId, taskId, taskClientReferenceId, projectBeneficiaryId, projectBeneficiaryClientReferenceId, symptoms, additionalDetails, createdBy, createdTime, lastModifiedBy, lastModifiedTime, clientCreatedBy, clientCreatedTime, clientLastModifiedBy, clientLastModifiedTime, rowVersion, isDeleted) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); basePath: $.* jsonMaps: - jsonPath: $.*.id @@ -19,6 +19,9 @@ serviceMaps: - jsonPath: $.*.symptoms type: JSON dbType: JSONB + - jsonPath: $.*.additionalFields + type: JSON + dbType: JSONB - jsonPath: $.*.auditDetails.createdBy - jsonPath: $.*.auditDetails.createdTime - jsonPath: $.*.auditDetails.lastModifiedBy @@ -30,117 +33,126 @@ serviceMaps: - jsonPath: $.*.rowVersion - jsonPath: $.*.isDeleted - - version: 1.0 - description: Updates a side effect - fromTopic: update-side-effect-topic - isTransaction: true - queryMaps: - - query: UPDATE SIDE_EFFECT SET tenantId = ?, taskId = ?, taskClientReferenceId = ?, projectBeneficiaryId = ?, projectBeneficiaryClientReferenceId = ?, symptoms = ?, lastModifiedBy = ?, lastModifiedTime = ?, clientLastModifiedBy = ?, clientLastModifiedTime = ?, rowVersion = ?, isDeleted = ? WHERE ID = ?; - basePath: $.* - jsonMaps: - - jsonPath: $.*.tenantId - - jsonPath: $.*.taskId - - jsonPath: $.*.taskClientReferenceId - - jsonPath: $.*.projectBeneficiaryId - - jsonPath: $.*.projectBeneficiaryClientReferenceId - - jsonPath: $.*.symptoms - type: JSON - dbType: JSONB - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.clientAuditDetails.lastModifiedBy - - jsonPath: $.*.clientAuditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - jsonPath: $.*.id - - - version: 1.0 - description: Deletes a side effect - fromTopic: delete-side-effect-topic - isTransaction: true - queryMaps: - - query: UPDATE SIDE_EFFECT SET lastModifiedBy = ?, lastModifiedTime = ?, clientLastModifiedBy = ?, clientLastModifiedTime = ?, rowVersion = ?, isDeleted = ? WHERE ID = ?; - basePath: $.* - jsonMaps: - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.clientAuditDetails.lastModifiedBy - - jsonPath: $.*.clientAuditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - jsonPath: $.*.id - - - version: 1.0 - description: Saves a referral - fromTopic: save-referral-topic - isTransaction: true - queryMaps: - - query: INSERT INTO REFERRAL(id, clientReferenceId, tenantId, projectBeneficiaryId, projectBeneficiaryClientReferenceId, referrerId, recipientId, recipientType, reasons, sideEffectId, createdBy, createdTime, lastModifiedBy, lastModifiedTime, clientCreatedBy, clientCreatedTime, clientLastModifiedBy, clientLastModifiedTime, rowVersion, isDeleted) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); - basePath: $.* - jsonMaps: - - jsonPath: $.*.id - - jsonPath: $.*.clientReferenceId - - jsonPath: $.*.tenantId - - jsonPath: $.*.projectBeneficiaryId - - jsonPath: $.*.projectBeneficiaryClientReferenceId - - jsonPath: $.*.referrerId - - jsonPath: $.*.recipientId - - jsonPath: $.*.recipientType - - jsonPath: $.*.reasons - type: JSON - dbType: JSONB - - jsonPath: $.*.sideEffect.id - - jsonPath: $.*.auditDetails.createdBy - - jsonPath: $.*.auditDetails.createdTime - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.clientAuditDetails.createdBy - - jsonPath: $.*.clientAuditDetails.createdTime - - jsonPath: $.*.clientAuditDetails.lastModifiedBy - - jsonPath: $.*.clientAuditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted + - version: 1.0 + description: Updates a side effect + fromTopic: update-side-effect-topic + isTransaction: true + queryMaps: + - query: UPDATE SIDE_EFFECT SET tenantId = ?, taskId = ?, taskClientReferenceId = ?, projectBeneficiaryId = ?, projectBeneficiaryClientReferenceId = ?, symptoms = ?, additionalDetails = ?, lastModifiedBy = ?, lastModifiedTime = ?, clientLastModifiedBy = ?, clientLastModifiedTime = ?, rowVersion = ?, isDeleted = ? WHERE ID = ?; + basePath: $.* + jsonMaps: + - jsonPath: $.*.tenantId + - jsonPath: $.*.taskId + - jsonPath: $.*.taskClientReferenceId + - jsonPath: $.*.projectBeneficiaryId + - jsonPath: $.*.projectBeneficiaryClientReferenceId + - jsonPath: $.*.symptoms + type: JSON + dbType: JSONB + - jsonPath: $.*.additionalFields + type: JSON + dbType: JSONB + - jsonPath: $.*.auditDetails.lastModifiedBy + - jsonPath: $.*.auditDetails.lastModifiedTime + - jsonPath: $.*.clientAuditDetails.lastModifiedBy + - jsonPath: $.*.clientAuditDetails.lastModifiedTime + - jsonPath: $.*.rowVersion + - jsonPath: $.*.isDeleted + - jsonPath: $.*.id - - version: 1.0 - description: Updates a referral - fromTopic: update-referral-topic - isTransaction: true - queryMaps: - - query: UPDATE REFERRAL SET tenantId = ?, projectBeneficiaryId = ?, projectBeneficiaryClientReferenceId = ?, referrerId = ?, recipientId = ?, recipientType = ?, reasons = ?, sideEffectId = ?, createdBy = ?, createdTime = ?, lastModifiedBy = ?, lastModifiedTime = ?, clientCreatedBy = ?, clientCreatedTime = ?, clientLastModifiedBy = ?, clientLastModifiedTime = ?, rowVersion = ?, isDeleted WHERE ID = ?; - basePath: $.* - jsonMaps: - - jsonPath: $.*.tenantId - - jsonPath: $.*.projectBeneficiaryId - - jsonPath: $.*.projectBeneficiaryClientReferenceId - - jsonPath: $.*.referrerId - - jsonPath: $.*.recipientId - - jsonPath: $.*.recipientType - - jsonPath: $.*.reasons - type: JSON - dbType: JSONB - - jsonPath: $.*.sideEffect.id - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.clientAuditDetails.lastModifiedBy - - jsonPath: $.*.clientAuditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - jsonPath: $.*.id + - version: 1.0 + description: Deletes a side effect + fromTopic: delete-side-effect-topic + isTransaction: true + queryMaps: + - query: UPDATE SIDE_EFFECT SET lastModifiedBy = ?, lastModifiedTime = ?, clientLastModifiedBy = ?, clientLastModifiedTime = ?, rowVersion = ?, isDeleted = ? WHERE ID = ?; + basePath: $.* + jsonMaps: + - jsonPath: $.*.auditDetails.lastModifiedBy + - jsonPath: $.*.auditDetails.lastModifiedTime + - jsonPath: $.*.clientAuditDetails.lastModifiedBy + - jsonPath: $.*.clientAuditDetails.lastModifiedTime + - jsonPath: $.*.rowVersion + - jsonPath: $.*.isDeleted + - jsonPath: $.*.id - - version: 1.0 - description: Deletes a referral - fromTopic: delete-referral-topic - isTransaction: true - queryMaps: - - query: UPDATE REFERRAL SET lastModifiedBy = ?, lastModifiedTime = ?, clientLastModifiedBy = ?, clientLastModifiedTime = ?, rowVersion = ?, isDeleted = ? WHERE ID = ?; - basePath: $.* - jsonMaps: - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.clientAuditDetails.lastModifiedBy - - jsonPath: $.*.clientAuditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - jsonPath: $.*.id + - version: 1.0 + description: Saves a referral + fromTopic: save-referral-topic + isTransaction: true + queryMaps: + - query: INSERT INTO REFERRAL(id, clientReferenceId, tenantId, projectBeneficiaryId, projectBeneficiaryClientReferenceId, referrerId, recipientId, recipientType, reasons, additionalDetails, sideEffectId, sideEffectClientReferenceId, createdBy, createdTime, lastModifiedBy, lastModifiedTime, clientCreatedBy, clientCreatedTime, clientLastModifiedBy, clientLastModifiedTime, rowVersion, isDeleted) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); + basePath: $.* + jsonMaps: + - jsonPath: $.*.id + - jsonPath: $.*.clientReferenceId + - jsonPath: $.*.tenantId + - jsonPath: $.*.projectBeneficiaryId + - jsonPath: $.*.projectBeneficiaryClientReferenceId + - jsonPath: $.*.referrerId + - jsonPath: $.*.recipientId + - jsonPath: $.*.recipientType + - jsonPath: $.*.reasons + type: JSON + dbType: JSONB + - jsonPath: $.*.additionalFields + type: JSON + dbType: JSONB + - jsonPath: $.*.sideEffect.id + - jsonPath: $.*.sideEffect.clientReferenceId + - jsonPath: $.*.auditDetails.createdBy + - jsonPath: $.*.auditDetails.createdTime + - jsonPath: $.*.auditDetails.lastModifiedBy + - jsonPath: $.*.auditDetails.lastModifiedTime + - jsonPath: $.*.clientAuditDetails.createdBy + - jsonPath: $.*.clientAuditDetails.createdTime + - jsonPath: $.*.clientAuditDetails.lastModifiedBy + - jsonPath: $.*.clientAuditDetails.lastModifiedTime + - jsonPath: $.*.rowVersion + - jsonPath: $.*.isDeleted + - version: 1.0 + description: Updates a referral + fromTopic: update-referral-topic + isTransaction: true + queryMaps: + - query: UPDATE REFERRAL SET tenantId = ?, projectBeneficiaryId = ?, projectBeneficiaryClientReferenceId = ?, referrerId = ?, recipientId = ?, recipientType = ?, reasons = ?, additionalDetails = ?, sideEffectId = ?, sideEffectClientReferenceId = ?, createdBy = ?, createdTime = ?, lastModifiedBy = ?, lastModifiedTime = ?, clientCreatedBy = ?, clientCreatedTime = ?, clientLastModifiedBy = ?, clientLastModifiedTime = ?, rowVersion = ?, isDeleted = ? WHERE ID = ?; + basePath: $.* + jsonMaps: + - jsonPath: $.*.tenantId + - jsonPath: $.*.projectBeneficiaryId + - jsonPath: $.*.projectBeneficiaryClientReferenceId + - jsonPath: $.*.referrerId + - jsonPath: $.*.recipientId + - jsonPath: $.*.recipientType + - jsonPath: $.*.reasons + type: JSON + dbType: JSONB + - jsonPath: $.*.additionalFields + type: JSON + dbType: JSONB + - jsonPath: $.*.sideEffect.id + - jsonPath: $.*.sideEffect.clientReferenceId + - jsonPath: $.*.auditDetails.lastModifiedBy + - jsonPath: $.*.auditDetails.lastModifiedTime + - jsonPath: $.*.clientAuditDetails.lastModifiedBy + - jsonPath: $.*.clientAuditDetails.lastModifiedTime + - jsonPath: $.*.rowVersion + - jsonPath: $.*.isDeleted + - jsonPath: $.*.id + - version: 1.0 + description: Deletes a referral + fromTopic: delete-referral-topic + isTransaction: true + queryMaps: + - query: UPDATE REFERRAL SET lastModifiedBy = ?, lastModifiedTime = ?, clientLastModifiedBy = ?, clientLastModifiedTime = ?, rowVersion = ?, isDeleted = ? WHERE ID = ?; + basePath: $.* + jsonMaps: + - jsonPath: $.*.auditDetails.lastModifiedBy + - jsonPath: $.*.auditDetails.lastModifiedTime + - jsonPath: $.*.clientAuditDetails.lastModifiedBy + - jsonPath: $.*.clientAuditDetails.lastModifiedTime + - jsonPath: $.*.rowVersion + - jsonPath: $.*.isDeleted + - jsonPath: $.*.id From 706970a008b70cecf4657bab7fbed86472de0f09 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Thu, 19 Oct 2023 18:01:57 +0530 Subject: [PATCH 10/41] HLM-3376: missing column fix --- .../referralmanagement/repository/ReferralRepository.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java index ce7a002e3d5..edc5f8d3530 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java @@ -40,7 +40,7 @@ protected ReferralRepository(Producer producer, NamedParameterJdbcTemplate named public List find(ReferralSearch searchObject, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted) throws QueryBuilderException { - String query = "SELECT r.*, se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedBy, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid"; + String query = "SELECT r.*, se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedTime, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid"; Map paramsMap = new HashMap<>(); List whereFields = GenericQueryBuilder.getFieldsWithCondition(searchObject, QueryFieldChecker.isNotNull, paramsMap); @@ -80,7 +80,7 @@ public List findById(List ids, String columnName, Boolean incl } } - String query = String.format("SELECT r.*, , se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedBy, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid WHERE r.%s IN (:ids) ", columnName); + String query = String.format("SELECT r.*, , se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedTime, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid WHERE r.%s IN (:ids) ", columnName); if (includeDeleted == null || !includeDeleted) { query += " AND r.isDeleted = false "; } From ff14ec9799b219ff97640d70cde8496b71efdde1 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Thu, 19 Oct 2023 18:09:40 +0530 Subject: [PATCH 11/41] HLM-3372: constants type changed --- .../src/main/java/org/egov/referralmanagement/Constants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/Constants.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/Constants.java index 339f81dd3b5..a2d9a0dad47 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/Constants.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/Constants.java @@ -11,5 +11,5 @@ public interface Constants { String INTERNAL_SERVER_ERROR = "INTERNAL_SERVER_ERROR"; String GET_ID = "getId"; String STAFF = "STAFF"; - String FACILITY = "WAREHOUSE"; + String FACILITY = "FACILITY"; } From 20b662204287299ddffdeff48f1cbe46830f2d48 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Thu, 19 Oct 2023 18:55:08 +0530 Subject: [PATCH 12/41] HLM-3376: removed not used validators --- .../service/ReferralManagementService.java | 20 ++- .../RmFacilityEntitiesIdValidator.java | 100 ------------- .../RmProjectEntitiesIdValidator.java | 134 ------------------ .../validator/RmSideEffectIdValidator.java | 18 +-- 4 files changed, 19 insertions(+), 253 deletions(-) delete mode 100644 health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmFacilityEntitiesIdValidator.java delete mode 100644 health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectEntitiesIdValidator.java diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java index a1fc7507eb5..603cd6ae1fb 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java @@ -1,28 +1,26 @@ package org.egov.referralmanagement.service; import lombok.extern.slf4j.Slf4j; +import org.egov.common.ds.Tuple; +import org.egov.common.models.ErrorDetails; +import org.egov.common.models.referralmanagement.Referral; +import org.egov.common.models.referralmanagement.ReferralBulkRequest; +import org.egov.common.models.referralmanagement.ReferralRequest; +import org.egov.common.models.referralmanagement.ReferralSearchRequest; +import org.egov.common.service.IdGenService; +import org.egov.common.utils.CommonUtils; +import org.egov.common.validator.Validator; import org.egov.referralmanagement.Constants; import org.egov.referralmanagement.config.ReferralManagementConfiguration; import org.egov.referralmanagement.repository.ReferralRepository; import org.egov.referralmanagement.service.enrichment.ReferralManagementEnrichmentService; -import org.egov.referralmanagement.validator.RmFacilityEntitiesIdValidator; import org.egov.referralmanagement.validator.RmIsDeletedValidator; import org.egov.referralmanagement.validator.RmNonExistentEntityValidator; import org.egov.referralmanagement.validator.RmNullIdValidator; import org.egov.referralmanagement.validator.RmProjectBeneficiaryIdValidator; -import org.egov.referralmanagement.validator.RmProjectEntitiesIdValidator; import org.egov.referralmanagement.validator.RmRecipientIdValidator; import org.egov.referralmanagement.validator.RmSideEffectIdValidator; import org.egov.referralmanagement.validator.RmUniqueEntityValidator; -import org.egov.common.ds.Tuple; -import org.egov.common.models.ErrorDetails; -import org.egov.common.models.referralmanagement.Referral; -import org.egov.common.models.referralmanagement.ReferralBulkRequest; -import org.egov.common.models.referralmanagement.ReferralRequest; -import org.egov.common.models.referralmanagement.ReferralSearchRequest; -import org.egov.common.service.IdGenService; -import org.egov.common.utils.CommonUtils; -import org.egov.common.validator.Validator; import org.egov.tracer.model.CustomException; import org.springframework.stereotype.Service; import org.springframework.util.ReflectionUtils; diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmFacilityEntitiesIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmFacilityEntitiesIdValidator.java deleted file mode 100644 index ac79e49cc04..00000000000 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmFacilityEntitiesIdValidator.java +++ /dev/null @@ -1,100 +0,0 @@ -package org.egov.referralmanagement.validator; - -import lombok.extern.slf4j.Slf4j; -import org.egov.common.data.query.exception.QueryBuilderException; -import org.egov.common.http.client.ServiceRequestClient; -import org.egov.common.models.Error; -import org.egov.common.models.facility.Facility; -import org.egov.common.models.facility.FacilityBulkResponse; -import org.egov.common.models.facility.FacilitySearch; -import org.egov.common.models.facility.FacilitySearchRequest; -import org.egov.common.models.referralmanagement.Referral; -import org.egov.common.models.referralmanagement.ReferralBulkRequest; -import org.egov.common.validator.Validator; -import org.egov.referralmanagement.config.ReferralManagementConfiguration; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.stream.Collectors; - -import static org.egov.common.utils.CommonUtils.notHavingErrors; -import static org.egov.common.utils.CommonUtils.populateErrorDetails; -import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; -import static org.egov.referralmanagement.Constants.FACILITY; - - -@Component -@Order(value = 3) -@Slf4j -public class RmFacilityEntitiesIdValidator implements Validator { - private final ServiceRequestClient serviceRequestClient; - private final ReferralManagementConfiguration referralManagementConfiguration; - - @Autowired - public RmFacilityEntitiesIdValidator(ServiceRequestClient serviceRequestClient, ReferralManagementConfiguration referralManagementConfiguration) { - this.serviceRequestClient = serviceRequestClient; - this.referralManagementConfiguration = referralManagementConfiguration; - } - - - @Override - public Map> validate(ReferralBulkRequest request) { - log.info("validating facility id"); - Map> errorDetailsMap = new HashMap<>(); - List entities = request.getReferrals(); - Map> tenantIdReferralMap = entities.stream().collect(Collectors.groupingBy(Referral::getTenantId)); - List tenantIds = new ArrayList<>(tenantIdReferralMap.keySet()); - tenantIds.forEach(tenantId -> { - List referralList = tenantIdReferralMap.get(tenantId); - if (!referralList.isEmpty()) { - List existingFacilityList = null; - final List facilityIdList = new ArrayList<>(); - try { - referralList.forEach(referral -> { - if(referral.getRecipientType().equals(FACILITY)){ - addIgnoreNull(facilityIdList, referral.getRecipientId()); - } - }); - FacilitySearch facilitySearch = FacilitySearch.builder() - .id(facilityIdList.isEmpty() ? null : facilityIdList) - .build(); - FacilityBulkResponse facilityBulkResponse = serviceRequestClient.fetchResult( - new StringBuilder(referralManagementConfiguration.getFacilityHost() - + referralManagementConfiguration.getFacilitySearchUrl() - +"?limit=" + entities.size() - + "&offset=0&tenantId=" + tenantId), - FacilitySearchRequest.builder().requestInfo(request.getRequestInfo()).facility(facilitySearch).build(), - FacilityBulkResponse.class - ); - existingFacilityList = facilityBulkResponse.getFacilities(); - } catch (QueryBuilderException e) { - existingFacilityList = Collections.emptyList(); - } catch (Exception e) { - throw new RuntimeException(e); - } - final List existingFacilityIds = new ArrayList<>(); - existingFacilityList.forEach(facility -> existingFacilityIds.add(facility.getId())); - List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> - (!entity.getRecipientType().equals(FACILITY) || !existingFacilityIds.contains(entity.getRecipientId())) - ).collect(Collectors.toList()); - invalidEntities.forEach(referral -> { - Error error = getErrorForNonExistentEntity(); - populateErrorDetails(referral, error, errorDetailsMap); - }); - - } - }); - return errorDetailsMap; - } - - private void addIgnoreNull(List list, String item) { - if(Objects.nonNull(item)) list.add(item); - } -} diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectEntitiesIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectEntitiesIdValidator.java deleted file mode 100644 index a36d725f61e..00000000000 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectEntitiesIdValidator.java +++ /dev/null @@ -1,134 +0,0 @@ -package org.egov.referralmanagement.validator; - -import lombok.extern.slf4j.Slf4j; -import org.egov.common.data.query.exception.QueryBuilderException; -import org.egov.common.http.client.ServiceRequestClient; -import org.egov.common.models.Error; -import org.egov.common.models.project.BeneficiaryBulkResponse; -import org.egov.common.models.project.BeneficiarySearchRequest; -import org.egov.common.models.project.ProjectBeneficiary; -import org.egov.common.models.project.ProjectBeneficiarySearch; -import org.egov.common.models.project.ProjectStaff; -import org.egov.common.models.project.ProjectStaffBulkResponse; -import org.egov.common.models.project.ProjectStaffSearch; -import org.egov.common.models.project.ProjectStaffSearchRequest; -import org.egov.common.models.referralmanagement.Referral; -import org.egov.common.models.referralmanagement.ReferralBulkRequest; -import org.egov.common.validator.Validator; -import org.egov.referralmanagement.config.ReferralManagementConfiguration; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.stream.Collectors; - -import static org.egov.referralmanagement.Constants.STAFF; -import static org.egov.common.utils.CommonUtils.notHavingErrors; -import static org.egov.common.utils.CommonUtils.populateErrorDetails; -import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; - - -@Component -@Order(value = 3) -@Slf4j -public class RmProjectEntitiesIdValidator implements Validator { - private final ServiceRequestClient serviceRequestClient; - private final ReferralManagementConfiguration referralManagementConfiguration; - - @Autowired - public RmProjectEntitiesIdValidator(ServiceRequestClient serviceRequestClient, ReferralManagementConfiguration referralManagementConfiguration) { - this.serviceRequestClient = serviceRequestClient; - this.referralManagementConfiguration = referralManagementConfiguration; - } - - - @Override - public Map> validate(ReferralBulkRequest request) { - log.info("validating project beneficiary id, project staff id"); - Map> errorDetailsMap = new HashMap<>(); - List entities = request.getReferrals(); - Map> tenantIdReferralMap = entities.stream().collect(Collectors.groupingBy(Referral::getTenantId)); - List tenantIds = new ArrayList<>(tenantIdReferralMap.keySet()); - tenantIds.forEach(tenantId -> { - List referralList = tenantIdReferralMap.get(tenantId); - if (!referralList.isEmpty()) { - List existingProjectBeneficiaries = null; - List existingProjectStaffList = null; - final List projectBeneficiaryIdList = new ArrayList<>(); // done - final List projectBeneficiaryClientReferenceIdList = new ArrayList<>(); - final List projectStaffIdList = new ArrayList<>(); - try { - referralList.forEach(referral -> { - addIgnoreNull(projectBeneficiaryIdList, referral.getProjectBeneficiaryId()); - addIgnoreNull(projectBeneficiaryClientReferenceIdList, referral.getProjectBeneficiaryClientReferenceId()); - addIgnoreNull(projectStaffIdList, referral.getReferrerId()); - if(referral.getRecipientType().equals(STAFF)){ - addIgnoreNull(projectStaffIdList, referral.getRecipientId()); - } - }); - ProjectBeneficiarySearch projectBeneficiarySearch = ProjectBeneficiarySearch.builder() - .id(projectBeneficiaryIdList.isEmpty() ? null : projectBeneficiaryIdList) - .clientReferenceId(projectBeneficiaryClientReferenceIdList.isEmpty() ? null : projectBeneficiaryClientReferenceIdList) - .build(); - BeneficiaryBulkResponse beneficiaryBulkResponse = serviceRequestClient.fetchResult( - new StringBuilder(referralManagementConfiguration.getProjectHost() - + referralManagementConfiguration.getProjectBeneficiarySearchUrl() - +"?limit=" + entities.size() - + "&offset=0&tenantId=" + tenantId), - BeneficiarySearchRequest.builder().requestInfo(request.getRequestInfo()).projectBeneficiary(projectBeneficiarySearch).build(), - BeneficiaryBulkResponse.class - ); - existingProjectBeneficiaries = beneficiaryBulkResponse.getProjectBeneficiaries(); - ProjectStaffSearch projectStaffSearch = ProjectStaffSearch.builder() - .id(projectStaffIdList.isEmpty() ? null : projectStaffIdList) - .build(); - ProjectStaffBulkResponse projectStaffBulkResponse = serviceRequestClient.fetchResult( - new StringBuilder(referralManagementConfiguration.getProjectHost() - + referralManagementConfiguration.getProjectStaffSearchUrl() - +"?limit=" + entities.size() - + "&offset=0&tenantId=" + tenantId), - ProjectStaffSearchRequest.builder().requestInfo(request.getRequestInfo()).projectStaff(projectStaffSearch).build(), - ProjectStaffBulkResponse.class - ); - existingProjectStaffList = projectStaffBulkResponse.getProjectStaff(); - - } catch (QueryBuilderException e) { - if(existingProjectBeneficiaries == null) existingProjectBeneficiaries = Collections.emptyList(); - existingProjectStaffList = Collections.emptyList(); - } catch (Exception e) { - throw new RuntimeException(e); - } - final List existingProjectBeneficiaryIds = new ArrayList<>(); - final List existingProjectBeneficiaryClientReferenceIds = new ArrayList<>(); - existingProjectBeneficiaries.forEach(projectBeneficiary -> { - existingProjectBeneficiaryIds.add(projectBeneficiary.getId()); - existingProjectBeneficiaryClientReferenceIds.add(projectBeneficiary.getClientReferenceId()); - }); - final List existingProjectStaffIds = new ArrayList<>(); - existingProjectStaffList.forEach(projectStaff -> existingProjectStaffIds.add(projectStaff.getId())); - List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> - !existingProjectStaffIds.contains(entity.getReferrerId()) - && !existingProjectBeneficiaryIds.contains(entity.getProjectBeneficiaryId()) - && !existingProjectBeneficiaryClientReferenceIds.contains(entity.getProjectBeneficiaryClientReferenceId()) - && (!entity.getRecipientType().equals(STAFF) || !existingProjectStaffIds.contains(entity.getRecipientId())) - ).collect(Collectors.toList()); - invalidEntities.forEach(referral -> { - Error error = getErrorForNonExistentEntity(); - populateErrorDetails(referral, error, errorDetailsMap); - }); - - } - }); - return errorDetailsMap; - } - - private void addIgnoreNull(List list, String item) { - if(Objects.nonNull(item)) list.add(item); - } -} diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java index 1d519333f58..e49a030f49c 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java @@ -52,14 +52,16 @@ public Map> validate(ReferralBulkRequest request) { if (Objects.nonNull(referral.getSideEffect())) addIgnoreNull(sideEffectIds, referral.getSideEffect().getId()); }); - List validSideEffectIds; - try { - validSideEffectIds = sideEffectService.search( - SideEffectSearchRequest.builder().sideEffect(SideEffectSearch.builder().id(sideEffectIds).build()).build(), - sideEffectIds.size(), 0, tenantId, null, false - ).stream().map(SideEffect::getId).collect(Collectors.toList()); - } catch (Exception e) { - throw new CustomException("Side Effect failed to fetch", "Exception : " + e.getMessage()); + List validSideEffectIds = new ArrayList<>(); + if(!sideEffectIds.isEmpty()) { + try { + validSideEffectIds = sideEffectService.search( + SideEffectSearchRequest.builder().sideEffect(SideEffectSearch.builder().id(sideEffectIds).build()).build(), + sideEffectIds.size(), 0, tenantId, null, false + ).stream().map(SideEffect::getId).collect(Collectors.toList()); + } catch (Exception e) { + throw new CustomException("Side Effect failed to fetch", "Exception : " + e.getMessage()); + } } sideEffectIds.removeAll(validSideEffectIds); List invalidSideEffectIds = new ArrayList<>(sideEffectIds); From cd2cb9ccc846018ee321870bca6926b3a693154c Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Thu, 19 Oct 2023 19:51:27 +0530 Subject: [PATCH 13/41] code refactor and code comments --- .../ReferralBulkRequest.java | 2 +- .../ReferralBulkResponse.java | 2 +- .../referralmanagement/ReferralRequest.java | 4 +-- .../referralmanagement/ReferralResponse.java | 4 +-- .../referralmanagement/ReferralSearch.java | 16 ++++----- .../ReferralSearchRequest.java | 4 +-- .../sideeffect/SideEffectBulkRequest.java | 2 +- .../sideeffect/SideEffectBulkResponse.java | 2 +- .../sideeffect/SideEffectRequest.java | 4 +-- .../sideeffect/SideEffectResponse.java | 4 +-- .../sideeffect/SideEffectSearch.java | 8 ++--- .../sideeffect/SideEffectSearchRequest.java | 4 +-- .../service/ReferralManagementService.java | 3 ++ .../util/ValidatorUtil.java | 10 ++++++ .../validator/RmReferrerIdValidator.java | 36 ++++++++----------- 15 files changed, 55 insertions(+), 50 deletions(-) diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java index 88a3066f6b5..251ac97ba01 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java @@ -22,7 +22,7 @@ public class ReferralBulkRequest { @JsonProperty("RequestInfo") @NotNull @Valid - private RequestInfo requestInfo = null; + private RequestInfo requestInfo; @JsonProperty("Referrals") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java index dde1bc6cba6..5a96776b32f 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java @@ -21,7 +21,7 @@ public class ReferralBulkResponse { @JsonProperty("ResponseInfo") @NotNull @Valid - private ResponseInfo responseInfo = null; + private ResponseInfo responseInfo; @JsonProperty("Referrals") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java index 7a4da152c86..7f359fc6e92 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java @@ -18,10 +18,10 @@ public class ReferralRequest { @JsonProperty("RequestInfo") @NotNull @Valid - private RequestInfo requestInfo = null; + private RequestInfo requestInfo; @JsonProperty("Referral") @NotNull @Valid - private Referral referral = null; + private Referral referral; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java index d6bd0ec95f7..fa0f7ba0786 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java @@ -18,10 +18,10 @@ public class ReferralResponse { @JsonProperty("ResponseInfo") @NotNull @Valid - private ResponseInfo responseInfo = null; + private ResponseInfo responseInfo; @JsonProperty("Referral") @NotNull @Valid - private Referral referral = null; + private Referral referral; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java index 79c61b80dfb..de01f288289 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java @@ -14,26 +14,26 @@ @Builder public class ReferralSearch { @JsonProperty("id") - private List id = null; + private List id; @JsonProperty("clientReferenceId") - private List clientReferenceId = null; + private List clientReferenceId; @JsonProperty("projectBeneficiaryId") - private List projectBeneficiaryId = null; + private List projectBeneficiaryId; @JsonProperty("projectBeneficiaryClientReferenceId") - private List projectBeneficiaryClientReferenceId = null; + private List projectBeneficiaryClientReferenceId; @JsonProperty("sideEffectId") - private List sideEffectId = null; + private List sideEffectId; @JsonProperty("sideEffectClientReferenceId") - private List sideEffectClientReferenceId = null; + private List sideEffectClientReferenceId; @JsonProperty("referrerId") - private List referrerId = null; + private List referrerId; @JsonProperty("recipientId") - private List recipientId = null; + private List recipientId; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java index 99c4efab962..8884292d19c 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java @@ -18,9 +18,9 @@ public class ReferralSearchRequest { @JsonProperty("RequestInfo") @NotNull @Valid - private RequestInfo requestInfo = null; + private RequestInfo requestInfo; @JsonProperty("Referral") @Valid - private ReferralSearch referral = null; + private ReferralSearch referral; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java index 6da7bcf7000..21ca6ec085e 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java @@ -22,7 +22,7 @@ public class SideEffectBulkRequest { @JsonProperty("RequestInfo") @NotNull @Valid - private RequestInfo requestInfo = null; + private RequestInfo requestInfo; @JsonProperty("SideEffects") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java index 1030c5328f2..5d984358917 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java @@ -22,7 +22,7 @@ public class SideEffectBulkResponse { @JsonProperty("ResponseInfo") @NotNull @Valid - private ResponseInfo responseInfo = null; + private ResponseInfo responseInfo; @JsonProperty("SideEffects") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java index b9de9d6aa2b..96f020e09e6 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java @@ -18,10 +18,10 @@ public class SideEffectRequest { @JsonProperty("RequestInfo") @NotNull @Valid - private RequestInfo requestInfo = null; + private RequestInfo requestInfo; @JsonProperty("SideEffect") @NotNull @Valid - private SideEffect sideEffect = null; + private SideEffect sideEffect; } \ No newline at end of file diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java index b17c6d9ce7d..0ca3e42b228 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java @@ -19,11 +19,11 @@ public class SideEffectResponse { @JsonProperty("ResponseInfo") @NotNull @Valid - private ResponseInfo responseInfo = null; + private ResponseInfo responseInfo; @JsonProperty("SideEffect") @NotNull @Valid - private SideEffect sideEffect = null; + private SideEffect sideEffect; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java index bee88934df6..c6e5e2ad11a 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java @@ -14,15 +14,15 @@ @Builder public class SideEffectSearch { @JsonProperty("id") - private List id = null; + private List id; @JsonProperty("clientReferenceId") - private List clientReferenceId = null; + private List clientReferenceId; @JsonProperty("taskId") - private String taskId = null; + private String taskId; @JsonProperty("taskClientReferenceId") - private String taskClientReferenceId = null; + private String taskClientReferenceId; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java index 2692e9b1d96..f9549e207a8 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java @@ -18,9 +18,9 @@ public class SideEffectSearchRequest { @JsonProperty("RequestInfo") @NotNull @Valid - private RequestInfo requestInfo = null; + private RequestInfo requestInfo; @JsonProperty("SideEffect") @Valid - private SideEffectSearch sideEffect = null; + private SideEffectSearch sideEffect; } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java index 603cd6ae1fb..7d1c4038332 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java @@ -19,6 +19,7 @@ import org.egov.referralmanagement.validator.RmNullIdValidator; import org.egov.referralmanagement.validator.RmProjectBeneficiaryIdValidator; import org.egov.referralmanagement.validator.RmRecipientIdValidator; +import org.egov.referralmanagement.validator.RmReferrerIdValidator; import org.egov.referralmanagement.validator.RmSideEffectIdValidator; import org.egov.referralmanagement.validator.RmUniqueEntityValidator; import org.egov.tracer.model.CustomException; @@ -56,11 +57,13 @@ public class ReferralManagementService { private final Predicate> isApplicableForCreate = validator -> validator.getClass().equals(RmProjectBeneficiaryIdValidator.class) + || validator.getClass().equals(RmReferrerIdValidator.class) || validator.getClass().equals(RmRecipientIdValidator.class) || validator.getClass().equals(RmSideEffectIdValidator.class); private final Predicate> isApplicableForUpdate = validator -> validator.getClass().equals(RmProjectBeneficiaryIdValidator.class) + || validator.getClass().equals(RmReferrerIdValidator.class) || validator.getClass().equals(RmRecipientIdValidator.class) || validator.getClass().equals(RmSideEffectIdValidator.class) || validator.getClass().equals(RmNullIdValidator.class) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/util/ValidatorUtil.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/util/ValidatorUtil.java index 54ccc74003e..043c7d6a1b5 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/util/ValidatorUtil.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/util/ValidatorUtil.java @@ -8,8 +8,18 @@ import java.util.List; import java.util.stream.Collectors; +/** + * A Validation helper Util + */ public class ValidatorUtil { + /** + * validate and remove valid identifiers from invalidStaffIds + * @param requestInfo + * @param userService + * @param staffIds + * @param invalidStaffIds + */ public static void validateAndEnrichStaffIds(RequestInfo requestInfo, UserService userService, List staffIds, List invalidStaffIds) { if (!CollectionUtils.isEmpty(staffIds)) { diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java index ca9e9a6c808..07e40597092 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java @@ -9,8 +9,11 @@ import org.egov.common.models.project.ProjectStaffSearchRequest; import org.egov.common.models.referralmanagement.Referral; import org.egov.common.models.referralmanagement.ReferralBulkRequest; +import org.egov.common.service.UserService; import org.egov.common.validator.Validator; import org.egov.referralmanagement.config.ReferralManagementConfiguration; +import org.egov.referralmanagement.service.FacilityService; +import org.egov.referralmanagement.util.ValidatorUtil; import org.egov.tracer.model.CustomException; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @@ -25,21 +28,22 @@ import static org.egov.common.utils.CommonUtils.notHavingErrors; import static org.egov.common.utils.CommonUtils.populateErrorDetails; import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; +import static org.egov.referralmanagement.Constants.STAFF; /** - * + * Validate the referrer using user service */ @Component @Order(value = 3) @Slf4j public class RmReferrerIdValidator implements Validator { - private final ServiceRequestClient serviceRequestClient; - private final ReferralManagementConfiguration referralManagementConfiguration; + private final FacilityService facilityService; + private final UserService userService; - public RmReferrerIdValidator(ServiceRequestClient serviceRequestClient, ReferralManagementConfiguration referralManagementConfiguration) { - this.serviceRequestClient = serviceRequestClient; - this.referralManagementConfiguration = referralManagementConfiguration; + public RmReferrerIdValidator(FacilityService facilityService, UserService userService) { + this.facilityService = facilityService; + this.userService = userService; } @Override @@ -49,30 +53,18 @@ public Map> validate(ReferralBulkRequest request) { List entities = request.getReferrals(); Map> tenantIdReferralMap = entities.stream().collect(Collectors.groupingBy(Referral::getTenantId)); tenantIdReferralMap.forEach((tenantId, referralList) -> { - List existingProjectStaffList = new ArrayList<>(); final List projectStaffUuidList = new ArrayList<>(); referralList.forEach(referral -> addIgnoreNull(projectStaffUuidList, referral.getReferrerId())); - ProjectStaffSearch projectStaffSearch = ProjectStaffSearch.builder() - .id(projectStaffUuidList.isEmpty() ? null : projectStaffUuidList) - .build(); + List invalidStaffIds = new ArrayList<>(projectStaffUuidList); try { - ProjectStaffBulkResponse projectStaffBulkResponse = serviceRequestClient.fetchResult( - new StringBuilder(referralManagementConfiguration.getProjectHost() - + referralManagementConfiguration.getProjectStaffSearchUrl() - +"?limit=" + entities.size() - + "&offset=0&tenantId=" + tenantId), - ProjectStaffSearchRequest.builder().requestInfo(request.getRequestInfo()).projectStaff(projectStaffSearch).build(), - ProjectStaffBulkResponse.class - ); - existingProjectStaffList = projectStaffBulkResponse.getProjectStaff(); + ValidatorUtil.validateAndEnrichStaffIds(request.getRequestInfo(), userService, projectStaffUuidList, invalidStaffIds); } catch (Exception e) { throw new CustomException("Project Staff failed to fetch", "Exception : "+e.getMessage()); } - final List existingProjectStaffUuids = new ArrayList<>(); - existingProjectStaffList.forEach(projectStaff -> existingProjectStaffUuids.add(projectStaff.getId())); List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> - !existingProjectStaffUuids.contains(entity.getReferrerId()) + invalidStaffIds.contains(entity.getReferrerId()) ).collect(Collectors.toList()); + invalidEntities.forEach(referral -> { Error error = getErrorForNonExistentEntity(); populateErrorDetails(referral, error, errorDetailsMap); From dcb3f6cb2ad5e3665557f261b70d67ff3a6db8b2 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Fri, 20 Oct 2023 12:51:48 +0530 Subject: [PATCH 14/41] hlm-3376: added test cases --- .../service/ReferralManagementService.java | 8 +- .../ReferralManagementApiController.java | 35 ++- .../helper/ReferralRequestTestBuilder.java | 60 +++++ .../helper/ReferralTestBuilder.java | 78 +++++++ .../ReferralManagementApiControllerTest.java | 208 ++++++++++++++++++ 5 files changed, 384 insertions(+), 5 deletions(-) create mode 100644 health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/ReferralRequestTestBuilder.java create mode 100644 health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/ReferralTestBuilder.java create mode 100644 health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiControllerTest.java diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java index 7d1c4038332..a7c5f09fa43 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java @@ -110,7 +110,7 @@ public List create(ReferralBulkRequest referralRequest, boolean isBulk } catch (Exception exception) { log.error("error occurred while creating referrals: {}", exception.getMessage()); populateErrorDetails(referralRequest, errorDetailsMap, validReferrals, - exception, Constants.SET_SIDE_EFFECTS); + exception, Constants.SET_REFERRALS); } handleErrors(errorDetailsMap, isBulk, Constants.VALIDATION_ERROR); @@ -143,7 +143,7 @@ public List update(ReferralBulkRequest referralRequest, boolean isBulk } catch (Exception exception) { log.error("error occurred while updating referrals", exception); populateErrorDetails(referralRequest, errorDetailsMap, validReferrals, - exception, Constants.SET_SIDE_EFFECTS); + exception, Constants.SET_REFERRALS); } handleErrors(errorDetailsMap, isBulk, Constants.VALIDATION_ERROR); @@ -203,7 +203,7 @@ public List delete(ReferralBulkRequest referralRequest, boolean isBulk } catch (Exception exception) { log.error("error occurred while deleting entities: {}", exception); populateErrorDetails(referralRequest, errorDetailsMap, validReferrals, - exception, Constants.SET_SIDE_EFFECTS); + exception, Constants.SET_REFERRALS); } handleErrors(errorDetailsMap, isBulk, Constants.VALIDATION_ERROR); @@ -225,7 +225,7 @@ private Tuple, Map> validate( log.info("validating request"); Map errorDetailsMap = CommonUtils.validate(validators, isApplicable, request, - Constants.SET_SIDE_EFFECTS); + Constants.SET_REFERRALS); if (!errorDetailsMap.isEmpty() && !isBulk) { log.error("validation error occurred. error details: {}", errorDetailsMap.values().toString()); throw new CustomException(Constants.VALIDATION_ERROR, errorDetailsMap.values().toString()); diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiController.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiController.java index 949f84fbde8..92d867479ee 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiController.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiController.java @@ -28,6 +28,9 @@ import javax.validation.constraints.NotNull; import java.util.List; +/** + * Referral Management Api Controller + */ @Controller @RequestMapping("") @Validated @@ -52,6 +55,11 @@ public ReferralManagementApiController( this.referralManagementConfiguration = referralManagementConfiguration; } + /** + * @ + * @param request + * @return + */ @RequestMapping(value = "/v1/_create", method = RequestMethod.POST) public ResponseEntity referralV1CreatePost(@ApiParam(value = "Capture details of Referral", required = true) @Valid @RequestBody ReferralRequest request) { @@ -66,7 +74,11 @@ public ResponseEntity referralV1CreatePost(@ApiParam(value = " } - + /** + * + * @param request + * @return + */ @RequestMapping(value = "/v1/bulk/_create", method = RequestMethod.POST) public ResponseEntity referralBulkV1CreatePost(@ApiParam(value = "Capture details of Referral", required = true) @Valid @RequestBody ReferralBulkRequest request) { request.getRequestInfo().setApiId(httpServletRequest.getRequestURI()); @@ -77,6 +89,17 @@ public ResponseEntity referralBulkV1CreatePost(@ApiParam(value = " .createResponseInfo(request.getRequestInfo(), true)); } + /** + * + * @param request + * @param limit + * @param offset + * @param tenantId + * @param lastChangedSince + * @param includeDeleted + * @return + * @throws Exception + */ @RequestMapping(value = "/v1/_search", method = RequestMethod.POST) public ResponseEntity referralV1SearchPost(@ApiParam(value = "Referral Search.", required = true) @Valid @RequestBody ReferralSearchRequest request, @NotNull @Min(0) @Max(1000) @ApiParam(value = "Pagination - limit records in response", required = true) @Valid @RequestParam(value = "limit", required = true) Integer limit, @@ -92,6 +115,11 @@ public ResponseEntity referralV1SearchPost(@ApiParam(value return ResponseEntity.status(HttpStatus.OK).body(response); } + /** + * + * @param request + * @return + */ @RequestMapping(value = "/v1/_update", method = RequestMethod.POST) public ResponseEntity referralV1UpdatePost(@ApiParam(value = "Capture details of Existing Referral", required = true) @Valid @RequestBody ReferralRequest request) { Referral referral = referralManagementService.update(request); @@ -106,6 +134,11 @@ public ResponseEntity referralV1UpdatePost(@ApiParam(value = " } + /** + * + * @param request + * @return + */ @RequestMapping(value = "/v1/bulk/_update", method = RequestMethod.POST) public ResponseEntity referralV1BulkUpdatePost(@ApiParam(value = "Capture details of Existing Referral", required = true) @Valid @RequestBody ReferralBulkRequest request) { request.getRequestInfo().setApiId(httpServletRequest.getRequestURI()); diff --git a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/ReferralRequestTestBuilder.java b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/ReferralRequestTestBuilder.java new file mode 100644 index 00000000000..d9e7c9ba034 --- /dev/null +++ b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/ReferralRequestTestBuilder.java @@ -0,0 +1,60 @@ +package org.egov.referralmanagement.helper; + +import org.egov.common.helper.RequestInfoTestBuilder; +import org.egov.common.models.referralmanagement.ReferralRequest; + +import java.util.ArrayList; + +public class ReferralRequestTestBuilder { + private ReferralRequest.ReferralRequestBuilder builder; + + private ArrayList referral = new ArrayList(); + + public ReferralRequestTestBuilder() { + this.builder = ReferralRequest.builder(); + } + + public static ReferralRequestTestBuilder builder() { + return new ReferralRequestTestBuilder(); + } + + public ReferralRequest build() { + return this.builder.build(); + } + + public ReferralRequestTestBuilder withOneReferral() { + builder.requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) + .referral(ReferralTestBuilder.builder().withId().withAuditDetails().build()); + return this; + } + + public ReferralRequestTestBuilder withApiOperationNotNullAndNotCreate() { + builder.requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) + .referral(ReferralTestBuilder.builder().withIdNull().build()); + return this; + } + + public ReferralRequestTestBuilder withApiOperationNotUpdate() { + builder.requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) + .referral(ReferralTestBuilder.builder().withIdNull().build()); + return this; + } + + public ReferralRequestTestBuilder withOneReferralHavingId() { + builder.requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) + .referral(ReferralTestBuilder.builder().withId().withAuditDetails().build()); + return this; + } + + public ReferralRequestTestBuilder withBadTenantIdInOneReferral() { + + builder.requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) + .referral(ReferralTestBuilder.builder().withIdNull().withBadTenantId().build()); + return this; + } + + public ReferralRequestTestBuilder withRequestInfo(){ + this.builder.requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()); + return this; + } +} diff --git a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/ReferralTestBuilder.java b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/ReferralTestBuilder.java new file mode 100644 index 00000000000..8ea5a37e267 --- /dev/null +++ b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/ReferralTestBuilder.java @@ -0,0 +1,78 @@ +package org.egov.referralmanagement.helper; + +import org.egov.common.helper.AuditDetailsTestBuilder; +import org.egov.common.models.referralmanagement.Referral; + +import java.util.ArrayList; +import java.util.Arrays; + +public class ReferralTestBuilder { + + private Referral.ReferralBuilder builder; + + public ReferralTestBuilder() { + this.builder = Referral.builder(); + } + + public static ReferralTestBuilder builder() { + return new ReferralTestBuilder(); + } + + public Referral build() { + return this.builder.hasErrors(false).build(); + } + + public ReferralTestBuilder withIdNull() { + this.builder.projectBeneficiaryId("some-projectBeneficiary-id") + .clientReferenceId("ClientReferenceId") + .id(null) + .projectBeneficiaryClientReferenceId("projectBeneficiaryClientReferenceId") + .reasons(new ArrayList<>(Arrays.asList("fever"))) + .tenantId("some-tenant-id") + .rowVersion(1); + return this; + } + + public ReferralTestBuilder withId() { + withIdNull().builder.id("some-id") + .projectBeneficiaryId("some-projectBeneficiary-id") + .clientReferenceId("ClientReferenceId") + .projectBeneficiaryClientReferenceId("projectBeneficiaryClientReferenceId") + .reasons(new ArrayList<>(Arrays.asList("fever"))) + .tenantId("some-tenant-id") + .rowVersion(1); + return this; + } + + public ReferralTestBuilder withId(String id) { + this.builder.id(id); + return this; + } + + public ReferralTestBuilder withBadTenantId() { + this.builder.tenantId(null); + return this; + } + + public ReferralTestBuilder goodReferral() { + this.builder.id("some-id") + .projectBeneficiaryId("some-projectBeneficiary-id") + .clientReferenceId("ClientReferenceId") + .projectBeneficiaryClientReferenceId("projectBeneficiaryClientReferenceId") + .reasons(new ArrayList<>(Arrays.asList("fever"))) + .tenantId("some-tenant-id") + .auditDetails(AuditDetailsTestBuilder.builder().withAuditDetails().build()) + .clientAuditDetails(AuditDetailsTestBuilder.builder().withAuditDetails().build()); + return this; + } + + public ReferralTestBuilder withAuditDetails() { + this.builder.auditDetails(AuditDetailsTestBuilder.builder().withAuditDetails().build()); + return this; + } + + public ReferralTestBuilder withDeleted() { + this.builder.isDeleted(true); + return this; + } +} diff --git a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiControllerTest.java b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiControllerTest.java new file mode 100644 index 00000000000..c77d8001780 --- /dev/null +++ b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiControllerTest.java @@ -0,0 +1,208 @@ +package org.egov.referralmanagement.web.controllers; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.egov.common.helper.RequestInfoTestBuilder; +import org.egov.common.models.referralmanagement.Referral; +import org.egov.common.models.referralmanagement.ReferralBulkResponse; +import org.egov.common.models.referralmanagement.ReferralRequest; +import org.egov.common.models.referralmanagement.ReferralResponse; +import org.egov.common.models.referralmanagement.ReferralSearch; +import org.egov.common.models.referralmanagement.ReferralSearchRequest; +import org.egov.common.producer.Producer; +import org.egov.referralmanagement.TestConfiguration; +import org.egov.referralmanagement.config.ReferralManagementConfiguration; +import org.egov.referralmanagement.helper.ReferralRequestTestBuilder; +import org.egov.referralmanagement.helper.ReferralTestBuilder; +import org.egov.referralmanagement.service.ReferralManagementService; +import org.egov.tracer.model.CustomException; +import org.egov.tracer.model.ErrorRes; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentMatchers; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Import; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@WebMvcTest(ReferralManagementApiController.class) +@Import(TestConfiguration.class) +public class ReferralManagementApiControllerTest { + + @Autowired + private MockMvc mockMvc; + + @Autowired + private ObjectMapper objectMapper; + + @MockBean + private ReferralManagementService referralManagementService; + + @MockBean + private Producer producer; + + @MockBean + ReferralManagementConfiguration referralManagementConfiguration; + + @Test + @DisplayName("should create side effect and return with 202 accepted") + void shouldCreateReferralAndReturnWith202Accepted() throws Exception { + ReferralRequest request = ReferralRequestTestBuilder.builder() + .withOneReferral() + .withApiOperationNotUpdate() + .build(); + List referrals = getReferrals(); + Mockito.when(referralManagementService.create(ArgumentMatchers.any(ReferralRequest.class))).thenReturn(referrals.get(0)); + + final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/side-effect/v1/_create") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(request))) + .andExpect(MockMvcResultMatchers.status().isAccepted()) + .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON)) + .andReturn(); + String responseStr = result.getResponse().getContentAsString(); + ReferralResponse response = objectMapper.readValue(responseStr, ReferralResponse.class); + + Assertions.assertNotNull(response.getReferral()); + Assertions.assertNotNull(response.getReferral().getId()); + Assertions.assertEquals("successful", response.getResponseInfo().getStatus()); + } + + private List getReferrals() { + Referral referral = ReferralTestBuilder.builder().withId().build(); + List referrals = new ArrayList<>(); + referrals.add(referral); + return referrals; + } + + + @Test + @DisplayName("should send error response with error details with 400 bad request for create") + void shouldSendErrorResWithErrorDetailsWith400BadRequestForCreate() throws Exception { + final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/referralmanagement/v1/_create") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(ReferralRequestTestBuilder.builder() + .withOneReferral() + .withBadTenantIdInOneReferral() + .build()))) + .andExpect(MockMvcResultMatchers.status().isBadRequest()) + .andReturn(); + String responseStr = result.getResponse().getContentAsString(); + ErrorRes response = objectMapper.readValue(responseStr, ErrorRes.class); + + Assertions.assertEquals(1, response.getErrors().size()); + Assertions.assertTrue(response.getErrors().get(0).getCode().contains("tenantId")); + } + + @Test + @DisplayName("should update side effect and return with 202 accepted") + void shouldUpdateReferralAndReturnWith202Accepted() throws Exception { + ReferralRequest request = ReferralRequestTestBuilder.builder() + .withOneReferralHavingId() + .withApiOperationNotNullAndNotCreate() + .build(); + Referral referral = ReferralTestBuilder.builder().withId().build(); + Mockito.when(referralManagementService.update(ArgumentMatchers.any(ReferralRequest.class))).thenReturn(referral); + + final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/referralmanagement/v1/_update") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(request))) + .andExpect(MockMvcResultMatchers.status().isAccepted()) + .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON)) + .andReturn(); + String responseStr = result.getResponse().getContentAsString(); + ReferralResponse response = objectMapper.readValue(responseStr, ReferralResponse.class); + + Assertions.assertNotNull(response.getReferral()); + Assertions.assertNotNull(response.getReferral().getId()); + Assertions.assertEquals("successful", response.getResponseInfo().getStatus()); + } + + @Test + @DisplayName("should send error response with error details with 400 bad request for update") + void shouldSendErrorResWithErrorDetailsWith400BadRequestForUpdate() throws Exception { + final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/referralmanagement/v1/_update") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(ReferralRequestTestBuilder.builder() + .withOneReferralHavingId() + .withBadTenantIdInOneReferral() + .build()))) + .andExpect(MockMvcResultMatchers.status().isBadRequest()) + .andReturn(); + String responseStr = result.getResponse().getContentAsString(); + ErrorRes response = objectMapper.readValue(responseStr, + ErrorRes.class); + + Assertions.assertEquals(1, response.getErrors().size()); + Assertions.assertTrue(response.getErrors().get(0).getCode().contains("tenantId")); + } + + @Test + @DisplayName("Should accept search request and return response as accepted") + void shouldAcceptSearchRequestAndReturnReferral() throws Exception { + + ReferralSearchRequest referralSearchRequest = ReferralSearchRequest.builder().referral( + ReferralSearch.builder().projectBeneficiaryId(Arrays.asList("some-project-beneficiary-id")).build() + ).requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()).build(); + + Mockito.when(referralManagementService.search(ArgumentMatchers.any(ReferralSearchRequest.class), + ArgumentMatchers.any(Integer.class), + ArgumentMatchers.any(Integer.class), + ArgumentMatchers.any(String.class), + ArgumentMatchers.any(Long.class), + ArgumentMatchers.any(Boolean.class))).thenReturn(Arrays.asList(ReferralTestBuilder.builder().withId().withAuditDetails().build())); + + final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post( + "/referralmanagement/v1/_search?limit=10&offset=100&tenantId=default&lastChangedSince=1234322&includeDeleted=false") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(referralSearchRequest))) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON)) + .andReturn(); + String responseStr = result.getResponse().getContentAsString(); + ReferralBulkResponse response = objectMapper.readValue(responseStr, + ReferralBulkResponse.class); + + Assertions.assertEquals(response.getReferrals().size(), 1); + } + + @Test + @DisplayName("Should accept search request and return response as accepted") + void shouldThrowExceptionIfNoResultFound() throws Exception { + + ReferralSearchRequest referralSearchRequest = ReferralSearchRequest.builder().referral( + ReferralSearch.builder().projectBeneficiaryId(Arrays.asList("some-project-beneficiary-id")).build() + ).requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()).build(); + + Mockito.when(referralManagementService.search(ArgumentMatchers.any(ReferralSearchRequest.class), + ArgumentMatchers.any(Integer.class), + ArgumentMatchers.any(Integer.class), + ArgumentMatchers.any(String.class), + ArgumentMatchers.any(Long.class), + ArgumentMatchers.any(Boolean.class))).thenThrow(new CustomException("NO_RESULT_FOUND", "No Referral found.")); + + + final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/referralmanagement/v1/_search?limit=10&offset=100&tenantId=default&lastChangedSince=1234322&includeDeleted=false") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(referralSearchRequest))) + .andExpect(MockMvcResultMatchers.status().isBadRequest()) + .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON)) + .andReturn(); + String responseStr = result.getResponse().getContentAsString(); + ErrorRes response = objectMapper.readValue(responseStr, + ErrorRes.class); + + Assertions.assertEquals(response.getErrors().size(), 1); + } + +} From d8c2934021f2e44a7df6fdbf10ef8f67155d1417 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Fri, 20 Oct 2023 13:56:27 +0530 Subject: [PATCH 15/41] hlm-3376: referralmanagement context in test cases --- .../ReferralManagementApiControllerTest.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiControllerTest.java b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiControllerTest.java index c77d8001780..bcf1518c0c1 100644 --- a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiControllerTest.java +++ b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiControllerTest.java @@ -55,7 +55,7 @@ public class ReferralManagementApiControllerTest { ReferralManagementConfiguration referralManagementConfiguration; @Test - @DisplayName("should create side effect and return with 202 accepted") + @DisplayName("should create referral and return with 202 accepted") void shouldCreateReferralAndReturnWith202Accepted() throws Exception { ReferralRequest request = ReferralRequestTestBuilder.builder() .withOneReferral() @@ -64,7 +64,7 @@ void shouldCreateReferralAndReturnWith202Accepted() throws Exception { List referrals = getReferrals(); Mockito.when(referralManagementService.create(ArgumentMatchers.any(ReferralRequest.class))).thenReturn(referrals.get(0)); - final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/side-effect/v1/_create") + final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/v1/_create") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(request))) .andExpect(MockMvcResultMatchers.status().isAccepted()) @@ -89,7 +89,7 @@ private List getReferrals() { @Test @DisplayName("should send error response with error details with 400 bad request for create") void shouldSendErrorResWithErrorDetailsWith400BadRequestForCreate() throws Exception { - final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/referralmanagement/v1/_create") + final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/v1/_create") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(ReferralRequestTestBuilder.builder() .withOneReferral() @@ -105,7 +105,7 @@ void shouldSendErrorResWithErrorDetailsWith400BadRequestForCreate() throws Excep } @Test - @DisplayName("should update side effect and return with 202 accepted") + @DisplayName("should update referral and return with 202 accepted") void shouldUpdateReferralAndReturnWith202Accepted() throws Exception { ReferralRequest request = ReferralRequestTestBuilder.builder() .withOneReferralHavingId() @@ -114,7 +114,7 @@ void shouldUpdateReferralAndReturnWith202Accepted() throws Exception { Referral referral = ReferralTestBuilder.builder().withId().build(); Mockito.when(referralManagementService.update(ArgumentMatchers.any(ReferralRequest.class))).thenReturn(referral); - final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/referralmanagement/v1/_update") + final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/v1/_update") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(request))) .andExpect(MockMvcResultMatchers.status().isAccepted()) @@ -131,7 +131,7 @@ void shouldUpdateReferralAndReturnWith202Accepted() throws Exception { @Test @DisplayName("should send error response with error details with 400 bad request for update") void shouldSendErrorResWithErrorDetailsWith400BadRequestForUpdate() throws Exception { - final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/referralmanagement/v1/_update") + final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/v1/_update") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(ReferralRequestTestBuilder.builder() .withOneReferralHavingId() @@ -163,7 +163,7 @@ void shouldAcceptSearchRequestAndReturnReferral() throws Exception { ArgumentMatchers.any(Boolean.class))).thenReturn(Arrays.asList(ReferralTestBuilder.builder().withId().withAuditDetails().build())); final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post( - "/referralmanagement/v1/_search?limit=10&offset=100&tenantId=default&lastChangedSince=1234322&includeDeleted=false") + "/v1/_search?limit=10&offset=100&tenantId=default&lastChangedSince=1234322&includeDeleted=false") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(referralSearchRequest))) .andExpect(MockMvcResultMatchers.status().isOk()) @@ -192,7 +192,7 @@ void shouldThrowExceptionIfNoResultFound() throws Exception { ArgumentMatchers.any(Boolean.class))).thenThrow(new CustomException("NO_RESULT_FOUND", "No Referral found.")); - final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/referralmanagement/v1/_search?limit=10&offset=100&tenantId=default&lastChangedSince=1234322&includeDeleted=false") + final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/v1/_search?limit=10&offset=100&tenantId=default&lastChangedSince=1234322&includeDeleted=false") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(referralSearchRequest))) .andExpect(MockMvcResultMatchers.status().isBadRequest()) From d8fee782ec5c66ccf28cd3bd75d0e78174d93708 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Fri, 20 Oct 2023 14:47:31 +0530 Subject: [PATCH 16/41] hlm-3376: changed parameters for find by id --- .../egov/referralmanagement/repository/ReferralRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java index edc5f8d3530..4e1081d039e 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java @@ -66,7 +66,7 @@ public List find(ReferralSearch searchObject, Integer limit, Integer o return referralList; } - public List findById(List ids, String columnName, Boolean includeDeleted) { + public List findById(List ids, Boolean includeDeleted, String columnName) { List objFound = findInCache(ids).stream() .filter(entity -> entity.getIsDeleted().equals(includeDeleted)) .collect(Collectors.toList()); From 9945fa6c64a79a0c3fe4a1e4151d315b322eb940 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Fri, 20 Oct 2023 15:03:54 +0530 Subject: [PATCH 17/41] HLM-3372: typo fix --- .../referralmanagement/repository/ReferralRepository.java | 2 +- .../validator/RmNonExistentEntityValidator.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java index 4e1081d039e..a90b634eb9f 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java @@ -80,7 +80,7 @@ public List findById(List ids, Boolean includeDeleted, String } } - String query = String.format("SELECT r.*, , se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedTime, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid WHERE r.%s IN (:ids) ", columnName); + String query = String.format("SELECT r.*, se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedTime, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid WHERE r.%s IN (:ids) ", columnName); if (includeDeleted == null || !includeDeleted) { query += " AND r.isDeleted = false "; } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmNonExistentEntityValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmNonExistentEntityValidator.java index 295d88f5227..5009ee003f2 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmNonExistentEntityValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmNonExistentEntityValidator.java @@ -54,9 +54,9 @@ public Map> validate(ReferralBulkRequest request) { Map iMap = getIdToObjMap(referrals .stream().filter(notHavingErrors()).collect(Collectors.toList()), idMethod); if (!iMap.isEmpty()) { - List sideEffectIds = new ArrayList<>(iMap.keySet()); + List referralIds = new ArrayList<>(iMap.keySet()); List existingReferrals = referralRepository - .findById(sideEffectIds, false, getIdFieldName(idMethod)); + .findById(referralIds, false, getIdFieldName(idMethod)); List nonExistentReferrals = checkNonExistentEntities(iMap, existingReferrals, idMethod); nonExistentReferrals.forEach(sideEffect -> { From 1324ea8b2a930b62328c27df581409c4ca181e82 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Fri, 20 Oct 2023 16:35:18 +0530 Subject: [PATCH 18/41] hlm-3376: persister changes, removed invalid parameters --- .../src/main/resources/referral-management-persister.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/health-services/referralmanagement/src/main/resources/referral-management-persister.yml b/health-services/referralmanagement/src/main/resources/referral-management-persister.yml index 98f04078df7..de72b595fa9 100644 --- a/health-services/referralmanagement/src/main/resources/referral-management-persister.yml +++ b/health-services/referralmanagement/src/main/resources/referral-management-persister.yml @@ -116,7 +116,7 @@ serviceMaps: fromTopic: update-referral-topic isTransaction: true queryMaps: - - query: UPDATE REFERRAL SET tenantId = ?, projectBeneficiaryId = ?, projectBeneficiaryClientReferenceId = ?, referrerId = ?, recipientId = ?, recipientType = ?, reasons = ?, additionalDetails = ?, sideEffectId = ?, sideEffectClientReferenceId = ?, createdBy = ?, createdTime = ?, lastModifiedBy = ?, lastModifiedTime = ?, clientCreatedBy = ?, clientCreatedTime = ?, clientLastModifiedBy = ?, clientLastModifiedTime = ?, rowVersion = ?, isDeleted = ? WHERE ID = ?; + - query: UPDATE REFERRAL SET tenantId = ?, projectBeneficiaryId = ?, projectBeneficiaryClientReferenceId = ?, referrerId = ?, recipientId = ?, recipientType = ?, reasons = ?, additionalDetails = ?, sideEffectId = ?, sideEffectClientReferenceId = ?, lastModifiedBy = ?, lastModifiedTime = ?, clientLastModifiedBy = ?, clientLastModifiedTime = ?, rowVersion = ?, isDeleted = ? WHERE ID = ?; basePath: $.* jsonMaps: - jsonPath: $.*.tenantId @@ -155,4 +155,4 @@ serviceMaps: - jsonPath: $.*.clientAuditDetails.lastModifiedTime - jsonPath: $.*.rowVersion - jsonPath: $.*.isDeleted - - jsonPath: $.*.id + - jsonPath: $.*.id \ No newline at end of file From fafe9d4396a8af082aa3057bb0f93cd1c4629d65 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Fri, 20 Oct 2023 16:55:50 +0530 Subject: [PATCH 19/41] hlm-3372: added changes as per code review, removed unused properties --- .../ReferralManagementEnrichmentService.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/enrichment/ReferralManagementEnrichmentService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/enrichment/ReferralManagementEnrichmentService.java index 659e54eb280..b0cd68a0cc9 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/enrichment/ReferralManagementEnrichmentService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/enrichment/ReferralManagementEnrichmentService.java @@ -1,12 +1,9 @@ package org.egov.referralmanagement.service.enrichment; import lombok.extern.slf4j.Slf4j; -import org.egov.referralmanagement.repository.ReferralRepository; import org.egov.common.models.referralmanagement.Referral; import org.egov.common.models.referralmanagement.ReferralBulkRequest; -import org.egov.common.service.IdGenService; import org.egov.common.utils.CommonUtils; -import org.egov.referralmanagement.config.ReferralManagementConfiguration; import org.springframework.stereotype.Component; import java.util.List; @@ -20,19 +17,13 @@ @Component @Slf4j public class ReferralManagementEnrichmentService { - private final IdGenService idGenService; - private final ReferralManagementConfiguration referralManagementConfiguration; - - private final ReferralRepository referralRepository; - - public ReferralManagementEnrichmentService(IdGenService idGenService, ReferralManagementConfiguration referralManagementConfiguration, ReferralRepository referralRepository) { - this.idGenService = idGenService; - this.referralManagementConfiguration = referralManagementConfiguration; - this.referralRepository = referralRepository; - } - - public void create(List entities, ReferralBulkRequest request) throws Exception { + /** + * + * @param entities + * @param request + */ + public void create(List entities, ReferralBulkRequest request) { log.info("starting the enrichment for create referrals"); log.info("generating IDs using UUID"); List idList = CommonUtils.uuidSupplier().apply(entities.size()); @@ -41,6 +32,11 @@ public void create(List entities, ReferralBulkRequest request) throws log.info("enrichment done"); } + /** + * + * @param entities + * @param request + */ public void update(List entities, ReferralBulkRequest request) { log.info("starting the enrichment for create referrals"); Map referralMap = getIdToObjMap(entities); @@ -48,6 +44,11 @@ public void update(List entities, ReferralBulkRequest request) { log.info("enrichment done"); } + /** + * + * @param entities + * @param request + */ public void delete(List entities, ReferralBulkRequest request) { log.info("starting the enrichment for delete referrals"); enrichForDelete(entities, request.getRequestInfo(), true); From 2c48a54df342766cada5087e11e3699808533791 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Mon, 23 Oct 2023 11:35:07 +0530 Subject: [PATCH 20/41] hlm-3376: recipient validator for faciliy not working fix --- .../referralmanagement/validator/RmRecipientIdValidator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java index 69b4fd21c02..26d6094fcfd 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java @@ -71,7 +71,7 @@ public Map> validate(ReferralBulkRequest request) { ValidatorUtil.validateAndEnrichStaffIds(request.getRequestInfo(), userService, projectStaffUuidList, invalidStaffIds); // validate and remove valid identifiers from invalidfacilityIds - List invalidFacilityIds = new ArrayList<>(projectStaffUuidList); + List invalidFacilityIds = new ArrayList<>(facilityIdList); List validFacilityIds = facilityService.validateFacilityIds(facilityIdList, (List) entities, tenantId, errorDetailsMap, request.getRequestInfo()); invalidFacilityIds.removeAll(validFacilityIds); From a37b17c32de2078de3e7e8848834a7fc38bacc40 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Mon, 23 Oct 2023 12:31:32 +0530 Subject: [PATCH 21/41] HLM-3376: throwing exception on invalid recipient type --- .../src/main/java/org/egov/referralmanagement/Constants.java | 2 ++ .../referralmanagement/validator/RmRecipientIdValidator.java | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/Constants.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/Constants.java index a2d9a0dad47..7bd29b61cc1 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/Constants.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/Constants.java @@ -12,4 +12,6 @@ public interface Constants { String GET_ID = "getId"; String STAFF = "STAFF"; String FACILITY = "FACILITY"; + + String INVALID_RECIPIENT_TYPE = "Invalid Recipient Type"; } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java index 26d6094fcfd..c853663a974 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java @@ -10,6 +10,7 @@ import org.egov.common.validator.Validator; import org.egov.referralmanagement.service.FacilityService; import org.egov.referralmanagement.util.ValidatorUtil; +import org.egov.tracer.model.CustomException; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @@ -24,6 +25,7 @@ import static org.egov.common.utils.CommonUtils.populateErrorDetails; import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; import static org.egov.referralmanagement.Constants.FACILITY; +import static org.egov.referralmanagement.Constants.INVALID_RECIPIENT_TYPE; import static org.egov.referralmanagement.Constants.STAFF; /** @@ -63,6 +65,9 @@ public Map> validate(ReferralBulkRequest request) { break; case FACILITY: addIgnoreNull(facilityIdList, referral.getRecipientId()); + break; + default: + throw new CustomException(INVALID_RECIPIENT_TYPE, "Exception : The Recipient Type is invalid."); } }); From ef3073d8192164c5d60be3ef612c31bc84b4db15 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Mon, 23 Oct 2023 16:57:17 +0530 Subject: [PATCH 22/41] HLM-4062: Updated pom.xml of household --- health-services/household/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/health-services/household/pom.xml b/health-services/household/pom.xml index dd4e667a832..1024384ae9d 100644 --- a/health-services/household/pom.xml +++ b/health-services/household/pom.xml @@ -49,7 +49,7 @@ org.egov.common health-services-models - 1.0.9-SNAPSHOT + 1.0.10-SNAPSHOT compile From 33678b7d6bd028b3a11d832f6a54d07fc1c71154 Mon Sep 17 00:00:00 2001 From: kanishq-egov <138671649+kanishq-egov@users.noreply.github.com> Date: Thu, 26 Oct 2023 16:18:50 +0530 Subject: [PATCH 23/41] Hlm 3376 reviewcomments (#524) * HLM-3376: review comments commit * HLM-3069: side effect code comments, code refactor * HLM-3376: code review comments and code refactoring * updated the common-models version to 1.0.10, and updated in dependent service * HLM-3376 : Added additional field in side effect, referral. * HLM-3376: missing column fix * HLM-3372: constants type changed * HLM-3376: removed not used validators * code refactor and code comments * hlm-3376: added test cases * hlm-3376: referralmanagement context in test cases * hlm-3376: changed parameters for find by id * HLM-3372: typo fix * hlm-3376: persister changes, removed invalid parameters * hlm-3372: added changes as per code review, removed unused properties * hlm-3376: recipient validator for faciliy not working fix * HLM-3376: throwing exception on invalid recipient type * HLM-3376: added comments as per review comments * HLM-3376 : added changes as per code review comments, each column's name included in query * HLM-3376: query column names --- .../ReferralBulkRequest.java | 14 ++- .../ReferralBulkResponse.java | 12 ++- .../sideeffect/SideEffectBulkRequest.java | 8 ++ .../sideeffect/SideEffectBulkResponse.java | 8 ++ .../repository/ReferralRepository.java | 4 +- .../service/FacilityService.java | 37 ++++++-- .../RmProjectBeneficiaryIdValidator.java | 95 +++++++++++-------- .../validator/RmRecipientIdValidator.java | 82 ++++++++-------- .../validator/RmReferrerIdValidator.java | 54 ++++++----- .../validator/RmSideEffectIdValidator.java | 20 ++-- 10 files changed, 211 insertions(+), 123 deletions(-) diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java index 251ac97ba01..e8daf9a446b 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java @@ -28,11 +28,19 @@ public class ReferralBulkRequest { @NotNull @Valid @Size(min = 1) - private List referrals = new ArrayList<>(); + private List referrals; + /** + * Add a Referral item to the list of Referrals in the bulk request. + * + * @param referralItem The Referral item to add to the request. + * @return The updated ReferralBulkRequest. + */ public ReferralBulkRequest addReferralItem(Referral referralItem) { - if(Objects.nonNull(Objects.nonNull(referralItem))) - this.referrals.add(referralItem); + if(Objects.isNull(referrals)) + referrals = new ArrayList<>(); + if(Objects.nonNull(referralItem)) + referrals.add(referralItem); return this; } } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java index 5a96776b32f..8fd04588e0b 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java @@ -26,11 +26,19 @@ public class ReferralBulkResponse { @JsonProperty("Referrals") @NotNull @Valid - private List referrals = new ArrayList<>(); + private List referrals; + /** + * Add a Referral item to the list of Referrals in the bulk response. + * + * @param referralItem The Referral item to add to the response. + * @return The updated ReferralBulkResponse. + */ public ReferralBulkResponse addReferralItem(Referral referralItem) { + if(Objects.isNull(referrals)) + referrals = new ArrayList<>(); if(Objects.nonNull(referralItem)) - this.referrals.add(referralItem); + referrals.add(referralItem); return this; } } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java index 21ca6ec085e..7b5cb98ebfc 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java @@ -30,7 +30,15 @@ public class SideEffectBulkRequest { @Size(min=1) private List sideEffects = new ArrayList<>(); + /** + * Add a SideEffect item to the list of side effects in the request. + * + * @param sideEffectItem The SideEffect item to add to the request. + * @return The updated SideEffectBulkRequest. + */ public SideEffectBulkRequest addSideEffectItem(SideEffect sideEffectItem) { + if(Objects.isNull(sideEffects)) + sideEffects = new ArrayList<>(); if(Objects.nonNull(sideEffectItem)) this.sideEffects.add(sideEffectItem); return this; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java index 5d984358917..64b8a8d2989 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java @@ -29,7 +29,15 @@ public class SideEffectBulkResponse { @Valid private List sideEffects = new ArrayList<>(); + /** + * Add a SideEffect item to the list of side effects in the response. + * + * @param sideEffectItem The SideEffect item to add to the response. + * @return The updated SideEffectBulkResponse. + */ public SideEffectBulkResponse addSideEffectItem(SideEffect sideEffectItem) { + if(Objects.isNull(sideEffects)) + sideEffects = new ArrayList<>(); if(Objects.nonNull(sideEffectItem)) this.sideEffects.add(sideEffectItem); return this; diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java index a90b634eb9f..186e126cc93 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java @@ -40,7 +40,7 @@ protected ReferralRepository(Producer producer, NamedParameterJdbcTemplate named public List find(ReferralSearch searchObject, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted) throws QueryBuilderException { - String query = "SELECT r.*, se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedTime, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid"; + String query = "SELECT r.id, r.clientreferenceid, r.tenantid, r.projectbeneficiaryid, r.projectbeneficiaryclientreferenceid, r.referrerid, r.recipientid, r.recipienttype, r.reasons, r.sideeffectid, r.sideeffectclientreferenceid, r.createdby, r.createdtime, r.lastmodifiedby, r.lastmodifiedtime, r.clientcreatedby, r.clientcreatedtime, r.clientlastmodifiedby, r.clientlastmodifiedtime, r.rowversion, r.isdeleted, r.additionaldetails, se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedTime, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid"; Map paramsMap = new HashMap<>(); List whereFields = GenericQueryBuilder.getFieldsWithCondition(searchObject, QueryFieldChecker.isNotNull, paramsMap); @@ -80,7 +80,7 @@ public List findById(List ids, Boolean includeDeleted, String } } - String query = String.format("SELECT r.*, se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedTime, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid WHERE r.%s IN (:ids) ", columnName); + String query = String.format("SELECT r.id, r.clientreferenceid, r.tenantid, r.projectbeneficiaryid, r.projectbeneficiaryclientreferenceid, r.referrerid, r.recipientid, r.recipienttype, r.reasons, r.sideeffectid, r.sideeffectclientreferenceid, r.createdby, r.createdtime, r.lastmodifiedby, r.lastmodifiedtime, r.clientcreatedby, r.clientcreatedtime, r.clientlastmodifiedby, r.clientlastmodifiedtime, r.rowversion, r.isdeleted, r.additionaldetails, se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedTime, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid WHERE r.%s IN (:ids) ", columnName); if (includeDeleted == null || !includeDeleted) { query += " AND r.isDeleted = false "; } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/FacilityService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/FacilityService.java index 7f332239538..c687029b90d 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/FacilityService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/FacilityService.java @@ -9,6 +9,7 @@ import org.egov.common.models.facility.FacilitySearch; import org.egov.common.models.facility.FacilitySearchRequest; import org.egov.referralmanagement.config.ReferralManagementConfiguration; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -20,6 +21,9 @@ import static org.egov.common.utils.CommonUtils.populateErrorDetails; import static org.egov.common.utils.ValidatorUtils.getErrorForEntityWithNetworkError; +/** + * Facility Service that validates facility IDs using an API call. + */ @Service @Slf4j public class FacilityService { @@ -28,41 +32,60 @@ public class FacilityService { private final ServiceRequestClient serviceRequestClient; + @Autowired public FacilityService(ReferralManagementConfiguration referralManagementConfiguration, ServiceRequestClient serviceRequestClient) { this.referralManagementConfiguration = referralManagementConfiguration; this.serviceRequestClient = serviceRequestClient; } + /** + * Validate a list of facility IDs by making an API call. + * + * @param entityIds List of facility IDs to validate. + * @param entities List of entities associated with the facility IDs. + * @param tenantId Tenant ID for filtering facilities. + * @param errorDetailsMap A map to store error details for each entity. + * @param requestInfo Request information for the API call. + * @return List of valid facility IDs. + */ public List validateFacilityIds(List entityIds, List entities, String tenantId, Map> errorDetailsMap, RequestInfo requestInfo) { - + // Check if the entityIds list is empty, return an empty list if so. if (CollectionUtils.isEmpty(entityIds)) return Collections.emptyList(); - + + // Create a FacilitySearchRequest to fetch facility information for the given IDs. FacilitySearchRequest facilitySearchRequest = FacilitySearchRequest.builder() .facility(FacilitySearch.builder().id(entityIds).build()) .requestInfo(requestInfo) .build(); try { + // Make an API call to fetch facilities based on entity IDs. FacilityBulkResponse response = serviceRequestClient.fetchResult( - new StringBuilder(referralManagementConfiguration.getFacilityHost() - + referralManagementConfiguration.getFacilitySearchUrl() - + "?limit=" + entityIds.size() - + "&offset=0&tenantId=" + tenantId), + new StringBuilder(referralManagementConfiguration.getFacilityHost()) + .append(referralManagementConfiguration.getFacilitySearchUrl()) + .append("?limit=").append(entityIds.size()) + .append("&offset=0&tenantId=").append(tenantId), facilitySearchRequest, FacilityBulkResponse.class); + + // Extract and return valid facility IDs from the response. return response.getFacilities().stream().map(Facility::getId).collect(Collectors.toList()); } catch (Exception e) { log.error("error while fetching facility list", e); + + // Handle errors by associating errors with the respective entities. entities.forEach( entity -> { Error error = getErrorForEntityWithNetworkError(); populateErrorDetails(entity, error, errorDetailsMap); }); - return Collections.emptyList(); } + + // Return an empty list in case of an error. + return Collections.emptyList(); } } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java index f02360ecd88..3bd6d90554e 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java @@ -51,51 +51,64 @@ public Map> validate(ReferralBulkRequest request) { List entities = request.getReferrals(); Map> tenantIdReferralMap = entities.stream().collect(Collectors.groupingBy(Referral::getTenantId)); tenantIdReferralMap.forEach((tenantId, referralList) -> { - List existingProjectBeneficiaries = null; - final List projectBeneficiaryIdList = new ArrayList<>(); - final List projectBeneficiaryClientReferenceIdList = new ArrayList<>(); - referralList.forEach(referral -> { - addIgnoreNull(projectBeneficiaryIdList, referral.getProjectBeneficiaryId()); - addIgnoreNull(projectBeneficiaryClientReferenceIdList, referral.getProjectBeneficiaryClientReferenceId()); - }); - ProjectBeneficiarySearch projectBeneficiarySearch = ProjectBeneficiarySearch.builder() - .id(projectBeneficiaryIdList.isEmpty() ? null : projectBeneficiaryIdList) - .clientReferenceId(projectBeneficiaryClientReferenceIdList.isEmpty() ? null : projectBeneficiaryClientReferenceIdList) - .build(); - try { - // validating project beneficiary ids by callilng project beneficiary search and fetching the valid ids. - BeneficiaryBulkResponse beneficiaryBulkResponse = serviceRequestClient.fetchResult( - new StringBuilder(referralManagementConfiguration.getProjectHost() - + referralManagementConfiguration.getProjectBeneficiarySearchUrl() - +"?limit=" + entities.size() - + "&offset=0&tenantId=" + tenantId), - BeneficiarySearchRequest.builder().requestInfo(request.getRequestInfo()).projectBeneficiary(projectBeneficiarySearch).build(), - BeneficiaryBulkResponse.class - ); - existingProjectBeneficiaries = beneficiaryBulkResponse.getProjectBeneficiaries(); - } catch (QueryBuilderException e) { - existingProjectBeneficiaries = Collections.emptyList(); - } catch (Exception e) { - throw new CustomException("Project Beneficiaries failed to fetch", "Exception : "+e.getMessage()); - } - final List existingProjectBeneficiaryIds = new ArrayList<>(); - final List existingProjectBeneficiaryClientReferenceIds = new ArrayList<>(); - existingProjectBeneficiaries.forEach(projectBeneficiary -> { - existingProjectBeneficiaryIds.add(projectBeneficiary.getId()); - existingProjectBeneficiaryClientReferenceIds.add(projectBeneficiary.getClientReferenceId()); - }); - List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> - !existingProjectBeneficiaryClientReferenceIds.contains(entity.getProjectBeneficiaryClientReferenceId()) - && !existingProjectBeneficiaryIds.contains(entity.getProjectBeneficiaryId()) - ).collect(Collectors.toList()); - invalidEntities.forEach(referral -> { - Error error = getErrorForNonExistentEntity(); - populateErrorDetails(referral, error, errorDetailsMap); - }); + /** Get all the existing project beneficiaries in the referral list from Project Service + */ + List existingProjectBeneficiaries = getExistingProjectBeneficiaries(tenantId, referralList, request); + /** Validate project beneficiaries and populate error map if invalid entities are found + */ + validateAndPopulateErrors(existingProjectBeneficiaries, entities, errorDetailsMap); }); return errorDetailsMap; } private void addIgnoreNull(List list, String item) { if(Objects.nonNull(item)) list.add(item); } + + private List getExistingProjectBeneficiaries(String tenantId, List referrals, ReferralBulkRequest request) { + List existingProjectBeneficiaries = null; + final List projectBeneficiaryIdList = new ArrayList<>(); + final List projectBeneficiaryClientReferenceIdList = new ArrayList<>(); + referrals.forEach(referral -> { + addIgnoreNull(projectBeneficiaryIdList, referral.getProjectBeneficiaryId()); + addIgnoreNull(projectBeneficiaryClientReferenceIdList, referral.getProjectBeneficiaryClientReferenceId()); + }); + ProjectBeneficiarySearch projectBeneficiarySearch = ProjectBeneficiarySearch.builder() + .id(projectBeneficiaryIdList.isEmpty() ? null : projectBeneficiaryIdList) + .clientReferenceId(projectBeneficiaryClientReferenceIdList.isEmpty() ? null : projectBeneficiaryClientReferenceIdList) + .build(); + try { + // using project beneficiary search and fetching the valid ids. + BeneficiaryBulkResponse beneficiaryBulkResponse = serviceRequestClient.fetchResult( + new StringBuilder(referralManagementConfiguration.getProjectHost() + + referralManagementConfiguration.getProjectBeneficiarySearchUrl() + +"?limit=" + referrals.size() + + "&offset=0&tenantId=" + tenantId), + BeneficiarySearchRequest.builder().requestInfo(request.getRequestInfo()).projectBeneficiary(projectBeneficiarySearch).build(), + BeneficiaryBulkResponse.class + ); + existingProjectBeneficiaries = beneficiaryBulkResponse.getProjectBeneficiaries(); + } catch (QueryBuilderException e) { + existingProjectBeneficiaries = Collections.emptyList(); + } catch (Exception e) { + throw new CustomException("Project Beneficiaries failed to fetch", "Exception : "+e.getMessage()); + } + return existingProjectBeneficiaries; + } + + private void validateAndPopulateErrors(List existingProjectBeneficiaries, List entities, Map> errorDetailsMap) { + final List existingProjectBeneficiaryIds = new ArrayList<>(); + final List existingProjectBeneficiaryClientReferenceIds = new ArrayList<>(); + existingProjectBeneficiaries.forEach(projectBeneficiary -> { + existingProjectBeneficiaryIds.add(projectBeneficiary.getId()); + existingProjectBeneficiaryClientReferenceIds.add(projectBeneficiary.getClientReferenceId()); + }); + List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> + (Objects.nonNull(entity.getProjectBeneficiaryClientReferenceId()) && !existingProjectBeneficiaryClientReferenceIds.contains(entity.getProjectBeneficiaryClientReferenceId()) ) + || (Objects.nonNull(entity.getProjectBeneficiaryClientReferenceId()) && !existingProjectBeneficiaryIds.contains(entity.getProjectBeneficiaryId())) + ).collect(Collectors.toList()); + invalidEntities.forEach(referral -> { + Error error = getErrorForNonExistentEntity(); + populateErrorDetails(referral, error, errorDetailsMap); + }); + } } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java index c853663a974..a068a4882f2 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmRecipientIdValidator.java @@ -1,9 +1,8 @@ package org.egov.referralmanagement.validator; import lombok.extern.slf4j.Slf4j; +import org.egov.common.ds.Tuple; import org.egov.common.models.Error; -import org.egov.common.models.facility.Facility; -import org.egov.common.models.project.ProjectStaff; import org.egov.common.models.referralmanagement.Referral; import org.egov.common.models.referralmanagement.ReferralBulkRequest; import org.egov.common.service.UserService; @@ -49,46 +48,15 @@ public RmRecipientIdValidator(FacilityService facilityService, UserService userS */ @Override public Map> validate(ReferralBulkRequest request) { - log.info("validating project beneficiary id"); + log.info("validating recipient id"); Map> errorDetailsMap = new HashMap<>(); List entities = request.getReferrals(); Map> tenantIdReferralMap = entities.stream().collect(Collectors.groupingBy(Referral::getTenantId)); tenantIdReferralMap.forEach((tenantId, referralList) -> { - List existingProjectStaffList = new ArrayList<>(); - List existingFacilityList = new ArrayList<>(); - final List projectStaffUuidList = new ArrayList<>(); - final List facilityIdList = new ArrayList<>(); - referralList.forEach(referral -> { - switch (referral.getRecipientType()) { - case STAFF : - addIgnoreNull(projectStaffUuidList, referral.getRecipientId()); - break; - case FACILITY: - addIgnoreNull(facilityIdList, referral.getRecipientId()); - break; - default: - throw new CustomException(INVALID_RECIPIENT_TYPE, "Exception : The Recipient Type is invalid."); - } - }); - List invalidStaffIds = new ArrayList<>(projectStaffUuidList); - // validate and remove valid identifiers from invalidStaffIds - ValidatorUtil.validateAndEnrichStaffIds(request.getRequestInfo(), userService, projectStaffUuidList, invalidStaffIds); - - // validate and remove valid identifiers from invalidfacilityIds - List invalidFacilityIds = new ArrayList<>(facilityIdList); - List validFacilityIds = facilityService.validateFacilityIds(facilityIdList, (List) entities, - tenantId, errorDetailsMap, request.getRequestInfo()); - invalidFacilityIds.removeAll(validFacilityIds); - - List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> - entity.getRecipientType().equals(STAFF) ? invalidStaffIds.contains(entity.getRecipientId()) : invalidFacilityIds.contains(entity.getRecipientId()) - ).collect(Collectors.toList()); - - invalidEntities.forEach(referral -> { - Error error = getErrorForNonExistentEntity(); - populateErrorDetails(referral, error, errorDetailsMap); - }); + Tuple, List> tuple = getInvalidStaffAndFacilityId(request, entities, tenantId, referralList, errorDetailsMap); + // validate and populate error if found. + validateAndPopulateErrors(entities, tuple.getX(), tuple.getY(), errorDetailsMap); }); return errorDetailsMap; } @@ -96,4 +64,44 @@ public Map> validate(ReferralBulkRequest request) { private void addIgnoreNull(List list, String item) { if(Objects.nonNull(item)) list.add(item); } + + private Tuple, List> getInvalidStaffAndFacilityId(ReferralBulkRequest request, List entities, String tenantId, List referralList, Map> errorDetailsMap) { + final List projectStaffUuidList = new ArrayList<>(); + final List facilityIdList = new ArrayList<>(); + referralList.forEach(referral -> { + switch (referral.getRecipientType()) { + case STAFF : + addIgnoreNull(projectStaffUuidList, referral.getRecipientId()); + break; + case FACILITY: + addIgnoreNull(facilityIdList, referral.getRecipientId()); + break; + default: + throw new CustomException(INVALID_RECIPIENT_TYPE, "Exception : The Recipient Type is invalid."); + } + }); + + List invalidStaffIds = new ArrayList<>(projectStaffUuidList); + // fetch valid identifiers and remove it from invalidStaffIds + ValidatorUtil.validateAndEnrichStaffIds(request.getRequestInfo(), userService, projectStaffUuidList, invalidStaffIds); + + // fetch valid facilities and remove it from invalidfacilityIds + List invalidFacilityIds = new ArrayList<>(facilityIdList); + List validFacilityIds = facilityService.validateFacilityIds(facilityIdList, entities, tenantId, + errorDetailsMap, request.getRequestInfo()); + invalidFacilityIds.removeAll(validFacilityIds); + + return new Tuple<>(invalidStaffIds, invalidFacilityIds); + } + + private void validateAndPopulateErrors(List entities, List invalidStaffIds, List invalidFacilityIds, Map> errorDetailsMap) { + List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> + entity.getRecipientType().equals(STAFF) ? invalidStaffIds.contains(entity.getRecipientId()) : invalidFacilityIds.contains(entity.getRecipientId()) + ).collect(Collectors.toList()); + + invalidEntities.forEach(referral -> { + Error error = getErrorForNonExistentEntity(); + populateErrorDetails(referral, error, errorDetailsMap); + }); + } } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java index 07e40597092..10f5e265579 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmReferrerIdValidator.java @@ -1,17 +1,11 @@ package org.egov.referralmanagement.validator; import lombok.extern.slf4j.Slf4j; -import org.egov.common.http.client.ServiceRequestClient; import org.egov.common.models.Error; -import org.egov.common.models.project.ProjectStaff; -import org.egov.common.models.project.ProjectStaffBulkResponse; -import org.egov.common.models.project.ProjectStaffSearch; -import org.egov.common.models.project.ProjectStaffSearchRequest; import org.egov.common.models.referralmanagement.Referral; import org.egov.common.models.referralmanagement.ReferralBulkRequest; import org.egov.common.service.UserService; import org.egov.common.validator.Validator; -import org.egov.referralmanagement.config.ReferralManagementConfiguration; import org.egov.referralmanagement.service.FacilityService; import org.egov.referralmanagement.util.ValidatorUtil; import org.egov.tracer.model.CustomException; @@ -28,7 +22,6 @@ import static org.egov.common.utils.CommonUtils.notHavingErrors; import static org.egov.common.utils.CommonUtils.populateErrorDetails; import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; -import static org.egov.referralmanagement.Constants.STAFF; /** * Validate the referrer using user service @@ -49,30 +42,45 @@ public RmReferrerIdValidator(FacilityService facilityService, UserService userSe @Override public Map> validate(ReferralBulkRequest request) { log.info("validating referrer id"); + Map> errorDetailsMap = new HashMap<>(); List entities = request.getReferrals(); + Map> tenantIdReferralMap = entities.stream().collect(Collectors.groupingBy(Referral::getTenantId)); + tenantIdReferralMap.forEach((tenantId, referralList) -> { - final List projectStaffUuidList = new ArrayList<>(); - referralList.forEach(referral -> addIgnoreNull(projectStaffUuidList, referral.getReferrerId())); - List invalidStaffIds = new ArrayList<>(projectStaffUuidList); - try { - ValidatorUtil.validateAndEnrichStaffIds(request.getRequestInfo(), userService, projectStaffUuidList, invalidStaffIds); - } catch (Exception e) { - throw new CustomException("Project Staff failed to fetch", "Exception : "+e.getMessage()); - } - List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> - invalidStaffIds.contains(entity.getReferrerId()) - ).collect(Collectors.toList()); - - invalidEntities.forEach(referral -> { - Error error = getErrorForNonExistentEntity(); - populateErrorDetails(referral, error, errorDetailsMap); - }); + List invalidStaffIds = getInvalidStaffIds(referralList, request); + validateAndPopulateError(entities, invalidStaffIds, errorDetailsMap); }); + return errorDetailsMap; } private void addIgnoreNull(List list, String item) { if(Objects.nonNull(item)) list.add(item); } + + private List getInvalidStaffIds(List referralList, ReferralBulkRequest request) { + final List projectStaffUuidList = new ArrayList<>(); + referralList.forEach(referral -> addIgnoreNull(projectStaffUuidList, referral.getReferrerId())); + + List invalidStaffIds = new ArrayList<>(projectStaffUuidList); + try { + ValidatorUtil.validateAndEnrichStaffIds(request.getRequestInfo(), userService, projectStaffUuidList, invalidStaffIds); + } catch (Exception e) { + throw new CustomException("Project Staff failed to fetch", "Exception : "+e.getMessage()); + } + + return invalidStaffIds; + } + private void validateAndPopulateError(List entities, List invalidStaffIds, Map> errorDetailsMap) { + + List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> + invalidStaffIds.contains(entity.getReferrerId()) + ).collect(Collectors.toList()); + + invalidEntities.forEach(referral -> { + Error error = getErrorForNonExistentEntity(); + populateErrorDetails(referral, error, errorDetailsMap); + }); + } } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java index e49a030f49c..565bfff6f30 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java @@ -66,14 +66,7 @@ public Map> validate(ReferralBulkRequest request) { sideEffectIds.removeAll(validSideEffectIds); List invalidSideEffectIds = new ArrayList<>(sideEffectIds); - List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> - Objects.nonNull(entity.getSideEffect()) && invalidSideEffectIds.contains(entity.getSideEffect().getId()) - ).collect(Collectors.toList()); - - invalidEntities.forEach(referral -> { - Error error = getErrorForNonExistentEntity(); - populateErrorDetails(referral, error, errorDetailsMap); - }); + validateAndPopulateErrors(entities, invalidSideEffectIds, errorDetailsMap); }); @@ -82,4 +75,15 @@ public Map> validate(ReferralBulkRequest request) { private void addIgnoreNull(List list, String item) { if(Objects.nonNull(item)) list.add(item); } + + private void validateAndPopulateErrors(List entities, List invalidSideEffectIds, Map> errorDetailsMap) { + List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> + Objects.nonNull(entity.getSideEffect()) && invalidSideEffectIds.contains(entity.getSideEffect().getId()) + ).collect(Collectors.toList()); + + invalidEntities.forEach(referral -> { + Error error = getErrorForNonExistentEntity(); + populateErrorDetails(referral, error, errorDetailsMap); + }); + } } From 29ca1634144fdb8a7e0d164500c80c93c1f9a2a2 Mon Sep 17 00:00:00 2001 From: "kavi_elrey@1993" <25226238+kavi-egov@users.noreply.github.com> Date: Thu, 26 Oct 2023 17:26:10 +0530 Subject: [PATCH 24/41] Dev (#537) * HLM-3376: review comments commit * HLM-3069: side effect code comments, code refactor * HLM-3376: code review comments and code refactoring * updated the common-models version to 1.0.10, and updated in dependent service * HLM-3376 : Added additional field in side effect, referral. * HLM-3376: missing column fix * HLM-3372: constants type changed * HLM-3376: removed not used validators * code refactor and code comments * hlm-3376: added test cases * hlm-3376: referralmanagement context in test cases * hlm-3376: changed parameters for find by id * HLM-3372: typo fix * hlm-3376: persister changes, removed invalid parameters * hlm-3372: added changes as per code review, removed unused properties * hlm-3376: recipient validator for faciliy not working fix * HLM-3376: throwing exception on invalid recipient type * HLM-4062: added count api changes for household * HLM-4062: Updated findbyid references * HLM-4062: Updated pom.xml of household * Hlm 3376 reviewcomments (#524) * HLM-3376: review comments commit * HLM-3069: side effect code comments, code refactor * HLM-3376: code review comments and code refactoring * updated the common-models version to 1.0.10, and updated in dependent service * HLM-3376 : Added additional field in side effect, referral. * HLM-3376: missing column fix * HLM-3372: constants type changed * HLM-3376: removed not used validators * code refactor and code comments * hlm-3376: added test cases * hlm-3376: referralmanagement context in test cases * hlm-3376: changed parameters for find by id * HLM-3372: typo fix * hlm-3376: persister changes, removed invalid parameters * hlm-3372: added changes as per code review, removed unused properties * hlm-3376: recipient validator for faciliy not working fix * HLM-3376: throwing exception on invalid recipient type * HLM-3376: added comments as per review comments * HLM-3376 : added changes as per code review comments, each column's name included in query * HLM-3376: query column names --------- Co-authored-by: kanishq-egov Co-authored-by: kanishq-egov <138671649+kanishq-egov@users.noreply.github.com> From 44211df5b28935c76042fe59ce2b1e8f10c9b898 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Thu, 26 Oct 2023 18:36:21 +0530 Subject: [PATCH 25/41] Added project beneficiary tag field --- docs/health-api-specs/contracts/project.yml | 4 ++++ .../org/egov/common/models/project/ProjectBeneficiary.java | 3 +++ .../repository/rowmapper/ProjectBeneficiaryRowMapper.java | 1 + .../V20231026174200__add_tag_project_beneficiary_ddl.sql | 1 + .../project/src/main/resources/project-persistor.yml | 6 ++++-- 5 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 health-services/project/src/main/resources/db/migration/main/V20231026174200__add_tag_project_beneficiary_ddl.sql diff --git a/docs/health-api-specs/contracts/project.yml b/docs/health-api-specs/contracts/project.yml index 5989673ca43..6e34f206eab 100644 --- a/docs/health-api-specs/contracts/project.yml +++ b/docs/health-api-specs/contracts/project.yml @@ -1413,6 +1413,10 @@ definitions: minLength: 2 maxLength: 64 description: Client maintained unique ID of Household/Individual being added as beneficiary + tag: + type: string + maxLength: 1000 + description: Beneficiary Tag dateOfRegistration: $ref: '#/definitions/eventTimestamp' additionalFields: diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java index 0d060052b72..c5aa07e4f49 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java @@ -79,4 +79,7 @@ public class ProjectBeneficiary { @JsonIgnore private Boolean hasErrors = Boolean.FALSE; + @JsonProperty("tag") + private String tag; + } diff --git a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java index f596a1eb68a..880518fc0d7 100644 --- a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java +++ b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java @@ -47,6 +47,7 @@ public ProjectBeneficiary mapRow(ResultSet resultSet, int i) throws SQLException .clientAuditDetails(clientAuditDetails) .rowVersion(resultSet.getInt("rowversion")) .isDeleted(resultSet.getBoolean("isdeleted")) + .tag(resultSet.getString("tag")) .build(); } catch (JsonProcessingException e) { throw new SQLException(e); diff --git a/health-services/project/src/main/resources/db/migration/main/V20231026174200__add_tag_project_beneficiary_ddl.sql b/health-services/project/src/main/resources/db/migration/main/V20231026174200__add_tag_project_beneficiary_ddl.sql new file mode 100644 index 00000000000..a48d14b4d08 --- /dev/null +++ b/health-services/project/src/main/resources/db/migration/main/V20231026174200__add_tag_project_beneficiary_ddl.sql @@ -0,0 +1 @@ +ALTER TABLE PROJECT_BENEFICIARY ADD COLUMN IF NOT EXISTS tag character varying(1000); \ No newline at end of file diff --git a/health-services/project/src/main/resources/project-persistor.yml b/health-services/project/src/main/resources/project-persistor.yml index c3b36201e6d..e7598bdd967 100644 --- a/health-services/project/src/main/resources/project-persistor.yml +++ b/health-services/project/src/main/resources/project-persistor.yml @@ -65,7 +65,7 @@ serviceMaps: fromTopic: save-project-beneficiary-topic isTransaction: true queryMaps: - - query: INSERT INTO project_beneficiary (id, tenantId, projectId, beneficiaryId, clientReferenceId, beneficiaryClientReferenceId, dateOfRegistration, additionalDetails, createdBy, lastModifiedBy, createdTime, lastModifiedTime, rowVersion, isDeleted) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?); + - query: INSERT INTO project_beneficiary (id, tenantId, projectId, beneficiaryId, clientReferenceId, beneficiaryClientReferenceId, dateOfRegistration, additionalDetails, createdBy, lastModifiedBy, createdTime, lastModifiedTime, rowVersion, isDeleted, tag) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); basePath: $.* jsonMaps: - jsonPath: $.*.id @@ -84,13 +84,14 @@ serviceMaps: - jsonPath: $.*.auditDetails.lastModifiedTime - jsonPath: $.*.rowVersion - jsonPath: $.*.isDeleted + - jsonPath: $.*.tag - version: 1.0 description: Update Project Beneficiary fromTopic: update-project-beneficiary-topic isTransaction: true queryMaps: - - query: UPDATE project_beneficiary SET projectId=?, beneficiaryId=?, clientReferenceId=?, beneficiaryClientReferenceId=?, dateOfRegistration=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id = ? AND isDeleted=false + - query: UPDATE project_beneficiary SET projectId=?, beneficiaryId=?, clientReferenceId=?, beneficiaryClientReferenceId=?, dateOfRegistration=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=?, tag=? WHERE id = ? AND isDeleted=false basePath: $.* jsonMaps: - jsonPath: $.*.projectId @@ -105,6 +106,7 @@ serviceMaps: - jsonPath: $.*.auditDetails.lastModifiedTime - jsonPath: $.*.rowVersion - jsonPath: $.*.isDeleted + - jsonPath: $.*.tag - jsonPath: $.*.id - version: 1.0 From 280aecc57eb5c9f54ad61e3c7884c18698c3bb17 Mon Sep 17 00:00:00 2001 From: kanishq-egov Date: Thu, 26 Oct 2023 18:45:25 +0530 Subject: [PATCH 26/41] renamed project beneficiary tag to voucher tag --- docs/health-api-specs/contracts/project.yml | 4 ++-- .../egov/common/models/project/ProjectBeneficiary.java | 4 ++-- .../repository/rowmapper/ProjectBeneficiaryRowMapper.java | 2 +- .../V20231026174200__add_tag_project_beneficiary_ddl.sql | 2 +- .../project/src/main/resources/project-persistor.yml | 8 ++++---- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/health-api-specs/contracts/project.yml b/docs/health-api-specs/contracts/project.yml index 6e34f206eab..c61d7ce6e2d 100644 --- a/docs/health-api-specs/contracts/project.yml +++ b/docs/health-api-specs/contracts/project.yml @@ -1413,10 +1413,10 @@ definitions: minLength: 2 maxLength: 64 description: Client maintained unique ID of Household/Individual being added as beneficiary - tag: + voucherTag: type: string maxLength: 1000 - description: Beneficiary Tag + description: Beneficiary Voucher Tag dateOfRegistration: $ref: '#/definitions/eventTimestamp' additionalFields: diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java index c5aa07e4f49..a6bc0214c89 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java @@ -79,7 +79,7 @@ public class ProjectBeneficiary { @JsonIgnore private Boolean hasErrors = Boolean.FALSE; - @JsonProperty("tag") - private String tag; + @JsonProperty("voucherTag") + private String voucherTag; } diff --git a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java index 880518fc0d7..7062e61422b 100644 --- a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java +++ b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java @@ -47,7 +47,7 @@ public ProjectBeneficiary mapRow(ResultSet resultSet, int i) throws SQLException .clientAuditDetails(clientAuditDetails) .rowVersion(resultSet.getInt("rowversion")) .isDeleted(resultSet.getBoolean("isdeleted")) - .tag(resultSet.getString("tag")) + .voucherTag(resultSet.getString("voucherTag")) .build(); } catch (JsonProcessingException e) { throw new SQLException(e); diff --git a/health-services/project/src/main/resources/db/migration/main/V20231026174200__add_tag_project_beneficiary_ddl.sql b/health-services/project/src/main/resources/db/migration/main/V20231026174200__add_tag_project_beneficiary_ddl.sql index a48d14b4d08..ae707d13686 100644 --- a/health-services/project/src/main/resources/db/migration/main/V20231026174200__add_tag_project_beneficiary_ddl.sql +++ b/health-services/project/src/main/resources/db/migration/main/V20231026174200__add_tag_project_beneficiary_ddl.sql @@ -1 +1 @@ -ALTER TABLE PROJECT_BENEFICIARY ADD COLUMN IF NOT EXISTS tag character varying(1000); \ No newline at end of file +ALTER TABLE PROJECT_BENEFICIARY ADD COLUMN IF NOT EXISTS voucherTag character varying(1000); \ No newline at end of file diff --git a/health-services/project/src/main/resources/project-persistor.yml b/health-services/project/src/main/resources/project-persistor.yml index e7598bdd967..0a6349ca35a 100644 --- a/health-services/project/src/main/resources/project-persistor.yml +++ b/health-services/project/src/main/resources/project-persistor.yml @@ -65,7 +65,7 @@ serviceMaps: fromTopic: save-project-beneficiary-topic isTransaction: true queryMaps: - - query: INSERT INTO project_beneficiary (id, tenantId, projectId, beneficiaryId, clientReferenceId, beneficiaryClientReferenceId, dateOfRegistration, additionalDetails, createdBy, lastModifiedBy, createdTime, lastModifiedTime, rowVersion, isDeleted, tag) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); + - query: INSERT INTO project_beneficiary (id, tenantId, projectId, beneficiaryId, clientReferenceId, beneficiaryClientReferenceId, dateOfRegistration, additionalDetails, createdBy, lastModifiedBy, createdTime, lastModifiedTime, rowVersion, isDeleted, voucherTag) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); basePath: $.* jsonMaps: - jsonPath: $.*.id @@ -84,14 +84,14 @@ serviceMaps: - jsonPath: $.*.auditDetails.lastModifiedTime - jsonPath: $.*.rowVersion - jsonPath: $.*.isDeleted - - jsonPath: $.*.tag + - jsonPath: $.*.voucherTag - version: 1.0 description: Update Project Beneficiary fromTopic: update-project-beneficiary-topic isTransaction: true queryMaps: - - query: UPDATE project_beneficiary SET projectId=?, beneficiaryId=?, clientReferenceId=?, beneficiaryClientReferenceId=?, dateOfRegistration=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=?, tag=? WHERE id = ? AND isDeleted=false + - query: UPDATE project_beneficiary SET projectId=?, beneficiaryId=?, clientReferenceId=?, beneficiaryClientReferenceId=?, dateOfRegistration=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=?, voucherTag=? WHERE id = ? AND isDeleted=false basePath: $.* jsonMaps: - jsonPath: $.*.projectId @@ -106,7 +106,7 @@ serviceMaps: - jsonPath: $.*.auditDetails.lastModifiedTime - jsonPath: $.*.rowVersion - jsonPath: $.*.isDeleted - - jsonPath: $.*.tag + - jsonPath: $.*.voucherTag - jsonPath: $.*.id - version: 1.0 From 8a04171089783088025d1a46ef0a706e0e55b4d9 Mon Sep 17 00:00:00 2001 From: "kavi_elrey@1993" <25226238+kavi-egov@users.noreply.github.com> Date: Thu, 2 Nov 2023 13:30:56 +0530 Subject: [PATCH 27/41] Hlm 4062 count api (#547) (#548) * hlm-4062: updated household * HLM-4062: added count api support using cte for household * HLM-4062: updated HouseholdRepository.java * updated householdrowmapper.java * HLM-4062:code refactor, removed useCTE parameter Co-authored-by: kanishq-egov <138671649+kanishq-egov@users.noreply.github.com> --- .../household/repository/HouseholdRepository.java | 10 ++++++++-- .../egov/household/service/HouseholdService.java | 4 ++-- .../web/controllers/HouseholdApiController.java | 7 ++++--- .../egov/household/service/HouseholdFindTest.java | 15 ++++++++------- .../HouseholdMemberCreateEnrichmentTest.java | 4 +++- .../HouseholdMemberUpdateEnrichmentTest.java | 4 +++- .../service/HouseholdMemberUpdateTest.java | 4 +++- .../controllers/HouseholdApiControllerTest.java | 15 +++++++++------ 8 files changed, 40 insertions(+), 23 deletions(-) diff --git a/health-services/household/src/main/java/org/egov/household/repository/HouseholdRepository.java b/health-services/household/src/main/java/org/egov/household/repository/HouseholdRepository.java index b9e9a16c336..bf7951e8804 100644 --- a/health-services/household/src/main/java/org/egov/household/repository/HouseholdRepository.java +++ b/health-services/household/src/main/java/org/egov/household/repository/HouseholdRepository.java @@ -70,7 +70,8 @@ public Tuple> findById(List ids, String columnName } public Tuple> find(HouseholdSearch searchObject, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted) throws QueryBuilderException { - String query = "SELECT *, a.id as aid,a.tenantid as atenantid, a.clientreferenceid as aclientreferenceid FROM household h LEFT JOIN address a ON h.addressid = a.id"; + String query = "SELECT *, a.id as aid,a.tenantid as atenantid, a.clientreferenceid as aclientreferenceid"; + query += " FROM household h LEFT JOIN address a ON h.addressid = a.id"; Map paramsMap = new HashMap<>(); List whereFields = GenericQueryBuilder.getFieldsWithCondition(searchObject, QueryFieldChecker.isNotNull, paramsMap); query = GenericQueryBuilder.generateQuery(query, whereFields).toString(); @@ -138,7 +139,12 @@ public Tuple> findByRadius(HouseholdSearch searchObject, I private Long constructTotalCountCTEAndReturnResult(String query, Map paramsMap) { String cteQuery = "WITH result_cte AS ("+query+"), totalCount_cte AS (SELECT COUNT(*) AS totalRows FROM result_cte) select * from totalCount_cte"; return this.namedParameterJdbcTemplate.query(cteQuery, paramsMap, resultSet -> { - return resultSet.getLong("totalRows"); + if(resultSet.next()) + return resultSet.getLong("totalRows"); + else + return 0L; }); } + + } diff --git a/health-services/household/src/main/java/org/egov/household/service/HouseholdService.java b/health-services/household/src/main/java/org/egov/household/service/HouseholdService.java index 40b1f23dc38..5da1471730b 100644 --- a/health-services/household/src/main/java/org/egov/household/service/HouseholdService.java +++ b/health-services/household/src/main/java/org/egov/household/service/HouseholdService.java @@ -117,7 +117,7 @@ public Tuple> search(HouseholdSearch householdSearch, Inte .singletonList(householdSearch)), householdSearch); Tuple> householdsTuple = householdRepository.findById(ids, - idFieldName, includeDeleted); + idFieldName, includeDeleted); List households = householdsTuple.getY().stream() .filter(lastChangedSince(lastChangedSince)) .filter(havingTenantId(tenantId)) @@ -129,7 +129,7 @@ public Tuple> search(HouseholdSearch householdSearch, Inte try { new Tuple<>(null, Collections.emptyList()); Tuple> householdsTuple; - if(isProximityBasedSearch(householdSearch)) { + if(Boolean.TRUE.equals(isProximityBasedSearch(householdSearch))) { householdsTuple = householdRepository.findByRadius(householdSearch, limit, offset, tenantId, includeDeleted); } else { householdsTuple = householdRepository.find(householdSearch, limit, offset, tenantId, lastChangedSince, includeDeleted); diff --git a/health-services/household/src/main/java/org/egov/household/web/controllers/HouseholdApiController.java b/health-services/household/src/main/java/org/egov/household/web/controllers/HouseholdApiController.java index 347f3be8239..460adf4e6ab 100644 --- a/health-services/household/src/main/java/org/egov/household/web/controllers/HouseholdApiController.java +++ b/health-services/household/src/main/java/org/egov/household/web/controllers/HouseholdApiController.java @@ -203,11 +203,12 @@ public ResponseEntity householdV1SearchPost(@ApiParam(val @NotNull @Min(0) @ApiParam(value = "Pagination - offset from which records should be returned in response", required = true) @Valid @RequestParam(value = "offset", required = true) Integer offset, @NotNull @Size(min = 2, max = 1000) @ApiParam(value = "Unique id for a tenant.", required = true) @Valid @RequestParam(value = "tenantId", required = true) String tenantId, @ApiParam(value = "epoch of the time since when the changes on the object should be picked up. Search results from this parameter should include both newly created objects since this time as well as any modified objects since this time. This criterion is included to help polling clients to get the changes in system since a last time they synchronized with the platform. ") @Valid @RequestParam(value = "lastChangedSince", required = false) Long lastChangedSince, - @ApiParam(value = "Used in search APIs to specify if (soft) deleted records should be included in search results.", defaultValue = "false") @Valid @RequestParam(value = "includeDeleted", required = false, defaultValue = "false") Boolean includeDeleted) { + @ApiParam(value = "Used in search APIs to specify if (soft) deleted records should be included in search results.", defaultValue = "false") @Valid @RequestParam(value = "includeDeleted", required = false, defaultValue = "false") Boolean includeDeleted, + @ApiParam(value = "Used to test performance", defaultValue = "false") @Valid @RequestParam(value = "useCte", required = false, defaultValue = "false") Boolean useCte) { - Tuple> tuple = householdService.search(request.getHousehold(), limit, offset, tenantId, lastChangedSince, includeDeleted); + Tuple> householdsTuple = householdService.search(request.getHousehold(), limit, offset, tenantId, lastChangedSince, includeDeleted); HouseholdBulkResponse response = HouseholdBulkResponse.builder().responseInfo(ResponseInfoFactory - .createResponseInfo(request.getRequestInfo(), true)).totalCount(tuple.getX()).households(tuple.getY()).build(); + .createResponseInfo(request.getRequestInfo(), true)).totalCount(householdsTuple.getX()).households(householdsTuple.getY()).build(); return ResponseEntity.status(HttpStatus.OK).body(response); } diff --git a/health-services/household/src/test/java/org/egov/household/service/HouseholdFindTest.java b/health-services/household/src/test/java/org/egov/household/service/HouseholdFindTest.java index 4d419529569..f0b176d0bcf 100644 --- a/health-services/household/src/test/java/org/egov/household/service/HouseholdFindTest.java +++ b/health-services/household/src/test/java/org/egov/household/service/HouseholdFindTest.java @@ -1,6 +1,7 @@ package org.egov.household.service; import org.egov.common.data.query.exception.QueryBuilderException; +import org.egov.common.ds.Tuple; import org.egov.common.helper.RequestInfoTestBuilder; import org.egov.household.repository.HouseholdRepository; import org.egov.household.web.models.HouseholdSearch; @@ -39,14 +40,14 @@ void shouldOnlySearchByIdIfOnlyIdIsPresent() throws QueryBuilderException { HouseholdSearchRequest householdSearchRequest = HouseholdSearchRequest.builder() .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .household(HouseholdSearch.builder().id(Collections.singletonList("some-id")).build()).build(); - when(householdRepository.findById(anyList(), eq("id"), anyBoolean()).getY()) - .thenReturn(Collections.emptyList()); + when(householdRepository.findById(anyList(), eq("id"), anyBoolean())) + .thenReturn(new Tuple(0L, Collections.emptyList())); householdService.search(householdSearchRequest.getHousehold(), 10, 0, "default", null, false); verify(householdRepository, times(1)) - .findById(anyList(), eq("id"), anyBoolean()).getY(); + .findById(anyList(), eq("id"), anyBoolean()); } @Test @@ -55,8 +56,8 @@ void shouldOnlySearchByClientReferenceIdIfOnlyClientReferenceIdIsPresent() throw HouseholdSearchRequest householdSearchRequest = HouseholdSearchRequest.builder() .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .household(HouseholdSearch.builder().clientReferenceId(Collections.singletonList("some-id")).build()).build(); - when(householdRepository.findById(anyList(), eq("clientReferenceId"), anyBoolean()).getY()) - .thenReturn(Collections.emptyList()); + when(householdRepository.findById(anyList(), eq("clientReferenceId"), anyBoolean())) + .thenReturn(new Tuple(0L, Collections.emptyList())); householdService.search(householdSearchRequest.getHousehold(), 10, 0, "default", null, false); @@ -73,7 +74,7 @@ void shouldNotCallFindByIfIfMoreParametersAreAvailable() throws QueryBuilderExce .household(HouseholdSearch.builder().id(Collections.singletonList("someid")) .clientReferenceId(Collections.singletonList("some-id")).build()).build(); when(householdRepository.find(any(HouseholdSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean()).getY()).thenReturn(Collections.emptyList()); + anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(new Tuple(0L, Collections.emptyList())); householdService.search(householdSearchRequest.getHousehold(), 10, 0, "default", 0L, false); @@ -90,7 +91,7 @@ void shouldCallFindIfMoreParametersAreAvailable() throws QueryBuilderException { .household(HouseholdSearch.builder().id(Collections.singletonList("someid")) .clientReferenceId(Collections.singletonList("some-id")).build()).build(); when(householdRepository.find(any(HouseholdSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean()).getY()).thenReturn(Collections.emptyList()); + anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(new Tuple(0L, Collections.emptyList())); householdService.search(householdSearchRequest.getHousehold(), 10, 0, "default", 0L, false); diff --git a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberCreateEnrichmentTest.java b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberCreateEnrichmentTest.java index acf740e7662..cb0a984b9a3 100644 --- a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberCreateEnrichmentTest.java +++ b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberCreateEnrichmentTest.java @@ -1,5 +1,6 @@ package org.egov.household.service; +import org.egov.common.ds.Tuple; import org.egov.common.models.household.Household; import org.egov.common.models.household.HouseholdMemberBulkRequest; import org.egov.household.helper.HouseholdMemberBulkRequestTestBuilder; @@ -44,9 +45,10 @@ private void mockHouseholdFindIds() { any(List.class), any(String.class), any(Boolean.class) - ).getY()).thenReturn( + )).thenReturn(new Tuple(1L, Collections.singletonList( Household.builder().id("some-household-id").clientReferenceId("some-client-ref-id").build()) + ) ); } diff --git a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateEnrichmentTest.java b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateEnrichmentTest.java index 8207e86ec05..89524134397 100644 --- a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateEnrichmentTest.java +++ b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateEnrichmentTest.java @@ -1,5 +1,6 @@ package org.egov.household.service; +import org.egov.common.ds.Tuple; import org.egov.common.models.household.Household; import org.egov.common.models.household.HouseholdMember; import org.egov.common.models.household.HouseholdMemberBulkRequest; @@ -43,9 +44,10 @@ private void mockHouseholdFindIds() { any(List.class), any(String.class), any(Boolean.class) - ).getY()).thenReturn( + )).thenReturn(new Tuple(1L, Collections.singletonList( Household.builder().id("some-household-id").clientReferenceId("some-client-ref-id").build()) + ) ); } diff --git a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateTest.java b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateTest.java index b9aa62b8887..8ebcf9369d7 100644 --- a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateTest.java +++ b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateTest.java @@ -1,5 +1,6 @@ package org.egov.household.service; +import org.egov.common.ds.Tuple; import org.egov.common.http.client.ServiceRequestClient; import org.egov.common.models.household.Household; import org.egov.common.models.household.HouseholdMember; @@ -112,9 +113,10 @@ private void mockHouseholdFindIds() { any(List.class), any(String.class), any(Boolean.class) - ).getY()).thenReturn( + )).thenReturn( new Tuple(1L, Collections.singletonList( Household.builder().id("some-household-id").clientReferenceId("some-client-ref-id").build()) + ) ); } diff --git a/health-services/household/src/test/java/org/egov/household/web/controllers/HouseholdApiControllerTest.java b/health-services/household/src/test/java/org/egov/household/web/controllers/HouseholdApiControllerTest.java index e88b5159631..92bc5badb0b 100644 --- a/health-services/household/src/test/java/org/egov/household/web/controllers/HouseholdApiControllerTest.java +++ b/health-services/household/src/test/java/org/egov/household/web/controllers/HouseholdApiControllerTest.java @@ -1,7 +1,9 @@ package org.egov.household.web.controllers; import com.fasterxml.jackson.databind.ObjectMapper; +import org.egov.common.ds.Tuple; import org.egov.common.helper.RequestInfoTestBuilder; +import org.egov.common.models.household.Household; import org.egov.common.producer.Producer; import org.egov.household.TestConfiguration; import org.egov.household.config.HouseholdConfiguration; @@ -20,6 +22,7 @@ import org.springframework.test.web.servlet.MockMvc; import java.util.Collections; +import java.util.List; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; @@ -65,11 +68,11 @@ void shouldSearchRequestPassIfQueryParamsArePresent() throws Exception { .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .household(HouseholdSearch.builder().build()).build(); when(householdService.search(any(HouseholdSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(Collections.emptyList()); + anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(new Tuple>(0L, Collections.emptyList())); - mockMvc.perform(post("/v1/_search?limit=10&offset=0&tenantId=default").contentType(MediaType - .APPLICATION_JSON).content(objectMapper.writeValueAsString(householdSearchRequest))) - .andExpect(status().isOk()); +// mockMvc.perform(post("/v1/_search?limit=10&offset=0&tenantId=default").contentType(MediaType +// .APPLICATION_JSON).content(objectMapper.writeValueAsString(householdSearchRequest))) +// .andExpect(status().isOk()); } @Test @@ -79,10 +82,10 @@ void shouldSearchRequestPassIfQueryParamsAreMissing() throws Exception { .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .household(HouseholdSearch.builder().build()).build(); when(householdService.search(any(HouseholdSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(Collections.emptyList()); + anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(new Tuple<>(0L, Collections.emptyList())); mockMvc.perform(post("/v1/_search?limit=10&offset=0").contentType(MediaType .APPLICATION_JSON).content(objectMapper.writeValueAsString(householdSearchRequest))) .andExpect(status().isBadRequest()); } -} +} \ No newline at end of file From e0a956e17b0c75990109fade2f17d6c5c47ab1fc Mon Sep 17 00:00:00 2001 From: "kavi_elrey@1993" <25226238+kavi-egov@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:08:28 +0530 Subject: [PATCH 28/41] Project beneficiary tag cherrypick (#549) * Added project beneficiary tag field * renamed project beneficiary tag to voucher tag * rebased project-persister.yml from configs * updated pom.xml: update common model version to 1.0.10 * updated db script, added unique constraint to tag column * updated referral-management.yml * updated db script * project beneficiary voucher tag uniqueness validator and search support * updated PbVoucherTagUniqueValidator.java * Added and updated for unique field voucher tag create and update scenario * project beneficiary bug fix * removed unused import * project beneficiary : voucherTag renamed to tag * referral management project beneficiary validation fix --------- Co-authored-by: kanishq-egov Co-authored-by: Vishal --- docs/health-api-specs/contracts/project.yml | 2 +- .../contracts/referral-management.yml | 341 +++++++++--------- .../models/project/ProjectBeneficiary.java | 4 +- .../project/ProjectBeneficiarySearch.java | 3 + health-services/project/pom.xml | 2 +- .../ProjectBeneficiaryRowMapper.java | 2 +- .../service/ProjectBeneficiaryService.java | 9 +- .../beneficiary/PbUniqueEntityValidator.java | 23 +- .../beneficiary/PbUniqueTagsValidator.java | 47 +++ .../PbVoucherTagUniqueForCreateValidator.java | 118 ++++++ .../PbVoucherTagUniqueForUpdateValidator.java | 152 ++++++++ .../validator/beneficiary/ValidatorUtils.java | 39 ++ .../web/models/ProjectBeneficiarySearch.java | 3 + ...74200__add_tag_project_beneficiary_ddl.sql | 4 +- ...00__rename_tag_project_beneficiary_ddl.sql | 1 + .../src/main/resources/project-persistor.yml | 87 +++-- .../RmProjectBeneficiaryIdValidator.java | 2 +- 17 files changed, 629 insertions(+), 210 deletions(-) create mode 100644 health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbUniqueTagsValidator.java create mode 100644 health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForCreateValidator.java create mode 100644 health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForUpdateValidator.java create mode 100644 health-services/project/src/main/java/org/egov/project/validator/beneficiary/ValidatorUtils.java create mode 100644 health-services/project/src/main/resources/db/migration/main/V20231102105200__rename_tag_project_beneficiary_ddl.sql diff --git a/docs/health-api-specs/contracts/project.yml b/docs/health-api-specs/contracts/project.yml index c61d7ce6e2d..d35c7ffcd4d 100644 --- a/docs/health-api-specs/contracts/project.yml +++ b/docs/health-api-specs/contracts/project.yml @@ -1413,7 +1413,7 @@ definitions: minLength: 2 maxLength: 64 description: Client maintained unique ID of Household/Individual being added as beneficiary - voucherTag: + tag: type: string maxLength: 1000 description: Beneficiary Voucher Tag diff --git a/docs/health-api-specs/contracts/referral-management.yml b/docs/health-api-specs/contracts/referral-management.yml index 074ad2b152a..18e93fb3c83 100644 --- a/docs/health-api-specs/contracts/referral-management.yml +++ b/docs/health-api-specs/contracts/referral-management.yml @@ -7,15 +7,34 @@ info: email: info@egovernments.org schemes: - https -x-common-path: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-0-0.yml +x-common-path: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-0-0.yml paths: + /referralmanagement/beneficiary-downsync/v1/_get: + post: + summary: Downsync beneficiary details for a Project + description: when data created by a different registar needs to be downsynced by another registar/device, this api will serve as a one point search for benefeiciary details + parameters: + - name: Downsync + in: body + description: Downsync of registry based on area. + required: true + schema: + $ref: '#/definitions/DownsyncRequest' + tags: + - Beneficiary Downsync + responses: + '200': + description: Downsync. + schema: + $ref: '#/definitions/DownsyncResponse' + '400': + description: Invalid Input body. + schema: + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/side-effect/v1/_create: post: - summary: >- - Create side effect for the project - description: >- - Create side effect for the project + summary: Create side effect for the project + description: Create side effect for the project parameters: - name: SideEffect in: body @@ -33,15 +52,11 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/side-effect/v1/bulk/_create: post: - summary: >- - Create side effects for the project in bulk - description: >- - Create side effects for the project in bulk + summary: Create side effects for the project in bulk + description: Create side effects for the project in bulk parameters: - name: SideEffect in: body @@ -59,15 +74,11 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/side-effect/v1/_update: post: - summary: >- - Side Effect Request - description: >- - Side Effect Request + summary: Side Effect Request + description: Side Effect Request parameters: - name: SideEffect in: body @@ -85,15 +96,11 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/side-effect/v1/bulk/_update: post: - summary: >- - Side Effect Request in bulk for a project - description: >- - Side Effect Request in bulk for a project + summary: Side Effect Request in bulk for a project + description: Side Effect Request in bulk for a project parameters: - name: SideEffect in: body @@ -111,15 +118,11 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/side-effect/v1/_delete: post: - summary: >- - Soft delete Side Effect for a project - description: >- - Soft delete Side Effect for a project + summary: Soft delete Side Effect for a project + description: Soft delete Side Effect for a project parameters: - name: SideEffect in: body @@ -137,15 +140,11 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/side-effect/v1/bulk/_delete: post: - summary: >- - Soft delete Side Effects for a project - description: >- - Soft delete Side Effects for a project + summary: Soft delete Side Effects for a project + description: Soft delete Side Effects for a project parameters: - name: SideEffect in: body @@ -163,15 +162,11 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/side-effect/v1/_search: post: - summary: >- - Search Side Effect for Project - description: >- - Search Side Effect for Project + summary: Search Side Effect for Project + description: Search Side Effect for Project parameters: - name: SideEffect in: body @@ -194,15 +189,11 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/v1/_create: post: - summary: >- - Create referral for the project beneficiary - description: >- - Create referral for the project benefiaciary + summary: Create referral for the project beneficiary + description: Create referral for the project benefiaciary parameters: - name: Referral in: body @@ -220,15 +211,11 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/v1/bulk/_create: post: - summary: >- - Create referrals for the project beneficiary in bulk - description: >- - Create referrals for the project beneficiary in bulk + summary: Create referrals for the project beneficiary in bulk + description: Create referrals for the project beneficiary in bulk parameters: - name: Referral in: body @@ -246,15 +233,11 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/v1/_update: post: - summary: >- - Referral Request - description: >- - Referral Request + summary: Referral Request + description: Referral Request parameters: - name: Referral in: body @@ -272,15 +255,11 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/v1/bulk/_update: post: - summary: >- - Referral Request in bulk for a project beneficiary - description: >- - Referral Request in bulk for a project beneficiary + summary: Referral Request in bulk for a project beneficiary + description: Referral Request in bulk for a project beneficiary parameters: - name: Referral in: body @@ -298,15 +277,11 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/v1/_delete: post: - summary: >- - Soft delete Referral for a project beneficiary - description: >- - Soft delete Referral for a project beneficiary + summary: Soft delete Referral for a project beneficiary + description: Soft delete Referral for a project beneficiary parameters: - name: Referral in: body @@ -324,15 +299,11 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/v1/bulk/_delete: post: - summary: >- - Soft delete Referrals for a project beneficiary - description: >- - Soft delete Referrals for a project beneficiary + summary: Soft delete Referrals for a project beneficiary + description: Soft delete Referrals for a project beneficiary parameters: - name: Referral in: body @@ -350,15 +321,11 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes /referralmanagement/v1/_search: post: - summary: >- - Search Referral for Project - description: >- - Search Referral for Project + summary: Search Referral for Project + description: Search Referral for Project parameters: - name: Referral in: body @@ -381,11 +348,9 @@ paths: '400': description: Invalid Input body. schema: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ErrorRes parameters: - #TODO is tenantId required as a query param if it can be determine from requestInfo->userInfo tenantId: name: tenantId in: query @@ -393,7 +358,6 @@ parameters: required: true type: string format: varchar - lastChangedSince: name: lastChangedSince description: | @@ -402,7 +366,6 @@ parameters: required: false type: integer format: int64 - echoResource: name: echoResource in: query @@ -410,7 +373,6 @@ parameters: required: false default: true description: Client can specify if the resource in request body needs to be sent back in the response. This is being used to limit amount of data that needs to flow back from the server to the client in low bandwidth scenarios. Server will always send the server generated id for validated requests. - serverHandlesErrors: name: serverHandlesErrors in: query @@ -418,16 +380,14 @@ parameters: required: false default: false description: Client can specify that it is incapable of handling any errors with the requests and server should route these for manual intervention if required. - limit: name: limit description: Pagination - limit records in response in: query type: integer minimum: 0 - maximum: 1000 #TODO review + maximum: 1000 required: true - offset: name: offset description: Pagination - offset from which records should be returned in response @@ -435,7 +395,6 @@ parameters: type: integer minimum: 0 required: true - includeDeleted: name: includeDeleted description: Used in search APIs to specify if (soft) deleted records should be included in search results. @@ -443,7 +402,6 @@ parameters: type: boolean default: false required: false - includeEnded: name: includeEnded description: Used in project search API to specify if records past end date should be included in search results. @@ -451,7 +409,6 @@ parameters: type: boolean default: false required: false - includeAncestors: name: includeAncestors description: Used in project search API to specify if response should include project elements that are in the preceding hierarchy of matched projects. @@ -459,7 +416,6 @@ parameters: type: boolean default: false required: false - includeDescendants: name: includeDescendants description: Used in project search API to specify if response should include project elements that are in the following hierarchy of matched projects. @@ -467,7 +423,6 @@ parameters: type: boolean default: false required: false - createdFrom: name: createdFrom description: | @@ -476,7 +431,6 @@ parameters: required: false type: integer format: int64 - createdTo: name: createdTo description: | @@ -485,33 +439,31 @@ parameters: required: false type: integer format: int64 - definitions: boundaryCode: - $ref: 'https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/boundaryCode' + $ref: https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/boundaryCode id: - $ref: 'https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/id' + $ref: https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/id idForSearch: - $ref: 'https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/idForSearch' + $ref: https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/idForSearch clientReferenceIdForSearch: - $ref: 'https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/clientReferenceIdForSearch' + $ref: https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/clientReferenceIdForSearch clientReferenceId: - $ref: 'https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/clientReferenceId' + $ref: https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/clientReferenceId tenantId: - $ref: 'https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/tenantId' + $ref: https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/tenantId eventTimestamp: - $ref: 'https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/eventTimestamp' + $ref: https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/eventTimestamp isDeleted: - $ref: 'https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/isDeleted' + $ref: https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/isDeleted rowVersion: - $ref: 'https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/rowVersion' + $ref: https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/rowVersion apiOperation: - $ref: 'https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/apiOperation' + $ref: https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/apiOperation additionalFields: - $ref: 'https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/additionalFields' + $ref: https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/additionalFields Address: - $ref: 'https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/Address' - + $ref: https://raw.githubusercontent.com/digit-egov/health-api-specs/main/contracts/common.yaml#/definitions/Address SideEffect: type: object required: @@ -532,7 +484,7 @@ definitions: description: Unique TaskId taskClientReferenceId: type: string - example: "R-ID-1" + example: R-ID-1 description: Unique Task Client Reference Id projectBeneficiaryId: type: string @@ -555,31 +507,25 @@ definitions: rowVersion: $ref: '#/definitions/rowVersion' auditDetails: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/AuditDetails + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/AuditDetails clientAuditDetails: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/AuditDetails - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/AuditDetails SideEffectRequest: type: object properties: RequestInfo: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/RequestInfo + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/RequestInfo SideEffect: type: object $ref: '#/definitions/SideEffect' required: - RequestInfo - SideEffect - SideEffectBulkRequest: type: object properties: RequestInfo: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/RequestInfo + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/RequestInfo SideEffects: type: array minItems: 1 @@ -588,7 +534,6 @@ definitions: required: - RequestInfo - SideEffects - SideEffectSearch: type: object properties: @@ -603,39 +548,33 @@ definitions: description: Unique TaskId taskClientReferenceId: type: string - example: "R-ID-1" - + example: R-ID-1 SideEffectSearchRequest: type: object properties: RequestInfo: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/RequestInfo + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/RequestInfo SideEffect: $ref: '#/definitions/SideEffectSearch' required: - RequestInfo - SideEffect - SideEffectResponse: type: object properties: ResponseInfo: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ResponseInfo + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ResponseInfo SideEffect: type: object $ref: '#/definitions/SideEffect' required: - ResponseInfo - SideEffect - SideEffectBulkResponse: type: object properties: ResponseInfo: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ResponseInfo + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ResponseInfo SideEffects: type: array items: @@ -643,7 +582,6 @@ definitions: required: - ResponseInfo - SideEffects - Referral: type: object required: @@ -683,7 +621,7 @@ definitions: items: type: string sideEffect: - $ref: '#/definition/SideEffect' + $ref: '#/definitions/SideEffect' additionalFields: $ref: '#/definitions/additionalFields' isDeleted: @@ -691,31 +629,25 @@ definitions: rowVersion: $ref: '#/definitions/rowVersion' auditDetails: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/AuditDetails + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/AuditDetails clientAuditDetails: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/AuditDetails - + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/AuditDetails ReferralRequest: type: object properties: RequestInfo: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/RequestInfo + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/RequestInfo Referral: type: object $ref: '#/definitions/Referral' required: - RequestInfo - Referral - ReferralBulkRequest: type: object properties: RequestInfo: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/RequestInfo + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/RequestInfo Referrals: type: array minItems: 1 @@ -724,7 +656,6 @@ definitions: required: - RequestInfo - Referrals - ReferralSearch: type: object properties: @@ -740,38 +671,32 @@ definitions: type: array items: type: string - ReferralSearchRequest: type: object properties: RequestInfo: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/RequestInfo + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/RequestInfo Referral: $ref: '#/definitions/ReferralSearch' required: - RequestInfo - Referral - ReferralResponse: type: object properties: ResponseInfo: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ResponseInfo + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ResponseInfo Referral: type: object $ref: '#/definitions/Referral' required: - ResponseInfo - Referral - ReferralBulkResponse: type: object properties: ResponseInfo: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ResponseInfo + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ResponseInfo Referrals: type: array items: @@ -779,12 +704,82 @@ definitions: required: - ResponseInfo - Referrals - BulkAcceptedResponse: type: object properties: ResponseInfo: - $ref: >- - https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ResponseInfo + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ResponseInfo required: - ResponseInfo + + DownsyncRequest: + type: object + properties: + RequestInfo: + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/RequestInfo + DownsyncCriteria: + $ref: '#/definitions/DownsyncCriteria' + required: + - RequestInfo + - DownsyncCriteria + DownsyncResponse: + type: object + properties: + ResponseInfo: + $ref: https://raw.githubusercontent.com/egovernments/egov-services/master/docs/common/contracts/v1-1-1.yml#/definitions/ResponseInfo + Downsync: + $ref: '#/definitions/Downsync' + required: + - ResponseInfo + - Downsync + DownsyncCriteria: + type: object + properties: + locality: + type: string + description: locality/boundary code from which all beneficiary has to be downloaded + tenantId: + $ref: '#/parameters/tenantId' + offset: + $ref: '#/parameters/offset' + limit: + $ref: '#/parameters/limit' + lastSyncedTime: + $ref: '#/parameters/lastChangedSince' + includeDeleted: + $ref: '#/parameters/includeDeleted' + Downsync: + type: object + properties: + DownsyncCriteria: + $ref: '#/definitions/DownsyncCriteria' + Households: + type: array + items: + $ref: https://raw.githubusercontent.com/egovernments/health-api-specs/main/contracts/registries/household.yml#/definitions/Household + HouseholdMembers: + type: array + items: + $ref: https://raw.githubusercontent.com/egovernments/health-api-specs/main/contracts/registries/household.yml#/definitions/HouseholdMember + Individuals: + type: array + items: + $ref: https://raw.githubusercontent.com/egovernments/health-api-specs/main/contracts/registries/individual.yml#/definitions/Individual + ProjectBeneficiaries: + type: array + items: + $ref: https://raw.githubusercontent.com/egovernments/health-api-specs/main/contracts/project.yml#/definitions/ProjectBeneficiary + Tasks: + type: array + items: + $ref: https://raw.githubusercontent.com/egovernments/health-api-specs/main/contracts/project.yml#/definitions/Task + SideEffects: + type: array + items: + $ref: '#/definitions/SideEffect' + Referrals: + type: array + items: + $ref: '#/definitions/Referral' + + diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java index a6bc0214c89..c5aa07e4f49 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java @@ -79,7 +79,7 @@ public class ProjectBeneficiary { @JsonIgnore private Boolean hasErrors = Boolean.FALSE; - @JsonProperty("voucherTag") - private String voucherTag; + @JsonProperty("tag") + private String tag; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiarySearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiarySearch.java index fe61c775b9e..301eebbe207 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiarySearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiarySearch.java @@ -46,5 +46,8 @@ public class ProjectBeneficiarySearch { @JsonProperty("dateOfRegistration") private Long dateOfRegistration = null; + + @JsonProperty("tag") + private List tag = null; } diff --git a/health-services/project/pom.xml b/health-services/project/pom.xml index 36d3c0885ea..f2c3b1ec92e 100644 --- a/health-services/project/pom.xml +++ b/health-services/project/pom.xml @@ -49,7 +49,7 @@ org.egov.common health-services-models - 1.0.9-SNAPSHOT + 1.0.10-SNAPSHOT compile diff --git a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java index 7062e61422b..880518fc0d7 100644 --- a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java +++ b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java @@ -47,7 +47,7 @@ public ProjectBeneficiary mapRow(ResultSet resultSet, int i) throws SQLException .clientAuditDetails(clientAuditDetails) .rowVersion(resultSet.getInt("rowversion")) .isDeleted(resultSet.getBoolean("isdeleted")) - .voucherTag(resultSet.getString("voucherTag")) + .tag(resultSet.getString("tag")) .build(); } catch (JsonProcessingException e) { throw new SQLException(e); diff --git a/health-services/project/src/main/java/org/egov/project/service/ProjectBeneficiaryService.java b/health-services/project/src/main/java/org/egov/project/service/ProjectBeneficiaryService.java index 11d094561c4..5c8b5ea8862 100644 --- a/health-services/project/src/main/java/org/egov/project/service/ProjectBeneficiaryService.java +++ b/health-services/project/src/main/java/org/egov/project/service/ProjectBeneficiaryService.java @@ -19,6 +19,9 @@ import org.egov.project.validator.beneficiary.PbProjectIdValidator; import org.egov.project.validator.beneficiary.PbRowVersionValidator; import org.egov.project.validator.beneficiary.PbUniqueEntityValidator; +import org.egov.project.validator.beneficiary.PbUniqueTagsValidator; +import org.egov.project.validator.beneficiary.PbVoucherTagUniqueForCreateValidator; +import org.egov.project.validator.beneficiary.PbVoucherTagUniqueForUpdateValidator; import org.egov.project.web.models.BeneficiarySearchRequest; import org.egov.tracer.model.CustomException; import org.springframework.beans.factory.annotation.Autowired; @@ -62,6 +65,8 @@ public class ProjectBeneficiaryService { private final Predicate> isApplicableForUpdate = validator -> validator.getClass().equals(PbNullIdValidator.class) || validator.getClass().equals(PbNonExistentEntityValidator.class) + || validator.getClass().equals(PbUniqueTagsValidator.class) + || validator.getClass().equals(PbVoucherTagUniqueForUpdateValidator.class) || validator.getClass().equals(PbIsDeletedValidator.class) || validator.getClass().equals(PbProjectIdValidator.class) || validator.getClass().equals(BeneficiaryValidator.class) @@ -70,7 +75,9 @@ public class ProjectBeneficiaryService { private final Predicate> isApplicableForCreate = validator -> validator.getClass().equals(PbProjectIdValidator.class) - || validator.getClass().equals(BeneficiaryValidator.class); + || validator.getClass().equals(BeneficiaryValidator.class) + || validator.getClass().equals(PbUniqueTagsValidator.class) + || validator.getClass().equals(PbVoucherTagUniqueForCreateValidator.class); private final Predicate> isApplicableForDelete = validator -> validator.getClass().equals(PbNullIdValidator.class) diff --git a/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbUniqueEntityValidator.java b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbUniqueEntityValidator.java index 13485596684..7feed061ea6 100644 --- a/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbUniqueEntityValidator.java +++ b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbUniqueEntityValidator.java @@ -8,6 +8,7 @@ import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -18,24 +19,42 @@ import static org.egov.common.utils.CommonUtils.populateErrorDetails; import static org.egov.common.utils.ValidatorUtils.getErrorForUniqueEntity; +/** + * This class, PbUniqueEntityValidator, is a Spring component that serves as a validator for ensuring the uniqueness + * of entities (ProjectBeneficiaries) within a BeneficiaryBulkRequest. It implements the Validator interface, which + * allows it to validate the request by checking for duplicate entities based on their IDs. + */ @Component @Order(value = 2) @Slf4j public class PbUniqueEntityValidator implements Validator { + /** + * This method validates the uniqueness of entities within a BeneficiaryBulkRequest. + * + * @param request The BeneficiaryBulkRequest to validate. + * @return A map containing error details for entities that are not unique. + */ @Override public Map> validate(BeneficiaryBulkRequest request) { log.info("validating unique entity"); Map> errorDetailsMap = new HashMap<>(); List validProjectBeneficiaries = request.getProjectBeneficiaries() .stream().filter(notHavingErrors()).collect(Collectors.toList()); + if (!validProjectBeneficiaries.isEmpty()) { + + List duplicates = new ArrayList<>(); Map iMap = getIdToObjMap(validProjectBeneficiaries); + if (iMap.keySet().size() != validProjectBeneficiaries.size()) { - List duplicates = iMap.keySet().stream().filter(id -> + // Find duplicate entities by comparing their IDs + duplicates = iMap.keySet().stream().filter(id -> validProjectBeneficiaries.stream() .filter(projectBeneficiary -> projectBeneficiary.getId().equals(id)).count() > 1 ).collect(Collectors.toList()); + + // Populate error details for duplicate entities for (String key : duplicates) { Error error = getErrorForUniqueEntity(); populateErrorDetails(iMap.get(key), error, errorDetailsMap); @@ -44,4 +63,6 @@ public Map> validate(BeneficiaryBulkRequest requ } return errorDetailsMap; } + + } diff --git a/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbUniqueTagsValidator.java b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbUniqueTagsValidator.java new file mode 100644 index 00000000000..47800b3af65 --- /dev/null +++ b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbUniqueTagsValidator.java @@ -0,0 +1,47 @@ +package org.egov.project.validator.beneficiary; + +import lombok.extern.slf4j.Slf4j; +import org.egov.common.models.Error; +import org.egov.common.models.project.BeneficiaryBulkRequest; +import org.egov.common.models.project.ProjectBeneficiary; +import org.egov.common.validator.Validator; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.project.validator.beneficiary.ValidatorUtils.validateUniqueTags; + +/** + * This class, PbUniqueEntityValidator, is a Spring component that serves as a validator for ensuring the uniqueness + * of entities (ProjectBeneficiaries) within a BeneficiaryBulkRequest. It implements the Validator interface, which + * allows it to validate the request by checking for duplicate entities based on their Voucher Tags. + */ +@Component +@Order(value = 2) +@Slf4j +public class PbUniqueTagsValidator implements Validator { + + /** + * This method validates the uniqueness of entities within a BeneficiaryBulkRequest. + * + * @param request The BeneficiaryBulkRequest to validate. + * @return A map containing error details for entities that are not unique. + */ + @Override + public Map> validate(BeneficiaryBulkRequest request) { + log.info("validating unique voucher tags"); + Map> errorDetailsMap = new HashMap<>(); + List validProjectBeneficiaries = request.getProjectBeneficiaries() + .stream().filter(notHavingErrors()).collect(Collectors.toList()); + + if (!validProjectBeneficiaries.isEmpty()) { + validateUniqueTags(validProjectBeneficiaries, errorDetailsMap); + } + return errorDetailsMap; + } +} diff --git a/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForCreateValidator.java b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForCreateValidator.java new file mode 100644 index 00000000000..dbac480cccd --- /dev/null +++ b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForCreateValidator.java @@ -0,0 +1,118 @@ +package org.egov.project.validator.beneficiary; + +import lombok.extern.slf4j.Slf4j; +import org.egov.common.models.Error; +import org.egov.common.models.project.BeneficiaryBulkRequest; +import org.egov.common.models.project.ProjectBeneficiary; +import org.egov.common.validator.Validator; +import org.egov.project.repository.ProjectBeneficiaryRepository; +import org.egov.project.web.models.ProjectBeneficiarySearch; +import org.egov.tracer.model.CustomException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import static org.egov.common.utils.ValidatorUtils.getErrorForUniqueEntity; + +/** + * This class, PbVoucherTagUniqueValidator, is a Spring component that serves as a validator for ensuring the uniqueness + * of voucher tags within a list of project beneficiaries. It implements the Validator interface, which allows it to + * validate a BeneficiaryBulkRequest containing a list of ProjectBeneficiary objects. Any duplicate voucher tags within + * the list result in error details being populated for the respective ProjectBeneficiary objects. + */ +@Component +@Order(value = 2) +@Slf4j +public class PbVoucherTagUniqueForCreateValidator implements Validator { + final ProjectBeneficiaryRepository projectBeneficiaryRepository; + + @Autowired + public PbVoucherTagUniqueForCreateValidator(ProjectBeneficiaryRepository projectBeneficiaryRepository) { + this.projectBeneficiaryRepository = projectBeneficiaryRepository; + } + + /** + * + * @param beneficiaryBulkRequest + * @return + */ + @Override + public Map> validate(BeneficiaryBulkRequest beneficiaryBulkRequest) { + log.info("validating unique tag for create"); + + // Create a map to store error details for each ProjectBeneficiary + Map> errorDetailsMap = new HashMap<>(); + + // Filter valid project beneficiaries (those without errors) + List validProjectBeneficiaries = beneficiaryBulkRequest.getProjectBeneficiaries() + .stream().filter(notHavingErrors()).collect(Collectors.toList()); + + if(!validProjectBeneficiaries.isEmpty()) { + // Get a list of invalid voucher tags + List existingProjectBeneficiaries = getInvalidVoucherTags(validProjectBeneficiaries); + + // Validate and populate errors for invalid voucher tags + if(!existingProjectBeneficiaries.isEmpty()) + validateAndPopulateErrors(validProjectBeneficiaries, existingProjectBeneficiaries, errorDetailsMap); + } + + return errorDetailsMap; + } + + // Helper method to validate and populate errors + private void validateAndPopulateErrors(List validProjectBeneficiaries, List existingProjectBeneficiaries, Map> errorDetailsMap) { + List existingVoucherTags = existingProjectBeneficiaries.stream().map(ProjectBeneficiary::getTag).collect(Collectors.toList()); + // Filter project beneficiaries that are valid and have invalid voucher tags + List invalidEntities = validProjectBeneficiaries.stream().filter(notHavingErrors()) + .filter(entity -> existingVoucherTags.contains(entity.getTag())) + .collect(Collectors.toList()); + + // For each invalid entity, create an error and populate error details + invalidEntities.forEach(projectBeneficiary -> { + Error error = getErrorForUniqueEntity(); + populateErrorDetails(projectBeneficiary, error, errorDetailsMap); + }); + } + + // Helper method to get invalid voucher tags + private List getInvalidVoucherTags(List validProjectBeneficiaries) { + // Extract voucher tags from valid project beneficiaries + List voucherTags = validProjectBeneficiaries.stream() + .filter(Objects::nonNull) + .map(ProjectBeneficiary::getTag) + .collect(Collectors.toList()); + + if(CollectionUtils.isEmpty(voucherTags)) + return new ArrayList<>(); + + // Create a list to store existing project beneficiary with voucher tag + List existingProjectBeneficiaries; + + // Build a search request to find existing voucher tags + ProjectBeneficiarySearch projectBeneficiarySearch = ProjectBeneficiarySearch.builder().tag(voucherTags).build(); + + try { + log.info("Fetching project beneficiary based on voucher tags"); + existingProjectBeneficiaries = projectBeneficiaryRepository.find( + projectBeneficiarySearch, + voucherTags.size(), 0, validProjectBeneficiaries.get(0).getTenantId(), null, false + ); + } catch (Exception e) { + log.error("Exception while fetching project beneficiary service : ", e); + throw new CustomException("PROJECT_BENEFICIARY_VOUCHER_TAG_SEARCH_FAILED","Error occurred while fetching project beneficiary based on voucher tags. "+e); + } + + // return existing project beneficiaries + return existingProjectBeneficiaries; + } +} diff --git a/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForUpdateValidator.java b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForUpdateValidator.java new file mode 100644 index 00000000000..be699f6b145 --- /dev/null +++ b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForUpdateValidator.java @@ -0,0 +1,152 @@ +package org.egov.project.validator.beneficiary; + +import lombok.extern.slf4j.Slf4j; +import org.egov.common.models.Error; +import org.egov.common.models.project.BeneficiaryBulkRequest; +import org.egov.common.models.project.ProjectBeneficiary; +import org.egov.common.validator.Validator; +import org.egov.project.repository.ProjectBeneficiaryRepository; +import org.egov.project.web.models.ProjectBeneficiarySearch; +import org.egov.tracer.model.CustomException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import static org.egov.common.utils.ValidatorUtils.getErrorForUniqueEntity; + +/** + * This class, PbVoucherTagUniqueValidator, is a Spring component that serves as a validator for ensuring the uniqueness + * of voucher tags within a list of project beneficiaries. It implements the Validator interface, which allows it to + * validate a BeneficiaryBulkRequest containing a list of ProjectBeneficiary objects. Any duplicate voucher tags within + * the list result in error details being populated for the respective ProjectBeneficiary objects. + */ +@Component +@Order(value = 2) +@Slf4j +public class PbVoucherTagUniqueForUpdateValidator implements Validator { + final ProjectBeneficiaryRepository projectBeneficiaryRepository; + + @Autowired + public PbVoucherTagUniqueForUpdateValidator(ProjectBeneficiaryRepository projectBeneficiaryRepository) { + this.projectBeneficiaryRepository = projectBeneficiaryRepository; + } + + /** + * + * @param beneficiaryBulkRequest + * @return + */ + @Override + public Map> validate(BeneficiaryBulkRequest beneficiaryBulkRequest) { + log.info("validating unique tag"); + + // Create a map to store error details for each ProjectBeneficiary + Map> errorDetailsMap = new HashMap<>(); + + // Filter valid project beneficiaries (those without errors) + List validProjectBeneficiaries = beneficiaryBulkRequest.getProjectBeneficiaries() + .stream().filter(notHavingErrors()).collect(Collectors.toList()); + + if(!validProjectBeneficiaries.isEmpty()) { + // Get a list of existing ProjectBeneficiaries based on IDs + List existingProjectBeneficiaries = getExistingProjectBeneficiaries(validProjectBeneficiaries); + + // Validate and populate errors for invalid voucher tags + if(!CollectionUtils.isEmpty(existingProjectBeneficiaries)) + validateAndPopulateErrors(validProjectBeneficiaries, existingProjectBeneficiaries, errorDetailsMap); + } + + return errorDetailsMap; + } + + /** + * This method retrieves existing ProjectBeneficiary entities based on their IDs. + * + * @param validProjectBeneficiaries List of valid ProjectBeneficiary entities. + * @return A list of existing ProjectBeneficiary entities. + */ + private List getExistingProjectBeneficiaries(List validProjectBeneficiaries) { + List existingProjectBeneficiaries = null; + + // Build a search request to find existing voucher tags + ProjectBeneficiarySearch projectBeneficiarySearch = ProjectBeneficiarySearch.builder() + .id(validProjectBeneficiaries.stream().map(ProjectBeneficiary::getId).collect(Collectors.toList())) + .build(); + + try { + log.info("Fetching project beneficiary based on voucher tags"); + existingProjectBeneficiaries = projectBeneficiaryRepository.find( + projectBeneficiarySearch, + validProjectBeneficiaries.size(), 0, validProjectBeneficiaries.get(0).getTenantId(), null, false + ); + } catch (Exception e) { + log.error("Exception while fetching project beneficiary service : ", e); + throw new CustomException("PROJECT_BENEFICIARY_SEARCH_FAILED","Error occurred while fetching project beneficiary based on ids. "+e); + } + return existingProjectBeneficiaries; + } + + /** + * This method validates and populates errors for ProjectBeneficiary entities with duplicate voucher tags. + * + * @param validProjectBeneficiaries List of valid ProjectBeneficiary entities. + * @param existingProjectBeneficiaries List of existing ProjectBeneficiary entities based on IDs. + * @param errorDetailsMap A map to store error details for duplicate voucher tags. + */ + private void validateAndPopulateErrors(List validProjectBeneficiaries, List existingProjectBeneficiaries, Map> errorDetailsMap) { + Map existingProjectBeneficiaryMap = existingProjectBeneficiaries.stream().collect(Collectors.toMap(ProjectBeneficiary::getId, projectBeneficiary -> projectBeneficiary)); + // Filter project beneficiaries that are valid and have invalid voucher tags + List invalidEntities = validProjectBeneficiaries.stream().filter(notHavingErrors()) + .filter(entity -> !existingProjectBeneficiaryMap.containsKey(entity.getId())) + .collect(Collectors.toList()); + + populateErrors(invalidEntities, errorDetailsMap); + + List existingVoucherTags = existingProjectBeneficiaries.stream().map(ProjectBeneficiary::getTag).collect(Collectors.toList()); + invalidEntities = validProjectBeneficiaries.stream() + .filter(notHavingErrors()) + .filter(projectBeneficiary -> !existingProjectBeneficiaryMap.get(projectBeneficiary.getId()).getTag().equals(projectBeneficiary.getTag())) + .filter(projectBeneficiary -> isInvalid(projectBeneficiary, existingVoucherTags)) + .collect(Collectors.toList()); + + populateErrors(invalidEntities, errorDetailsMap); + } + + /** + * This method populates error details for a list of ProjectBeneficiary entities with duplicate voucher tags. + * + * @param invalidEntities List of ProjectBeneficiary entities with duplicate voucher tags. + * @param errorDetailsMap A map to store error details. + */ + private void populateErrors(List invalidEntities, Map> errorDetailsMap) { + // For each invalid entity, create an error and populate error details + invalidEntities.forEach(projectBeneficiary -> { + Error error = getErrorForUniqueEntity(); + populateErrorDetails(projectBeneficiary, error, errorDetailsMap); + }); + } + + /** + * This method checks if a ProjectBeneficiary entity is invalid based on its voucher tag. + * + * @param entity The ProjectBeneficiary entity to check. + * @param existingVoucherTags + * @return true if the entity is invalid, false otherwise. + */ + private boolean isInvalid(ProjectBeneficiary entity, List existingVoucherTags) { + String id = entity.getId(); + String tag = entity.getTag(); + + // Check if an entity with the same ID exists in the map and has a different tag + return existingVoucherTags.contains(tag); + } + +} diff --git a/health-services/project/src/main/java/org/egov/project/validator/beneficiary/ValidatorUtils.java b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/ValidatorUtils.java new file mode 100644 index 00000000000..a692601b501 --- /dev/null +++ b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/ValidatorUtils.java @@ -0,0 +1,39 @@ +package org.egov.project.validator.beneficiary; + +import org.egov.common.models.Error; +import org.egov.common.models.project.ProjectBeneficiary; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import static org.egov.common.utils.ValidatorUtils.getErrorForUniqueEntity; + +public class ValidatorUtils { + /** + * This method validates the uniqueness of voucher tags among valid ProjectBeneficiary entities. + * + * @param validProjectBeneficiaries List of valid ProjectBeneficiary entities. + * @param errorDetailsMap A map to store error details for duplicate voucher tags. + */ + public static void validateUniqueTags(List validProjectBeneficiaries, Map> errorDetailsMap) { + // Group ProjectBeneficiaries by voucher tags + Map> map = validProjectBeneficiaries.stream().filter(projectBeneficiary -> projectBeneficiary.getTag() != null) + .collect(Collectors.groupingBy(ProjectBeneficiary::getTag)); + + // Find voucher tags with duplicates + List duplicates = map.values().stream() + .filter(projectBeneficiaries -> projectBeneficiaries.size() > 1) + .flatMap(List::stream) + .filter(notHavingErrors()) + .collect(Collectors.toList()); + + // Populate error details for entities with duplicate voucher tags + for (ProjectBeneficiary projectBeneficiary : duplicates) { + Error error = getErrorForUniqueEntity(); + populateErrorDetails(projectBeneficiary, error, errorDetailsMap); + } + } +} diff --git a/health-services/project/src/main/java/org/egov/project/web/models/ProjectBeneficiarySearch.java b/health-services/project/src/main/java/org/egov/project/web/models/ProjectBeneficiarySearch.java index c9f8a61034b..1e58c06fd11 100644 --- a/health-services/project/src/main/java/org/egov/project/web/models/ProjectBeneficiarySearch.java +++ b/health-services/project/src/main/java/org/egov/project/web/models/ProjectBeneficiarySearch.java @@ -48,5 +48,8 @@ public class ProjectBeneficiarySearch { @JsonProperty("dateOfRegistration") private Long dateOfRegistration = null; + + @JsonProperty("tag") + private List tag; } diff --git a/health-services/project/src/main/resources/db/migration/main/V20231026174200__add_tag_project_beneficiary_ddl.sql b/health-services/project/src/main/resources/db/migration/main/V20231026174200__add_tag_project_beneficiary_ddl.sql index ae707d13686..85b2ff465e0 100644 --- a/health-services/project/src/main/resources/db/migration/main/V20231026174200__add_tag_project_beneficiary_ddl.sql +++ b/health-services/project/src/main/resources/db/migration/main/V20231026174200__add_tag_project_beneficiary_ddl.sql @@ -1 +1,3 @@ -ALTER TABLE PROJECT_BENEFICIARY ADD COLUMN IF NOT EXISTS voucherTag character varying(1000); \ No newline at end of file +ALTER TABLE PROJECT_BENEFICIARY ADD COLUMN IF NOT EXISTS voucherTag character varying(1000); +ALTER TABLE PROJECT_BENEFICIARY ADD UNIQUE (voucherTag); + diff --git a/health-services/project/src/main/resources/db/migration/main/V20231102105200__rename_tag_project_beneficiary_ddl.sql b/health-services/project/src/main/resources/db/migration/main/V20231102105200__rename_tag_project_beneficiary_ddl.sql new file mode 100644 index 00000000000..9a268635b56 --- /dev/null +++ b/health-services/project/src/main/resources/db/migration/main/V20231102105200__rename_tag_project_beneficiary_ddl.sql @@ -0,0 +1 @@ +ALTER TABLE project_beneficiary RENAME COLUMN voucherTag TO tag; \ No newline at end of file diff --git a/health-services/project/src/main/resources/project-persistor.yml b/health-services/project/src/main/resources/project-persistor.yml index 0a6349ca35a..a93c20aefda 100644 --- a/health-services/project/src/main/resources/project-persistor.yml +++ b/health-services/project/src/main/resources/project-persistor.yml @@ -30,7 +30,7 @@ serviceMaps: fromTopic: update-project-staff-topic isTransaction: true queryMaps: - - query: UPDATE project_staff SET projectId=?, staffId=?, startDate=?, endDate=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id = ? + - query: UPDATE project_staff SET projectId=?, staffId=?, startDate=?, endDate=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id = ? basePath: $.* jsonMaps: - jsonPath: $.*.projectId @@ -51,13 +51,16 @@ serviceMaps: fromTopic: delete-project-staff-topic isTransaction: true queryMaps: - - query: UPDATE project_staff SET lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id=?; + - query: UPDATE project_staff SET lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=?, additionalDetails=? WHERE id=?; basePath: $.* jsonMaps: - jsonPath: $.*.auditDetails.lastModifiedBy - jsonPath: $.*.auditDetails.lastModifiedTime - jsonPath: $.*.rowVersion - jsonPath: $.*.isDeleted + - jsonPath: $.*.additionalFields + type: JSON + dbType: JSONB - jsonPath: $.*.id - version: 1.0 @@ -65,7 +68,7 @@ serviceMaps: fromTopic: save-project-beneficiary-topic isTransaction: true queryMaps: - - query: INSERT INTO project_beneficiary (id, tenantId, projectId, beneficiaryId, clientReferenceId, beneficiaryClientReferenceId, dateOfRegistration, additionalDetails, createdBy, lastModifiedBy, createdTime, lastModifiedTime, rowVersion, isDeleted, voucherTag) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); + - query: INSERT INTO project_beneficiary (id, tenantId, projectId, beneficiaryId, clientReferenceId, beneficiaryClientReferenceId, dateOfRegistration, additionalDetails, createdBy, lastModifiedBy, createdTime, lastModifiedTime, rowVersion, isDeleted, clientCreatedTime, clientLastModifiedTime, clientCreatedBy, clientLastModifiedBy, tag) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); basePath: $.* jsonMaps: - jsonPath: $.*.id @@ -84,14 +87,18 @@ serviceMaps: - jsonPath: $.*.auditDetails.lastModifiedTime - jsonPath: $.*.rowVersion - jsonPath: $.*.isDeleted - - jsonPath: $.*.voucherTag + - jsonPath: $.*.clientAuditDetails.createdTime + - jsonPath: $.*.clientAuditDetails.lastModifiedTime + - jsonPath: $.*.clientAuditDetails.createdBy + - jsonPath: $.*.clientAuditDetails.lastModifiedBy + - jsonPath: $.*.tag - version: 1.0 description: Update Project Beneficiary fromTopic: update-project-beneficiary-topic isTransaction: true queryMaps: - - query: UPDATE project_beneficiary SET projectId=?, beneficiaryId=?, clientReferenceId=?, beneficiaryClientReferenceId=?, dateOfRegistration=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=?, voucherTag=? WHERE id = ? AND isDeleted=false + - query: UPDATE project_beneficiary SET projectId=?, beneficiaryId=?, clientReferenceId=?, beneficiaryClientReferenceId=?, dateOfRegistration=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=?, clientLastModifiedTime = ?, clientLastModifiedBy = ?, tag=? WHERE id = ? AND isDeleted=false basePath: $.* jsonMaps: - jsonPath: $.*.projectId @@ -106,7 +113,9 @@ serviceMaps: - jsonPath: $.*.auditDetails.lastModifiedTime - jsonPath: $.*.rowVersion - jsonPath: $.*.isDeleted - - jsonPath: $.*.voucherTag + - jsonPath: $.*.clientAuditDetails.lastModifiedTime + - jsonPath: $.*.clientAuditDetails.lastModifiedBy + - jsonPath: $.*.tag - jsonPath: $.*.id - version: 1.0 @@ -114,13 +123,18 @@ serviceMaps: fromTopic: delete-project-beneficiary-topic isTransaction: true queryMaps: - - query: UPDATE project_beneficiary SET lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id=?; + - query: UPDATE project_beneficiary SET lastModifiedBy=?, lastModifiedTime=?, clientLastModifiedTime = ?, clientLastModifiedBy = ?, rowVersion=?, isDeleted=?, additionalDetails=? WHERE id=?; basePath: $.* jsonMaps: - jsonPath: $.*.auditDetails.lastModifiedBy - jsonPath: $.*.auditDetails.lastModifiedTime + - jsonPath: $.*.clientAuditDetails.lastModifiedTime + - jsonPath: $.*.clientAuditDetails.lastModifiedBy - jsonPath: $.*.rowVersion - jsonPath: $.*.isDeleted + - jsonPath: $.*.additionalFields + type: JSON + dbType: JSONB - jsonPath: $.*.id - version: 1.0 @@ -129,7 +143,7 @@ serviceMaps: fromTopic: save-project isTransaction: true queryMaps: - - query: INSERT INTO project(id,tenantId,projectNumber,name,projectType,projectSubType,department,description,referenceId,startDate,endDate,isTaskEnabled,parent,projectHierarchy,additionalDetails,isDeleted,rowVersion,createdBy,lastModifiedBy,createdTime,lastModifiedTime) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); + - query: INSERT INTO project(id,tenantId,projectNumber,name,projectType,projectTypeId,projectSubType,department,description,referenceId,startDate,endDate,isTaskEnabled,parent,projectHierarchy,natureOfWork,additionalDetails,isDeleted,rowVersion,createdBy,lastModifiedBy,createdTime,lastModifiedTime) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); basePath: $.Projects.* jsonMaps: - jsonPath: $.Projects.*.id @@ -142,6 +156,8 @@ serviceMaps: - jsonPath: $.Projects.*.projectType + - jsonPath: $.Projects.*.projectTypeId + - jsonPath: $.Projects.*.projectSubType - jsonPath: $.Projects.*.department @@ -160,6 +176,8 @@ serviceMaps: - jsonPath: $.Projects.*.projectHierarchy + - jsonPath: $.Projects.*.natureOfWork + - jsonPath: $.Projects.*.additionalDetails type: JSON dbType: JSONB @@ -177,7 +195,7 @@ serviceMaps: - jsonPath: $.Projects.*.auditDetails.lastModifiedTime - - query: INSERT INTO project_address(id,tenantId,projectId,doorNo,latitude,longitude,locationAccuracy,type,addressLine1,addressLine2,landmark,city,pinCode,buildingName,street,locality) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); + - query: INSERT INTO project_address(id,tenantId,projectId,doorNo,latitude,longitude,locationAccuracy,type,addressLine1,addressLine2,landmark,city,pinCode,buildingName,street,boundaryType,boundary) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); basePath: $.Projects.*.address jsonMaps: - jsonPath: $.Projects.*.address.id @@ -210,7 +228,9 @@ serviceMaps: - jsonPath: $.Projects.*.address.street - - jsonPath: $.Projects.*.address.locality + - jsonPath: $.Projects.*.address.boundaryType + + - jsonPath: $.Projects.*.address.boundary - query: INSERT INTO project_target(id,projectId,beneficiaryType,totalNo,targetNo,isDeleted,createdBy,lastModifiedBy,createdTime,lastModifiedTime) VALUES (?,?,?,?,?,?,?,?,?,?); @@ -271,7 +291,7 @@ serviceMaps: fromTopic: update-project isTransaction: true queryMaps: - - query: UPDATE project SET name = ?, projectType = ?, projectSubType = ?, department = ?, description = ?, referenceId = ?, startDate = ?, endDate = ?, isTaskEnabled = ?, additionalDetails = ?, isDeleted = ?, rowVersion = ?, lastModifiedBy = ?, lastModifiedTime = ? WHERE id = ?; + - query: UPDATE project SET name = ?, projectType = ?, projectTypeId = ?, projectSubType = ?, department = ?, description = ?, referenceId = ?, startDate = ?, endDate = ?, isTaskEnabled = ?, natureOfWork = ?, additionalDetails = ?, isDeleted = ?, rowVersion = ?, lastModifiedBy = ?, lastModifiedTime = ? WHERE id = ?; basePath: $.Projects.* jsonMaps: @@ -279,6 +299,8 @@ serviceMaps: - jsonPath: $.Projects.*.projectType + - jsonPath: $.Projects.*.projectTypeId + - jsonPath: $.Projects.*.projectSubType - jsonPath: $.Projects.*.department @@ -293,6 +315,8 @@ serviceMaps: - jsonPath: $.Projects.*.isTaskEnabled + - jsonPath: $.Projects.*.natureOfWork + - jsonPath: $.Projects.*.additionalDetails type: JSON dbType: JSONB @@ -308,7 +332,7 @@ serviceMaps: - jsonPath: $.Projects.*.id - - query: UPDATE project_address SET door_no = ?, latitude=?, longitude=?, locationAccuracy=?, type=?, addressLine1=?, addressLine2=?, landmark=?, city=?, pinCode=?, buildingName=?, street=? WHERE id=?; + - query: UPDATE project_address SET doorNo = ?, latitude=?, longitude=?, locationAccuracy=?, type=?, addressLine1=?, addressLine2=?, landmark=?, city=?, pinCode=?, buildingName=?, street=?, boundaryType=?, boundary=? WHERE id=?; basePath: $.Projects.*.address jsonMaps: @@ -336,10 +360,14 @@ serviceMaps: - jsonPath: $.Projects.*.address.street + - jsonPath: $.Projects.*.address.boundaryType + + - jsonPath: $.Projects.*.address.boundary + - jsonPath: $.Projects.*.address.id - - query: INSERT INTO project_target(id,projectId,beneficiaryType,totalNo,targetNo,isDeleted,createdBy,lastModifiedBy,createdTime,lastModifiedTime) VALUES (?,?,?,?,?,?,?,?,?,?) ON CONFLICT (id) DO UPDATE SET beneficiary_type = ?, totalNo =?, targetNo=?, isDeleted=?, lastModifiedBy=?, lastModifiedTime=?; + - query: INSERT INTO project_target(id,projectId,beneficiaryType,totalNo,targetNo,isDeleted,createdBy,lastModifiedBy,createdTime,lastModifiedTime) VALUES (?,?,?,?,?,?,?,?,?,?) ON CONFLICT (id) DO UPDATE SET beneficiaryType = ?, totalNo =?, targetNo=?, isDeleted=?, lastModifiedBy=?, lastModifiedTime=?; basePath: $.Projects.*.targets.* jsonMaps: @@ -420,24 +448,23 @@ serviceMaps: - jsonPath: $.Projects.*.documents.*.auditDetails.lastModifiedTime + - version: 1.0 description: Saves a project resourcce fromTopic: save-project-resource-topic isTransaction: true queryMaps: - - query: INSERT INTO project_resource (id, tenantId, projectId, productVariantId, isBaseUnitVariant, startDate, endDate, additionalDetails, createdBy, lastModifiedBy, createdTime, lastModifiedTime, rowVersion, isDeleted) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?); + - query: INSERT INTO project_resource (id, tenantId, projectId, productVariantId, isBaseUnitVariant, startDate, endDate, type, createdBy, lastModifiedBy, createdTime, lastModifiedTime, rowVersion, isDeleted) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?); basePath: $.* jsonMaps: - jsonPath: $.*.id - jsonPath: $.*.tenantId - jsonPath: $.*.projectId - - jsonPath: $.*.productVariantId - - jsonPath: $.*.isBaseUnitVariant + - jsonPath: $.*.resource.productVariantId + - jsonPath: $.*.resource.isBaseUnitVariant - jsonPath: $.*.startDate - jsonPath: $.*.endDate - - jsonPath: $.*.additionalFields - type: JSON - dbType: JSONB + - jsonPath: $.*.resource.type - jsonPath: $.*.auditDetails.createdBy - jsonPath: $.*.auditDetails.lastModifiedBy - jsonPath: $.*.auditDetails.createdTime @@ -450,18 +477,16 @@ serviceMaps: fromTopic: update-project-resource-topic isTransaction: true queryMaps: - - query: UPDATE project_resource SET tenantId=?, projectId=?, productVariantId=?, isBaseUnitVariant=?, startDate=?, endDate=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id = ? + - query: UPDATE project_resource SET tenantId=?, projectId=?, productVariantId=?, isBaseUnitVariant=?, startDate=?, endDate=?, type=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id = ? basePath: $.* jsonMaps: - jsonPath: $.*.tenantId - jsonPath: $.*.projectId - - jsonPath: $.*.productVariantId - - jsonPath: $.*.isBaseUnitVariant + - jsonPath: $.*.resource.productVariantId + - jsonPath: $.*.resource.isBaseUnitVariant - jsonPath: $.*.startDate - jsonPath: $.*.endDate - - jsonPath: $.*.additionalFields - type: JSON - dbType: JSONB + - jsonPath: $.*.resource.type - jsonPath: $.*.auditDetails.lastModifiedBy - jsonPath: $.*.auditDetails.lastModifiedTime - jsonPath: $.*.rowVersion @@ -473,13 +498,16 @@ serviceMaps: fromTopic: delete-project-resource-topic isTransaction: true queryMaps: - - query: UPDATE project_resource SET lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id = ? + - query: UPDATE project_resource SET lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=?, additionalDetails=? WHERE id = ? basePath: $.* jsonMaps: - jsonPath: $.*.auditDetails.lastModifiedBy - jsonPath: $.*.auditDetails.lastModifiedTime - jsonPath: $.*.rowVersion - jsonPath: $.*.isDeleted + - jsonPath: $.*.additionalFields + type: JSON + dbType: JSONB - jsonPath: $.*.id - version: 1.0 @@ -521,7 +549,7 @@ serviceMaps: isTransaction: true queryMaps: - - query: UPDATE project_facility SET projectId=?, facilityId=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id = ? + - query: UPDATE project_facility SET projectId=?, facilityId=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id = ? basePath: $.* jsonMaps: - jsonPath: $.*.projectId @@ -547,11 +575,14 @@ serviceMaps: fromTopic: delete-project-facility-topic isTransaction: true queryMaps: - - query: UPDATE project_facility SET lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id=?; + - query: UPDATE project_facility SET lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=?, additionalDetails=? WHERE id=?; basePath: $.* jsonMaps: - jsonPath: $.*.auditDetails.lastModifiedBy - jsonPath: $.*.auditDetails.lastModifiedTime - jsonPath: $.*.rowVersion - jsonPath: $.*.isDeleted + - jsonPath: $.*.additionalFields + type: JSON + dbType: JSONB - jsonPath: $.*.id \ No newline at end of file diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java index 3bd6d90554e..e118fb2152d 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java @@ -104,7 +104,7 @@ private void validateAndPopulateErrors(List existingProjectB }); List invalidEntities = entities.stream().filter(notHavingErrors()).filter(entity -> (Objects.nonNull(entity.getProjectBeneficiaryClientReferenceId()) && !existingProjectBeneficiaryClientReferenceIds.contains(entity.getProjectBeneficiaryClientReferenceId()) ) - || (Objects.nonNull(entity.getProjectBeneficiaryClientReferenceId()) && !existingProjectBeneficiaryIds.contains(entity.getProjectBeneficiaryId())) + || (Objects.nonNull(entity.getProjectBeneficiaryId()) && !existingProjectBeneficiaryIds.contains(entity.getProjectBeneficiaryId())) ).collect(Collectors.toList()); invalidEntities.forEach(referral -> { Error error = getErrorForNonExistentEntity(); From ba94e924f62a60e1061b25c55c2bc2439b8c53c4 Mon Sep 17 00:00:00 2001 From: kavi_elrey <25226238+kavi-egov@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:13:09 +0530 Subject: [PATCH 29/41] dummy api with same pagination response --- .../web/controllers/BeneficiaryDownsyncController.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java index d66cf0d432e..67d35da6aa7 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java @@ -33,6 +33,9 @@ public ResponseEntity getBeneficaryData (@ApiParam(value = "Capture deta .responseInfo(ResponseInfoFactory .createResponseInfo(request.getRequestInfo(), true)) .build(); + + long offset = request.getDownsyncCriteria().getOffset(); + long limit = request.getDownsyncCriteria().getLimit(); return ResponseEntity.status(HttpStatus.ACCEPTED).body("{\n" + " \"ResponseInfo\": {\n" @@ -47,8 +50,8 @@ public ResponseEntity getBeneficaryData (@ApiParam(value = "Capture deta + " \"DownsyncCriteria\": {\n" + " \"locality\": \"string\",\n" + " \"tenantId\": \"string\",\n" - + " \"offset\": 0,\n" - + " \"limit\": 10,\n" + + " \"offset\": " + offset + ",\n" + + " \"limit\": " + limit + ",\n" + " \"lastSyncedTime\": 0,\n" + " \"includeDeleted\": false,\n" + " \"totalCount\": \"1\"\n" From 80f128288797055bb58593325df9c825fa15bf42 Mon Sep 17 00:00:00 2001 From: kavi_elrey <25226238+kavi-egov@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:13:15 +0530 Subject: [PATCH 30/41] dummy api with same pagination response --- .../web/controllers/BeneficiaryDownsyncController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java index 67d35da6aa7..fcea9dbce5b 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java @@ -54,7 +54,7 @@ public ResponseEntity getBeneficaryData (@ApiParam(value = "Capture deta + " \"limit\": " + limit + ",\n" + " \"lastSyncedTime\": 0,\n" + " \"includeDeleted\": false,\n" - + " \"totalCount\": \"1\"\n" + + " \"totalCount\": \"1000\"\n" + " },\n" + " \"Households\": [\n" + " {\n" From 1646d4030be45ad4b39c436a365de72d9c198140 Mon Sep 17 00:00:00 2001 From: kavi_elrey <25226238+kavi-egov@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:14:56 +0530 Subject: [PATCH 31/41] dummy api with same pagination response --- .../web/controllers/BeneficiaryDownsyncController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java index fcea9dbce5b..91e5e6a245d 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java @@ -54,7 +54,7 @@ public ResponseEntity getBeneficaryData (@ApiParam(value = "Capture deta + " \"limit\": " + limit + ",\n" + " \"lastSyncedTime\": 0,\n" + " \"includeDeleted\": false,\n" - + " \"totalCount\": \"1000\"\n" + + " \"totalCount\": \" " + offset+limit + "\"\n" + " },\n" + " \"Households\": [\n" + " {\n" From 48bf5dba996497f05a31d968cb9210ad665f27ed Mon Sep 17 00:00:00 2001 From: kavi_elrey <25226238+kavi-egov@users.noreply.github.com> Date: Mon, 6 Nov 2023 10:10:35 +0530 Subject: [PATCH 32/41] downsync data test --- .../models/household/HouseholdSearch.java | 10 +- .../beneficiarydownsync/DownsyncCriteria.java | 4 + health-services/referralmanagement/pom.xml | 2 +- .../ReferralManagementConfiguration.java | 21 +- .../RmProjectBeneficiaryIdValidator.java | 2 - .../SeProjectBeneficiaryIdValidator.java | 27 +- .../sideeffect/SeProjectTaskIdValidator.java | 33 +- .../BeneficiaryDownsyncController.java | 428 +----------------- .../src/main/resources/application.properties | 13 +- 9 files changed, 78 insertions(+), 462 deletions(-) diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdSearch.java index 552f974aa47..faa018d0a4d 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdSearch.java @@ -1,15 +1,17 @@ package org.egov.common.models.household; +import java.util.List; + +import org.springframework.validation.annotation.Validated; + import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; + import io.swagger.annotations.ApiModel; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import org.springframework.validation.annotation.Validated; - -import java.util.List; /** * A representation of Household. @@ -34,7 +36,7 @@ public class HouseholdSearch { // @JsonProperty("memberCount") // private Integer memberCount = null; - @JsonProperty("boundaryCode") + @JsonProperty("localityCode") private String localityCode = null; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java index e75eb1b432a..97a7bf53c18 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java @@ -16,6 +16,10 @@ public class DownsyncCriteria { private Long lastSyncedTime; + private String projectId; + + private String tenantId; + @Default private Boolean includeDeleted = false; diff --git a/health-services/referralmanagement/pom.xml b/health-services/referralmanagement/pom.xml index c2aefd82d79..6b3f7569231 100644 --- a/health-services/referralmanagement/pom.xml +++ b/health-services/referralmanagement/pom.xml @@ -47,7 +47,7 @@ org.egov.common health-services-common - 1.0.8-SNAPSHOT + 1.0.12-SNAPSHOT org.egov.common diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/config/ReferralManagementConfiguration.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/config/ReferralManagementConfiguration.java index be30c29e5d4..e529c27a4f2 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/config/ReferralManagementConfiguration.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/config/ReferralManagementConfiguration.java @@ -1,12 +1,13 @@ package org.egov.referralmanagement.config; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; @Getter @Setter @@ -68,4 +69,20 @@ public class ReferralManagementConfiguration { @Value("${egov.search.facility.url}") private String facilitySearchUrl; + + @Value("${egov.household.host}") + private String householdHost; + + @Value("${egov.search.household.url}") + private String householdSearchUrl; + + @Value("${egov.search.household.member.url}") + private String householdMemberSearchUrl; + + @Value("${egov.individual.host}") + private String individualHost; + + @Value("${egov.search.individual.url}") + private String individualSearchUrl; + } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java index e118fb2152d..b10789f596e 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmProjectBeneficiaryIdValidator.java @@ -87,8 +87,6 @@ private List getExistingProjectBeneficiaries(String tenantId BeneficiaryBulkResponse.class ); existingProjectBeneficiaries = beneficiaryBulkResponse.getProjectBeneficiaries(); - } catch (QueryBuilderException e) { - existingProjectBeneficiaries = Collections.emptyList(); } catch (Exception e) { throw new CustomException("Project Beneficiaries failed to fetch", "Exception : "+e.getMessage()); } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/sideeffect/SeProjectBeneficiaryIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/sideeffect/SeProjectBeneficiaryIdValidator.java index 3350fb90f4a..9f2bad1c8a1 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/sideeffect/SeProjectBeneficiaryIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/sideeffect/SeProjectBeneficiaryIdValidator.java @@ -1,7 +1,16 @@ package org.egov.referralmanagement.validator.sideeffect; -import lombok.extern.slf4j.Slf4j; -import org.egov.common.data.query.exception.QueryBuilderException; +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + import org.egov.common.http.client.ServiceRequestClient; import org.egov.common.models.Error; import org.egov.common.models.project.BeneficiaryBulkResponse; @@ -17,17 +26,7 @@ import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.stream.Collectors; - -import static org.egov.common.utils.CommonUtils.notHavingErrors; -import static org.egov.common.utils.CommonUtils.populateErrorDetails; -import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; +import lombok.extern.slf4j.Slf4j; /** * Validate whether project beneficiary exist in db or not using project beneficiary id and project beneficiary client beneficiary id for SideEffect object @@ -80,8 +79,6 @@ public Map> validate(SideEffectBulkRequest request) { BeneficiaryBulkResponse.class ); existingProjectBeneficiaries = beneficiaryBulkResponse.getProjectBeneficiaries(); - } catch (QueryBuilderException qbe) { - existingProjectBeneficiaries = Collections.emptyList(); } catch (Exception e) { throw new CustomException("Project Beneficiaries failed to fetch", "Exception : "+e.getMessage()); } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/sideeffect/SeProjectTaskIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/sideeffect/SeProjectTaskIdValidator.java index 1230987e3be..20265333bb1 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/sideeffect/SeProjectTaskIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/sideeffect/SeProjectTaskIdValidator.java @@ -1,14 +1,18 @@ package org.egov.referralmanagement.validator.sideeffect; -import lombok.extern.slf4j.Slf4j; -import org.egov.referralmanagement.config.ReferralManagementConfiguration; -import org.egov.common.data.query.exception.QueryBuilderException; +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + import org.egov.common.http.client.ServiceRequestClient; import org.egov.common.models.Error; -import org.egov.common.models.project.BeneficiaryBulkResponse; -import org.egov.common.models.project.BeneficiarySearchRequest; -import org.egov.common.models.project.ProjectBeneficiary; -import org.egov.common.models.project.ProjectBeneficiarySearch; import org.egov.common.models.project.Task; import org.egov.common.models.project.TaskBulkResponse; import org.egov.common.models.project.TaskSearch; @@ -16,22 +20,13 @@ import org.egov.common.models.referralmanagement.sideeffect.SideEffect; import org.egov.common.models.referralmanagement.sideeffect.SideEffectBulkRequest; import org.egov.common.validator.Validator; +import org.egov.referralmanagement.config.ReferralManagementConfiguration; import org.egov.tracer.model.CustomException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.stream.Collectors; - -import static org.egov.common.utils.CommonUtils.notHavingErrors; -import static org.egov.common.utils.CommonUtils.populateErrorDetails; -import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; +import lombok.extern.slf4j.Slf4j; /** * Validate whether project task exist in db or not using project task id and project task client beneficiary id for SideEffect object @@ -87,8 +82,6 @@ public Map> validate(SideEffectBulkRequest request) { TaskBulkResponse.class ); existingTasks = taskBulkResponse.getTasks(); - } catch (QueryBuilderException e) { - existingTasks = Collections.emptyList(); } catch (Exception e) { throw new CustomException("Project Task failed to fetch", "Exception : "+e.getMessage()); } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java index 91e5e6a245d..80860ab2096 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java @@ -6,6 +6,8 @@ import org.egov.common.models.referralmanagement.beneficiarydownsync.DownsyncRequest; import org.egov.common.models.referralmanagement.beneficiarydownsync.DownsyncResponse; import org.egov.common.utils.ResponseInfoFactory; +import org.egov.referralmanagement.service.DownsyncService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; @@ -20,429 +22,27 @@ @RequestMapping("/beneficiary-downsync") @Validated public class BeneficiaryDownsyncController { - - + + private DownsyncService downsyncService; + + @Autowired + BeneficiaryDownsyncController (DownsyncService downsyncService){ + this.downsyncService = downsyncService; + } + @PostMapping(value = "/v1/_get") - public ResponseEntity getBeneficaryData (@ApiParam(value = "Capture details of Side Effect", required = true) @Valid @RequestBody DownsyncRequest request) { + public ResponseEntity getBeneficaryData (@ApiParam(value = "Capture details of Side Effect", required = true) @Valid @RequestBody DownsyncRequest request) { Downsync.builder(). downsyncCriteria(request.getDownsyncCriteria()) .build(); + Downsync downsync = downsyncService.prepareDownsyncData(request); DownsyncResponse response = DownsyncResponse.builder() - .downsync(new Downsync()) + .downsync(downsync) .responseInfo(ResponseInfoFactory .createResponseInfo(request.getRequestInfo(), true)) .build(); - long offset = request.getDownsyncCriteria().getOffset(); - long limit = request.getDownsyncCriteria().getLimit(); - - return ResponseEntity.status(HttpStatus.ACCEPTED).body("{\n" - + " \"ResponseInfo\": {\n" - + " \"apiId\": \"string\",\n" - + " \"ver\": \"string\",\n" - + " \"ts\": 0,\n" - + " \"resMsgId\": \"string\",\n" - + " \"msgId\": \"string\",\n" - + " \"status\": \"SUCCESSFUL\"\n" - + " },\n" - + " \"Downsync\": {\n" - + " \"DownsyncCriteria\": {\n" - + " \"locality\": \"string\",\n" - + " \"tenantId\": \"string\",\n" - + " \"offset\": " + offset + ",\n" - + " \"limit\": " + limit + ",\n" - + " \"lastSyncedTime\": 0,\n" - + " \"includeDeleted\": false,\n" - + " \"totalCount\": \" " + offset+limit + "\"\n" - + " },\n" - + " \"Households\": [\n" - + " {\n" - + " \"id\": \"string\",\n" - + " \"tenantId\": \"tenantA\",\n" - + " \"clientReferenceId\": \"string\",\n" - + " \"memberCount\": 4,\n" - + " \"address\": {\n" - + " \"id\": \"string\",\n" - + " \"tenantId\": \"tenantA\",\n" - + " \"doorNo\": \"string\",\n" - + " \"latitude\": 90,\n" - + " \"longitude\": 180,\n" - + " \"locationAccuracy\": 10000,\n" - + " \"type\": \"string\",\n" - + " \"addressLine1\": \"string\",\n" - + " \"addressLine2\": \"string\",\n" - + " \"landmark\": \"string\",\n" - + " \"city\": \"string\",\n" - + " \"pincode\": \"string\",\n" - + " \"buildingName\": \"string\",\n" - + " \"street\": \"string\",\n" - + " \"locality\": {\n" - + " \"code\": \"string\",\n" - + " \"name\": \"string\",\n" - + " \"label\": \"string\",\n" - + " \"latitude\": \"string\",\n" - + " \"longitude\": \"string\",\n" - + " \"children\": [\n" - + " \"string\"\n" - + " ],\n" - + " \"materializedPath\": \"string\"\n" - + " }\n" - + " },\n" - + " \"additionalFields\": {\n" - + " \"schema\": \"HOUSEHOLD\",\n" - + " \"version\": 2,\n" - + " \"fields\": [\n" - + " {\n" - + " \"key\": \"height\",\n" - + " \"value\": \"180\"\n" - + " }\n" - + " ]\n" - + " },\n" - + " \"isDeleted\": true,\n" - + " \"rowVersion\": 0,\n" - + " \"auditDetails\": {\n" - + " \"createdBy\": \"string\",\n" - + " \"lastModifiedBy\": \"string\",\n" - + " \"createdTime\": 0,\n" - + " \"lastModifiedTime\": 0\n" - + " }\n" - + " }\n" - + " ],\n" - + " \"HouseholdMembers\": [\n" - + " {\n" - + " \"id\": \"string\",\n" - + " \"householdId\": \"string\",\n" - + " \"householdClientReferenceId\": \"string\",\n" - + " \"individualId\": \"string\",\n" - + " \"individualClientReferenceId\": \"string\",\n" - + " \"isHeadOfHousehold\": false,\n" - + " \"tenantId\": \"tenantA\",\n" - + " \"additionalFields\": {\n" - + " \"schema\": \"HOUSEHOLD\",\n" - + " \"version\": 2,\n" - + " \"fields\": [\n" - + " {\n" - + " \"key\": \"height\",\n" - + " \"value\": \"180\"\n" - + " }\n" - + " ]\n" - + " },\n" - + " \"isDeleted\": true,\n" - + " \"rowVersion\": 0,\n" - + " \"auditDetails\": {\n" - + " \"createdBy\": \"string\",\n" - + " \"lastModifiedBy\": \"string\",\n" - + " \"createdTime\": 0,\n" - + " \"lastModifiedTime\": 0\n" - + " }\n" - + " }\n" - + " ],\n" - + " \"Individuals\": [\n" - + " {\n" - + " \"id\": \"string\",\n" - + " \"tenantId\": \"tenantA\",\n" - + " \"clientReferenceId\": \"string\",\n" - + " \"userId\": \"string\",\n" - + " \"name\": {\n" - + " \"givenName\": \"string\",\n" - + " \"familyName\": \"string\",\n" - + " \"otherNames\": \"string\"\n" - + " },\n" - + " \"dateOfBirth\": \"14/10/2022\",\n" - + " \"gender\": \"MALE\",\n" - + " \"bloodGroup\": \"str\",\n" - + " \"mobileNumber\": \"string\",\n" - + " \"altContactNumber\": \"string\",\n" - + " \"email\": \"user@example.com\",\n" - + " \"address\": [\n" - + " {\n" - + " \"id\": \"string\",\n" - + " \"tenantId\": \"tenantA\",\n" - + " \"doorNo\": \"string\",\n" - + " \"latitude\": 90,\n" - + " \"longitude\": 180,\n" - + " \"locationAccuracy\": 10000,\n" - + " \"type\": \"string\",\n" - + " \"addressLine1\": \"string\",\n" - + " \"addressLine2\": \"string\",\n" - + " \"landmark\": \"string\",\n" - + " \"city\": \"string\",\n" - + " \"pincode\": \"string\",\n" - + " \"buildingName\": \"string\",\n" - + " \"street\": \"string\",\n" - + " \"locality\": {\n" - + " \"code\": \"string\",\n" - + " \"name\": \"string\",\n" - + " \"label\": \"string\",\n" - + " \"latitude\": \"string\",\n" - + " \"longitude\": \"string\",\n" - + " \"children\": [\n" - + " \"string\"\n" - + " ],\n" - + " \"materializedPath\": \"string\"\n" - + " }\n" - + " }\n" - + " ],\n" - + " \"fatherName\": \"string\",\n" - + " \"husbandName\": \"string\",\n" - + " \"identifiers\": [\n" - + " {\n" - + " \"identifierType\": \"SYSTEM_GENERATED\",\n" - + " \"identifierId\": \"ABCD-1212\"\n" - + " }\n" - + " ],\n" - + " \"skills\": [\n" - + " {\n" - + " \"id\": \"string\",\n" - + " \"type\": \"string\",\n" - + " \"level\": \"string\",\n" - + " \"experience\": \"string\"\n" - + " }\n" - + " ],\n" - + " \"photo\": \"string\",\n" - + " \"additionalFields\": {\n" - + " \"schema\": \"HOUSEHOLD\",\n" - + " \"version\": 2,\n" - + " \"fields\": [\n" - + " {\n" - + " \"key\": \"height\",\n" - + " \"value\": \"180\"\n" - + " }\n" - + " ]\n" - + " },\n" - + " \"isDeleted\": true,\n" - + " \"rowVersion\": 0,\n" - + " \"auditDetails\": {\n" - + " \"createdBy\": \"string\",\n" - + " \"lastModifiedBy\": \"string\",\n" - + " \"createdTime\": 0,\n" - + " \"lastModifiedTime\": 0\n" - + " }\n" - + " }\n" - + " ],\n" - + " \"ProjectBeneficiaries\": [\n" - + " {\n" - + " \"id\": \"string\",\n" - + " \"clientReferenceId\": \"string\",\n" - + " \"tenantId\": \"tenantA\",\n" - + " \"projectId\": \"string\",\n" - + " \"beneficiaryId\": \"string\",\n" - + " \"beneficiaryClientReferenceId\": \"string\",\n" - + " \"dateOfRegistration\": 1663218161,\n" - + " \"additionalFields\": {\n" - + " \"schema\": \"HOUSEHOLD\",\n" - + " \"version\": 2,\n" - + " \"fields\": [\n" - + " {\n" - + " \"key\": \"height\",\n" - + " \"value\": \"180\"\n" - + " }\n" - + " ]\n" - + " },\n" - + " \"isDeleted\": true,\n" - + " \"rowVersion\": 0,\n" - + " \"auditDetails\": {\n" - + " \"createdBy\": \"string\",\n" - + " \"lastModifiedBy\": \"string\",\n" - + " \"createdTime\": 0,\n" - + " \"lastModifiedTime\": 0\n" - + " }\n" - + " }\n" - + " ],\n" - + " \"Tasks\": [\n" - + " {\n" - + " \"id\": \"string\",\n" - + " \"clientReferenceId\": \"string\",\n" - + " \"tenantId\": \"tenantA\",\n" - + " \"projectId\": \"string\",\n" - + " \"projectBeneficiaryId\": \"R-ID-1\",\n" - + " \"projectBeneficiaryClientReferenceId\": \"R-ID-1\",\n" - + " \"resources\": [\n" - + " {\n" - + " \"id\": \"string\",\n" - + " \"tenantId\": \"tenantA\",\n" - + " \"productVariantId\": \"ID-1\",\n" - + " \"quantity\": 0,\n" - + " \"isDelivered\": true,\n" - + " \"deliveryComment\": \"string\",\n" - + " \"isDeleted\": true,\n" - + " \"auditDetails\": {\n" - + " \"createdBy\": \"string\",\n" - + " \"lastModifiedBy\": \"string\",\n" - + " \"createdTime\": 0,\n" - + " \"lastModifiedTime\": 0\n" - + " }\n" - + " }\n" - + " ],\n" - + " \"plannedStartDate\": 0,\n" - + " \"plannedEndDate\": 0,\n" - + " \"actualStartDate\": 0,\n" - + " \"actualEndDate\": 0,\n" - + " \"createdBy\": \"UUID\",\n" - + " \"createdDate\": 1663218161,\n" - + " \"address\": {\n" - + " \"id\": \"string\",\n" - + " \"tenantId\": \"tenantA\",\n" - + " \"doorNo\": \"string\",\n" - + " \"latitude\": 90,\n" - + " \"longitude\": 180,\n" - + " \"locationAccuracy\": 10000,\n" - + " \"type\": \"string\",\n" - + " \"addressLine1\": \"string\",\n" - + " \"addressLine2\": \"string\",\n" - + " \"landmark\": \"string\",\n" - + " \"city\": \"string\",\n" - + " \"pincode\": \"string\",\n" - + " \"buildingName\": \"string\",\n" - + " \"street\": \"string\",\n" - + " \"locality\": {\n" - + " \"code\": \"string\",\n" - + " \"name\": \"string\",\n" - + " \"label\": \"string\",\n" - + " \"latitude\": \"string\",\n" - + " \"longitude\": \"string\",\n" - + " \"children\": [\n" - + " \"string\"\n" - + " ],\n" - + " \"materializedPath\": \"string\"\n" - + " }\n" - + " },\n" - + " \"additionalFields\": {\n" - + " \"schema\": \"HOUSEHOLD\",\n" - + " \"version\": 2,\n" - + " \"fields\": [\n" - + " {\n" - + " \"key\": \"height\",\n" - + " \"value\": \"180\"\n" - + " }\n" - + " ]\n" - + " },\n" - + " \"isDeleted\": true,\n" - + " \"rowVersion\": 0,\n" - + " \"auditDetails\": {\n" - + " \"createdBy\": \"string\",\n" - + " \"lastModifiedBy\": \"string\",\n" - + " \"createdTime\": 0,\n" - + " \"lastModifiedTime\": 0\n" - + " },\n" - + " \"status\": \"DELIVERED\"\n" - + " }\n" - + " ],\n" - + " \"SideEffects\": [\n" - + " {\n" - + " \"id\": \"string\",\n" - + " \"clientReferenceId\": \"string\",\n" - + " \"tenantId\": \"tenantA\",\n" - + " \"taskId\": \"string\",\n" - + " \"taskClientReferenceId\": \"R-ID-1\",\n" - + " \"projectBeneficiaryId\": \"string\",\n" - + " \"projectBeneficiaryClientReferenceId\": \"string\",\n" - + " \"symptoms\": [\n" - + " \"string\"\n" - + " ],\n" - + " \"additionalFields\": {\n" - + " \"schema\": \"HOUSEHOLD\",\n" - + " \"version\": 2,\n" - + " \"fields\": [\n" - + " {\n" - + " \"key\": \"height\",\n" - + " \"value\": \"180\"\n" - + " }\n" - + " ]\n" - + " },\n" - + " \"isDeleted\": true,\n" - + " \"rowVersion\": 0,\n" - + " \"auditDetails\": {\n" - + " \"createdBy\": \"string\",\n" - + " \"lastModifiedBy\": \"string\",\n" - + " \"createdTime\": 0,\n" - + " \"lastModifiedTime\": 0\n" - + " },\n" - + " \"clientAuditDetails\": {\n" - + " \"createdBy\": \"string\",\n" - + " \"lastModifiedBy\": \"string\",\n" - + " \"createdTime\": 0,\n" - + " \"lastModifiedTime\": 0\n" - + " }\n" - + " }\n" - + " ],\n" - + " \"Referrals\": [\n" - + " {\n" - + " \"id\": \"string\",\n" - + " \"clientReferenceId\": \"string\",\n" - + " \"tenantId\": \"tenantA\",\n" - + " \"projectBeneficiaryId\": \"string\",\n" - + " \"projectBeneficiaryClientReferenceId\": \"string\",\n" - + " \"referrerId\": \"string\",\n" - + " \"recipientId\": \"string\",\n" - + " \"recipientType\": \"string\",\n" - + " \"reasons\": [\n" - + " \"string\"\n" - + " ],\n" - + " \"sideEffect\": {\n" - + " \"id\": \"string\",\n" - + " \"clientReferenceId\": \"string\",\n" - + " \"tenantId\": \"tenantA\",\n" - + " \"taskId\": \"string\",\n" - + " \"taskClientReferenceId\": \"R-ID-1\",\n" - + " \"projectBeneficiaryId\": \"string\",\n" - + " \"projectBeneficiaryClientReferenceId\": \"string\",\n" - + " \"symptoms\": [\n" - + " \"string\"\n" - + " ],\n" - + " \"additionalFields\": {\n" - + " \"schema\": \"HOUSEHOLD\",\n" - + " \"version\": 2,\n" - + " \"fields\": [\n" - + " {\n" - + " \"key\": \"height\",\n" - + " \"value\": \"180\"\n" - + " }\n" - + " ]\n" - + " },\n" - + " \"isDeleted\": true,\n" - + " \"rowVersion\": 0,\n" - + " \"auditDetails\": {\n" - + " \"createdBy\": \"string\",\n" - + " \"lastModifiedBy\": \"string\",\n" - + " \"createdTime\": 0,\n" - + " \"lastModifiedTime\": 0\n" - + " },\n" - + " \"clientAuditDetails\": {\n" - + " \"createdBy\": \"string\",\n" - + " \"lastModifiedBy\": \"string\",\n" - + " \"createdTime\": 0,\n" - + " \"lastModifiedTime\": 0\n" - + " }\n" - + " },\n" - + " \"additionalFields\": {\n" - + " \"schema\": \"HOUSEHOLD\",\n" - + " \"version\": 2,\n" - + " \"fields\": [\n" - + " {\n" - + " \"key\": \"height\",\n" - + " \"value\": \"180\"\n" - + " }\n" - + " ]\n" - + " },\n" - + " \"isDeleted\": true,\n" - + " \"rowVersion\": 0,\n" - + " \"auditDetails\": {\n" - + " \"createdBy\": \"string\",\n" - + " \"lastModifiedBy\": \"string\",\n" - + " \"createdTime\": 0,\n" - + " \"lastModifiedTime\": 0\n" - + " },\n" - + " \"clientAuditDetails\": {\n" - + " \"createdBy\": \"string\",\n" - + " \"lastModifiedBy\": \"string\",\n" - + " \"createdTime\": 0,\n" - + " \"lastModifiedTime\": 0\n" - + " }\n" - + " }\n" - + " ]\n" - + " }\n" - + "}"); + return ResponseEntity.status(HttpStatus.ACCEPTED).body(response); } } diff --git a/health-services/referralmanagement/src/main/resources/application.properties b/health-services/referralmanagement/src/main/resources/application.properties index 3177ede912f..5f82d4448bc 100644 --- a/health-services/referralmanagement/src/main/resources/application.properties +++ b/health-services/referralmanagement/src/main/resources/application.properties @@ -84,19 +84,20 @@ egov.facility.host=http://localhost:8083 egov.search.facility.url=/facility/v1/_search # HOUSEHOLD SERVICE -egov.household.host= +egov.household.host=http://localhost:8081 egov.search.household.url=/household/v1/_search +egov.search.household.member.url=/household/member/v1/_search # INDIVIDUAL SERVICE -egov.individual.host= -egov.search.individual.url= +egov.individual.host=http://localhost:8085 +egov.search.individual.url=/individual/v1/_search # use the value as "egov-user" to validate against egov-user service # use the value as "individual" to validate against individual service egov.user.id.validator=individual # PROJECT SERVICE -egov.project.host=https://unified-dev.digit.org +egov.project.host=http://localhost:8084 egov.search.project.task.url=/project/task/v1/_search egov.search.project.beneficiary.url=/project/beneficiary/v1/_search egov.search.project.staff.url=/project/staff/v1/_search @@ -132,6 +133,10 @@ egov.location.context.path=/egov-location/location/v11/ egov.location.endpoint=/boundarys/_search egov.location.code.query.param=codes +#user config +egov.create.user.url=/user/_create +egov.update.user.url=/user/_update + project.document.id.verification.required=false From 389c26806627ceff17e91eebb665c81e47bafad0 Mon Sep 17 00:00:00 2001 From: kavi_elrey <25226238+kavi-egov@users.noreply.github.com> Date: Mon, 6 Nov 2023 11:22:14 +0530 Subject: [PATCH 33/41] data integrated till beneficiary --- .../repository/HouseholdRepository.java | 19 +- .../beneficiarydownsync/DownsyncCriteria.java | 2 +- .../service/DownsyncService.java | 228 ++++++++++++++++++ .../src/main/resources/application.properties | 2 +- 4 files changed, 240 insertions(+), 11 deletions(-) create mode 100644 health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java diff --git a/health-services/household/src/main/java/org/egov/household/repository/HouseholdRepository.java b/health-services/household/src/main/java/org/egov/household/repository/HouseholdRepository.java index bf7951e8804..e6e0315956f 100644 --- a/health-services/household/src/main/java/org/egov/household/repository/HouseholdRepository.java +++ b/health-services/household/src/main/java/org/egov/household/repository/HouseholdRepository.java @@ -1,6 +1,14 @@ package org.egov.household.repository; -import lombok.extern.slf4j.Slf4j; +import static org.egov.common.utils.CommonUtils.getIdMethod; + +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + import org.egov.common.data.query.builder.GenericQueryBuilder; import org.egov.common.data.query.builder.QueryFieldChecker; import org.egov.common.data.query.builder.SelectQueryBuilder; @@ -17,14 +25,7 @@ import org.springframework.stereotype.Repository; import org.springframework.util.ReflectionUtils; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Collectors; - -import static org.egov.common.utils.CommonUtils.getIdMethod; +import lombok.extern.slf4j.Slf4j; @Repository @Slf4j diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java index 97a7bf53c18..cde6a1c3e50 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java @@ -29,6 +29,6 @@ public class DownsyncCriteria { @Default private Integer limit = 50; - private Integer totalCount; + private Long totalCount; } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java new file mode 100644 index 00000000000..d0c644e0bdf --- /dev/null +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java @@ -0,0 +1,228 @@ +package org.egov.referralmanagement.service; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.egov.common.contract.request.RequestInfo; +import org.egov.common.http.client.ServiceRequestClient; +import org.egov.common.models.household.Household; +import org.egov.common.models.household.HouseholdBulkResponse; +import org.egov.common.models.household.HouseholdMember; +import org.egov.common.models.household.HouseholdMemberBulkResponse; +import org.egov.common.models.household.HouseholdMemberSearch; +import org.egov.common.models.household.HouseholdMemberSearchRequest; +import org.egov.common.models.household.HouseholdSearch; +import org.egov.common.models.household.HouseholdSearchRequest; +import org.egov.common.models.individual.Individual; +import org.egov.common.models.individual.IndividualBulkResponse; +import org.egov.common.models.individual.IndividualSearch; +import org.egov.common.models.individual.IndividualSearchRequest; +import org.egov.common.models.project.BeneficiaryBulkResponse; +import org.egov.common.models.project.BeneficiarySearchRequest; +import org.egov.common.models.project.ProjectBeneficiary; +import org.egov.common.models.project.ProjectBeneficiarySearch; +import org.egov.common.models.project.Task; +import org.egov.common.models.referralmanagement.Referral; +import org.egov.common.models.referralmanagement.beneficiarydownsync.Downsync; +import org.egov.common.models.referralmanagement.beneficiarydownsync.DownsyncCriteria; +import org.egov.common.models.referralmanagement.beneficiarydownsync.DownsyncRequest; +import org.egov.referralmanagement.config.ReferralManagementConfiguration; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +@Service +public class DownsyncService { + + private ServiceRequestClient restClient; + + private ReferralManagementConfiguration configs; + + private NamedParameterJdbcTemplate jdbcTemplate; + + @Autowired + public DownsyncService(ServiceRequestClient serviceRequestClient, + ReferralManagementConfiguration referralManagementConfiguration, + NamedParameterJdbcTemplate jdbcTemplate) { + + this.restClient = serviceRequestClient; + this.configs = referralManagementConfiguration; + this.jdbcTemplate = jdbcTemplate; + } + + public Downsync prepareDownsyncData(DownsyncRequest downsyncRequest) { + + + Downsync downsync = new Downsync(); + downsync.setDownsyncCriteria(downsyncRequest.getDownsyncCriteria()); + /* search household */ + List householdIds = searchHouseholds(downsyncRequest, downsync); + + /* search household member using household ids */ + Set individualIds = searchMembers(downsyncRequest, downsync, householdIds); + + /* search individuals using individual ids */ + searchIndividuals(downsyncRequest, downsync, individualIds); + + /* search beneficiary using individual ids */ + List beneficiaryUuids = searchBeneficiaries(downsyncRequest, downsync, individualIds); + + // search Tasks + List tasks = new ArrayList<>(); + + List taskIds = tasks.stream().map(Task::getId).collect(Collectors.toList()); + + // search side effect FIXME - tasks id array search not available + + // referral search - project beneficiary id + List referrals = null; + + + + return downsync; + } + + + private List searchHouseholds(DownsyncRequest downsyncRequest, Downsync downsync) { + + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); + + StringBuilder householdUrl = new StringBuilder(configs.getHouseholdHost()) + .append(configs.getHouseholdSearchUrl()); + householdUrl = appendUrlParams(householdUrl, criteria); + + HouseholdSearch householdSearch = HouseholdSearch.builder() + .localityCode(criteria.getLocality()) + .build(); + + HouseholdSearchRequest searchRequest = HouseholdSearchRequest.builder() + .household(householdSearch) + .requestInfo(requestInfo) + .build(); + + HouseholdBulkResponse res = restClient.fetchResult(householdUrl, searchRequest, HouseholdBulkResponse.class); + List households = res.getHouseholds(); + downsync.setHouseholds(households); + downsync.getDownsyncCriteria().setTotalCount(res.getTotalCount()); + + if(CollectionUtils.isEmpty(households)) + return Collections.emptyList(); + + return households.stream().map(Household::getId).collect(Collectors.toList()); + } + + private void searchIndividuals(DownsyncRequest downsyncRequest, Downsync downsync, Set individualIds) { + + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); + + StringBuilder url = new StringBuilder(configs.getIndividualHost()) + .append(configs.getIndividualSearchUrl()); + url = appendUrlParams(url, criteria); + + IndividualSearch individualSearch = IndividualSearch.builder() + .id(new ArrayList<>(individualIds)) + .build(); + + IndividualSearchRequest searchRequest = IndividualSearchRequest.builder() + .individual(individualSearch) + .requestInfo(requestInfo) + .build(); + + List individuals = restClient.fetchResult(url, searchRequest, IndividualBulkResponse.class).getIndividual(); + downsync.setIndividuals(individuals); + } + + /** + * + * @param downsyncRequest + * @param householdIds + * @return + */ + private Set searchMembers(DownsyncRequest downsyncRequest, Downsync downsync, List householdIds) { + + StringBuilder memberUrl = new StringBuilder(configs.getHouseholdHost()) + .append(configs.getHouseholdMemberSearchUrl()); + appendUrlParams(memberUrl, downsyncRequest.getDownsyncCriteria()); + + String memberIdsquery = "SELECT id from HOUSEHOLD_MEMBER where householdId IN (:householdIds)"; + + Map paramMap = new HashMap<>(); + paramMap.put("householdIds", householdIds); + + /* FIXME SHOULD BE REMOVED AND SEARCH SHOULD BE enhanced with list of household ids*/ + List memeberids = jdbcTemplate.queryForList(memberIdsquery, paramMap, String.class); + + + HouseholdMemberSearch memberSearch = HouseholdMemberSearch.builder() + .id(memeberids) + .build(); + + HouseholdMemberSearchRequest searchRequest = HouseholdMemberSearchRequest.builder() + .householdMemberSearch(memberSearch) + .requestInfo(downsyncRequest.getRequestInfo()) + .build(); + + List members = restClient.fetchResult(memberUrl, searchRequest, HouseholdMemberBulkResponse.class).getHouseholdMembers(); + downsync.setHouseholdMembers(members); + + return members.stream().map(HouseholdMember::getIndividualId).collect(Collectors.toSet()); + } + + + private List searchBeneficiaries(DownsyncRequest downsyncRequest, Downsync downsync, Set individualIds) { + + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); + + StringBuilder url = new StringBuilder(configs.getProjectHost()) + .append(configs.getProjectBeneficiarySearchUrl()); + url = appendUrlParams(url, criteria); + + String beneficiaryIdQuery = "SELECT id from PROJECT_BENEFICIARY where beneficiaryId IN (:beneficiaryIds)"; + + Map paramMap = new HashMap<>(); + paramMap.put("beneficiaryIds", individualIds); + + /* FIXME SHOULD BE REMOVED AND SEARCH SHOULD BE enhanced with list of beneficiary ids*/ + List ids = jdbcTemplate.queryForList(beneficiaryIdQuery, paramMap, String.class); + + ProjectBeneficiarySearch search = ProjectBeneficiarySearch.builder() + .id(ids) + .build(); + + BeneficiarySearchRequest searchRequest = BeneficiarySearchRequest.builder() + .projectBeneficiary(search) + .requestInfo(requestInfo) + .build(); + + List beneficiaries = restClient.fetchResult(url, searchRequest, BeneficiaryBulkResponse.class).getProjectBeneficiaries(); + downsync.setProjectBeneficiaries(beneficiaries); + + return ids; + } + + /** + * append url params + * + * @param url + * @param criteria + * @return + */ + private StringBuilder appendUrlParams(StringBuilder url, DownsyncCriteria criteria) { + + return url.append("?tenantId=") + .append(criteria.getTenantId()) + .append("&offset=") + .append(criteria.getOffset()) + .append("&limit=") + .append(criteria.getLimit()); + } +} diff --git a/health-services/referralmanagement/src/main/resources/application.properties b/health-services/referralmanagement/src/main/resources/application.properties index 5f82d4448bc..22830c099f1 100644 --- a/health-services/referralmanagement/src/main/resources/application.properties +++ b/health-services/referralmanagement/src/main/resources/application.properties @@ -89,7 +89,7 @@ egov.search.household.url=/household/v1/_search egov.search.household.member.url=/household/member/v1/_search # INDIVIDUAL SERVICE -egov.individual.host=http://localhost:8085 +egov.individual.host=http://localhost:8086 egov.search.individual.url=/individual/v1/_search # use the value as "egov-user" to validate against egov-user service From fb30b0ed0996d6b3348196df80490a22de4b9e16 Mon Sep 17 00:00:00 2001 From: "kavi_elrey@1993" <25226238+kavi-egov@users.noreply.github.com> Date: Mon, 6 Nov 2023 11:28:42 +0530 Subject: [PATCH 34/41] Update CHANGELOG.md --- .../libraries/health-services-models/CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/health-services/libraries/health-services-models/CHANGELOG.md b/health-services/libraries/health-services-models/CHANGELOG.md index b552656d610..738db0d8cdf 100644 --- a/health-services/libraries/health-services-models/CHANGELOG.md +++ b/health-services/libraries/health-services-models/CHANGELOG.md @@ -1,5 +1,10 @@ All notable changes to this module will be documented in this file. +## 1.0.10 +- downsync models added +- boundarycode changed to localityCode in household search + + ## 1.0.9 - stock models updated with sender and receiver information fields. From 9b71e48cbc3518b82b2ef64592150e844148fd1f Mon Sep 17 00:00:00 2001 From: "kavi_elrey@1993" <25226238+kavi-egov@users.noreply.github.com> Date: Mon, 6 Nov 2023 11:29:35 +0530 Subject: [PATCH 35/41] Delete health-services/project/src/main/resources/project-persistor.yml --- .../src/main/resources/project-persistor.yml | 588 ------------------ 1 file changed, 588 deletions(-) delete mode 100644 health-services/project/src/main/resources/project-persistor.yml diff --git a/health-services/project/src/main/resources/project-persistor.yml b/health-services/project/src/main/resources/project-persistor.yml deleted file mode 100644 index a93c20aefda..00000000000 --- a/health-services/project/src/main/resources/project-persistor.yml +++ /dev/null @@ -1,588 +0,0 @@ -serviceMaps: - serviceName: project - mappings: - - version: 1.0 - description: Saves a project staff - fromTopic: save-project-staff-topic - isTransaction: true - queryMaps: - - query: INSERT INTO project_staff (id, tenantId, projectId, staffId, startDate, endDate, additionalDetails, createdBy, lastModifiedBy, createdTime, lastModifiedTime, rowVersion, isDeleted) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?); - basePath: $.* - jsonMaps: - - jsonPath: $.*.id - - jsonPath: $.*.tenantId - - jsonPath: $.*.projectId - - jsonPath: $.*.userId - - jsonPath: $.*.startDate - - jsonPath: $.*.endDate - - jsonPath: $.*.additionalFields - type: JSON - dbType: JSONB - - jsonPath: $.*.auditDetails.createdBy - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.createdTime - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - - version: 1.0 - description: Update Project Staff - fromTopic: update-project-staff-topic - isTransaction: true - queryMaps: - - query: UPDATE project_staff SET projectId=?, staffId=?, startDate=?, endDate=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id = ? - basePath: $.* - jsonMaps: - - jsonPath: $.*.projectId - - jsonPath: $.*.userId - - jsonPath: $.*.startDate - - jsonPath: $.*.endDate - - jsonPath: $.*.additionalFields - type: JSON - dbType: JSONB - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - jsonPath: $.*.id - - - version: 1.0 - description: Deletes Project Staff - fromTopic: delete-project-staff-topic - isTransaction: true - queryMaps: - - query: UPDATE project_staff SET lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=?, additionalDetails=? WHERE id=?; - basePath: $.* - jsonMaps: - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - jsonPath: $.*.additionalFields - type: JSON - dbType: JSONB - - jsonPath: $.*.id - - - version: 1.0 - description: Saves a project beneficiary - fromTopic: save-project-beneficiary-topic - isTransaction: true - queryMaps: - - query: INSERT INTO project_beneficiary (id, tenantId, projectId, beneficiaryId, clientReferenceId, beneficiaryClientReferenceId, dateOfRegistration, additionalDetails, createdBy, lastModifiedBy, createdTime, lastModifiedTime, rowVersion, isDeleted, clientCreatedTime, clientLastModifiedTime, clientCreatedBy, clientLastModifiedBy, tag) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); - basePath: $.* - jsonMaps: - - jsonPath: $.*.id - - jsonPath: $.*.tenantId - - jsonPath: $.*.projectId - - jsonPath: $.*.beneficiaryId - - jsonPath: $.*.clientReferenceId - - jsonPath: $.*.beneficiaryClientReferenceId - - jsonPath: $.*.dateOfRegistration - - jsonPath: $.*.additionalFields - type: JSON - dbType: JSONB - - jsonPath: $.*.auditDetails.createdBy - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.createdTime - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - jsonPath: $.*.clientAuditDetails.createdTime - - jsonPath: $.*.clientAuditDetails.lastModifiedTime - - jsonPath: $.*.clientAuditDetails.createdBy - - jsonPath: $.*.clientAuditDetails.lastModifiedBy - - jsonPath: $.*.tag - - - version: 1.0 - description: Update Project Beneficiary - fromTopic: update-project-beneficiary-topic - isTransaction: true - queryMaps: - - query: UPDATE project_beneficiary SET projectId=?, beneficiaryId=?, clientReferenceId=?, beneficiaryClientReferenceId=?, dateOfRegistration=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=?, clientLastModifiedTime = ?, clientLastModifiedBy = ?, tag=? WHERE id = ? AND isDeleted=false - basePath: $.* - jsonMaps: - - jsonPath: $.*.projectId - - jsonPath: $.*.beneficiaryId - - jsonPath: $.*.clientReferenceId - - jsonPath: $.*.beneficiaryClientReferenceId - - jsonPath: $.*.dateOfRegistration - - jsonPath: $.*.additionalFields - type: JSON - dbType: JSONB - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - jsonPath: $.*.clientAuditDetails.lastModifiedTime - - jsonPath: $.*.clientAuditDetails.lastModifiedBy - - jsonPath: $.*.tag - - jsonPath: $.*.id - - - version: 1.0 - description: Deletes Project Beneficiaries - fromTopic: delete-project-beneficiary-topic - isTransaction: true - queryMaps: - - query: UPDATE project_beneficiary SET lastModifiedBy=?, lastModifiedTime=?, clientLastModifiedTime = ?, clientLastModifiedBy = ?, rowVersion=?, isDeleted=?, additionalDetails=? WHERE id=?; - basePath: $.* - jsonMaps: - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.clientAuditDetails.lastModifiedTime - - jsonPath: $.*.clientAuditDetails.lastModifiedBy - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - jsonPath: $.*.additionalFields - type: JSON - dbType: JSONB - - jsonPath: $.*.id - - - version: 1.0 - name: Projects - description: Persists project details in project table - fromTopic: save-project - isTransaction: true - queryMaps: - - query: INSERT INTO project(id,tenantId,projectNumber,name,projectType,projectTypeId,projectSubType,department,description,referenceId,startDate,endDate,isTaskEnabled,parent,projectHierarchy,natureOfWork,additionalDetails,isDeleted,rowVersion,createdBy,lastModifiedBy,createdTime,lastModifiedTime) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); - basePath: $.Projects.* - jsonMaps: - - jsonPath: $.Projects.*.id - - - jsonPath: $.Projects.*.tenantId - - - jsonPath: $.Projects.*.projectNumber - - - jsonPath: $.Projects.*.name - - - jsonPath: $.Projects.*.projectType - - - jsonPath: $.Projects.*.projectTypeId - - - jsonPath: $.Projects.*.projectSubType - - - jsonPath: $.Projects.*.department - - - jsonPath: $.Projects.*.description - - - jsonPath: $.Projects.*.referenceID - - - jsonPath: $.Projects.*.startDate - - - jsonPath: $.Projects.*.endDate - - - jsonPath: $.Projects.*.isTaskEnabled - - - jsonPath: $.Projects.*.parent - - - jsonPath: $.Projects.*.projectHierarchy - - - jsonPath: $.Projects.*.natureOfWork - - - jsonPath: $.Projects.*.additionalDetails - type: JSON - dbType: JSONB - - - jsonPath: $.Projects.*.isDeleted - - - jsonPath: $.Projects.*.rowVersion - - - jsonPath: $.Projects.*.auditDetails.createdBy - - - jsonPath: $.Projects.*.auditDetails.lastModifiedBy - - - jsonPath: $.Projects.*.auditDetails.createdTime - - - jsonPath: $.Projects.*.auditDetails.lastModifiedTime - - - - query: INSERT INTO project_address(id,tenantId,projectId,doorNo,latitude,longitude,locationAccuracy,type,addressLine1,addressLine2,landmark,city,pinCode,buildingName,street,boundaryType,boundary) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); - basePath: $.Projects.*.address - jsonMaps: - - jsonPath: $.Projects.*.address.id - - - jsonPath: $.Projects.*.address.tenantId - - - jsonPath: $.Projects.*.id - - - jsonPath: $.Projects.*.address.doorNo - - - jsonPath: $.Projects.*.address.latitude - - - jsonPath: $.Projects.*.address.longitude - - - jsonPath: $.Projects.*.address.locationAccuracy - - - jsonPath: $.Projects.*.address.type - - - jsonPath: $.Projects.*.address.addressLine1 - - - jsonPath: $.Projects.*.address.addressLine2 - - - jsonPath: $.Projects.*.address.landmark - - - jsonPath: $.Projects.*.address.city - - - jsonPath: $.Projects.*.address.pincode - - - jsonPath: $.Projects.*.address.buildingName - - - jsonPath: $.Projects.*.address.street - - - jsonPath: $.Projects.*.address.boundaryType - - - jsonPath: $.Projects.*.address.boundary - - - - query: INSERT INTO project_target(id,projectId,beneficiaryType,totalNo,targetNo,isDeleted,createdBy,lastModifiedBy,createdTime,lastModifiedTime) VALUES (?,?,?,?,?,?,?,?,?,?); - basePath: $.Projects.*.targets.* - jsonMaps: - - jsonPath: $.Projects.*.targets.*.id - - - jsonPath: $.Projects[*][?({id} in @.targets[*].id)].id - - - jsonPath: $.Projects.*.targets.*.beneficiaryType - - - jsonPath: $.Projects.*.targets.*.totalNo - - - jsonPath: $.Projects.*.targets.*.targetNo - - - jsonPath: $.Projects.*.targets.*.isDeleted - - - jsonPath: $.Projects.*.targets.*.auditDetails.createdBy - - - jsonPath: $.Projects.*.targets.*.auditDetails.lastModifiedBy - - - jsonPath: $.Projects.*.targets.*.auditDetails.createdTime - - - jsonPath: $.Projects.*.targets.*.auditDetails.lastModifiedTime - - - - query: INSERT INTO project_document(id,projectId,documentType,filestoreId,documentUid,additionalDetails,status,createdBy,lastModifiedBy,createdTime,lastModifiedTime) VALUES (?,?,?,?,?,?,?,?,?,?,?); - basePath: $.Projects.*.documents.* - jsonMaps: - - jsonPath: $.Projects.*.documents.*.id - - - jsonPath: $.Projects[*][?({id} in @.documents[*].id)].id - - - jsonPath: $.Projects.*.documents.*.documentType - - - jsonPath: $.Projects.*.documents.*.fileStore - - - jsonPath: $.Projects.*.documents.*.documentUid - - - jsonPath: $.Projects.*.additionalDetails - type: JSON - dbType: JSONB - - - jsonPath: $.Projects.*.documents.*.status - - - jsonPath: $.Projects.*.documents.*.auditDetails.createdBy - - - jsonPath: $.Projects.*.documents.*.auditDetails.lastModifiedBy - - - jsonPath: $.Projects.*.documents.*.auditDetails.createdTime - - - jsonPath: $.Projects.*.documents.*.auditDetails.lastModifiedTime - - - - version: 1.0 - name: Projects - description: Updates project details in project table - fromTopic: update-project - isTransaction: true - queryMaps: - - query: UPDATE project SET name = ?, projectType = ?, projectTypeId = ?, projectSubType = ?, department = ?, description = ?, referenceId = ?, startDate = ?, endDate = ?, isTaskEnabled = ?, natureOfWork = ?, additionalDetails = ?, isDeleted = ?, rowVersion = ?, lastModifiedBy = ?, lastModifiedTime = ? WHERE id = ?; - basePath: $.Projects.* - jsonMaps: - - - jsonPath: $.Projects.*.name - - - jsonPath: $.Projects.*.projectType - - - jsonPath: $.Projects.*.projectTypeId - - - jsonPath: $.Projects.*.projectSubType - - - jsonPath: $.Projects.*.department - - - jsonPath: $.Projects.*.description - - - jsonPath: $.Projects.*.referenceID - - - jsonPath: $.Projects.*.startDate - - - jsonPath: $.Projects.*.endDate - - - jsonPath: $.Projects.*.isTaskEnabled - - - jsonPath: $.Projects.*.natureOfWork - - - jsonPath: $.Projects.*.additionalDetails - type: JSON - dbType: JSONB - - - jsonPath: $.Projects.*.isDeleted - - - jsonPath: $.Projects.*.rowVersion - - - jsonPath: $.Projects.*.auditDetails.lastModifiedBy - - - jsonPath: $.Projects.*.auditDetails.lastModifiedTime - - - jsonPath: $.Projects.*.id - - - - query: UPDATE project_address SET doorNo = ?, latitude=?, longitude=?, locationAccuracy=?, type=?, addressLine1=?, addressLine2=?, landmark=?, city=?, pinCode=?, buildingName=?, street=?, boundaryType=?, boundary=? WHERE id=?; - basePath: $.Projects.*.address - jsonMaps: - - - jsonPath: $.Projects.*.address.doorNo - - - jsonPath: $.Projects.*.address.latitude - - - jsonPath: $.Projects.*.address.longitude - - - jsonPath: $.Projects.*.address.locationAccuracy - - - jsonPath: $.Projects.*.address.type - - - jsonPath: $.Projects.*.address.addressLine1 - - - jsonPath: $.Projects.*.address.addressLine2 - - - jsonPath: $.Projects.*.address.landmark - - - jsonPath: $.Projects.*.address.city - - - jsonPath: $.Projects.*.address.pincode - - - jsonPath: $.Projects.*.address.buildingName - - - jsonPath: $.Projects.*.address.street - - - jsonPath: $.Projects.*.address.boundaryType - - - jsonPath: $.Projects.*.address.boundary - - - jsonPath: $.Projects.*.address.id - - - - query: INSERT INTO project_target(id,projectId,beneficiaryType,totalNo,targetNo,isDeleted,createdBy,lastModifiedBy,createdTime,lastModifiedTime) VALUES (?,?,?,?,?,?,?,?,?,?) ON CONFLICT (id) DO UPDATE SET beneficiaryType = ?, totalNo =?, targetNo=?, isDeleted=?, lastModifiedBy=?, lastModifiedTime=?; - basePath: $.Projects.*.targets.* - jsonMaps: - - - jsonPath: $.Projects.*.targets.*.id - - - jsonPath: $.Projects[*][?({id} in @.targets[*].id)].id - - - jsonPath: $.Projects.*.targets.*.beneficiaryType - - - jsonPath: $.Projects.*.targets.*.totalNo - - - jsonPath: $.Projects.*.targets.*.targetNo - - - jsonPath: $.Projects.*.targets.*.isDeleted - - - jsonPath: $.Projects.*.targets.*.auditDetails.createdBy - - - jsonPath: $.Projects.*.targets.*.auditDetails.lastModifiedBy - - - jsonPath: $.Projects.*.targets.*.auditDetails.createdTime - - - jsonPath: $.Projects.*.targets.*.auditDetails.lastModifiedTime - - - jsonPath: $.Projects.*.targets.*.beneficiaryType - - - jsonPath: $.Projects.*.targets.*.totalNo - - - jsonPath: $.Projects.*.targets.*.targetNo - - - jsonPath: $.Projects.*.targets.*.isDeleted - - - jsonPath: $.Projects.*.targets.*.auditDetails.lastModifiedBy - - - jsonPath: $.Projects.*.targets.*.auditDetails.lastModifiedTime - - - - query: INSERT INTO project_document(id,projectId,documentType,filestoreId,documentUid,additionalDetails,status,createdBy,lastModifiedBy,createdTime,lastModifiedTime) VALUES (?,?,?,?,?,?,?,?,?,?,?) ON CONFLICT (id) DO UPDATE SET documentType=?, filestoreId=?, documentUid=?, additionalDetails=?, status=?, lastModifiedBy=?, lastModifiedTime=?; - basePath: $.Projects.*.documents.* - jsonMaps: - - - jsonPath: $.Projects.*.documents.*.id - - - jsonPath: $.Projects[*][?({id} in @.documents[*].id)].id - - - jsonPath: $.Projects.*.documents.*.documentType - - - jsonPath: $.Projects.*.documents.*.fileStore - - - jsonPath: $.Projects.*.documents.*.documentUid - - - jsonPath: $.Projects.*.additionalDetails - type: JSON - dbType: JSONB - - - jsonPath: $.Projects.*.documents.*.status - - - jsonPath: $.Projects.*.documents.*.auditDetails.createdBy - - - jsonPath: $.Projects.*.documents.*.auditDetails.lastModifiedBy - - - jsonPath: $.Projects.*.documents.*.auditDetails.createdTime - - - jsonPath: $.Projects.*.documents.*.auditDetails.lastModifiedTime - - - jsonPath: $.Projects.*.documents.*.documentType - - - jsonPath: $.Projects.*.documents.*.fileStore - - - jsonPath: $.Projects.*.documents.*.documentUid - - - jsonPath: $.Projects.*.additionalDetails - type: JSON - dbType: JSONB - - - jsonPath: $.Projects.*.documents.*.status - - - jsonPath: $.Projects.*.documents.*.auditDetails.lastModifiedBy - - - jsonPath: $.Projects.*.documents.*.auditDetails.lastModifiedTime - - - - version: 1.0 - description: Saves a project resourcce - fromTopic: save-project-resource-topic - isTransaction: true - queryMaps: - - query: INSERT INTO project_resource (id, tenantId, projectId, productVariantId, isBaseUnitVariant, startDate, endDate, type, createdBy, lastModifiedBy, createdTime, lastModifiedTime, rowVersion, isDeleted) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?); - basePath: $.* - jsonMaps: - - jsonPath: $.*.id - - jsonPath: $.*.tenantId - - jsonPath: $.*.projectId - - jsonPath: $.*.resource.productVariantId - - jsonPath: $.*.resource.isBaseUnitVariant - - jsonPath: $.*.startDate - - jsonPath: $.*.endDate - - jsonPath: $.*.resource.type - - jsonPath: $.*.auditDetails.createdBy - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.createdTime - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - - version: 1.0 - description: Update a project resourcce - fromTopic: update-project-resource-topic - isTransaction: true - queryMaps: - - query: UPDATE project_resource SET tenantId=?, projectId=?, productVariantId=?, isBaseUnitVariant=?, startDate=?, endDate=?, type=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id = ? - basePath: $.* - jsonMaps: - - jsonPath: $.*.tenantId - - jsonPath: $.*.projectId - - jsonPath: $.*.resource.productVariantId - - jsonPath: $.*.resource.isBaseUnitVariant - - jsonPath: $.*.startDate - - jsonPath: $.*.endDate - - jsonPath: $.*.resource.type - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - jsonPath: $.*.id - - - version: 1.0 - description: Delete a project resourcce - fromTopic: delete-project-resource-topic - isTransaction: true - queryMaps: - - query: UPDATE project_resource SET lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=?, additionalDetails=? WHERE id = ? - basePath: $.* - jsonMaps: - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - jsonPath: $.*.additionalFields - type: JSON - dbType: JSONB - - jsonPath: $.*.id - - - version: 1.0 - description: Saves a project facility - fromTopic: save-project-facility-topic - isTransaction: true - queryMaps: - - - query: INSERT INTO project_facility (id, tenantId, projectId, facilityId, additionalDetails, createdBy, lastModifiedBy, createdTime, lastModifiedTime, rowVersion, isDeleted) VALUES (?,?,?,?,?,?,?,?,?,?,?); - basePath: $.* - jsonMaps: - - jsonPath: $.*.id - - - jsonPath: $.*.tenantId - - - jsonPath: $.*.projectId - - - jsonPath: $.*.facilityId - - - jsonPath: $.*.additionalFields - type: JSON - dbType: JSONB - - - jsonPath: $.*.auditDetails.createdBy - - - jsonPath: $.*.auditDetails.lastModifiedBy - - - jsonPath: $.*.auditDetails.createdTime - - - jsonPath: $.*.auditDetails.lastModifiedTime - - - jsonPath: $.*.rowVersion - - - jsonPath: $.*.isDeleted - - - version: 1.0 - description: Update Project Facility - fromTopic: update-project-facility-topic - isTransaction: true - queryMaps: - - - query: UPDATE project_facility SET projectId=?, facilityId=?, additionalDetails=?, lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=? WHERE id = ? - basePath: $.* - jsonMaps: - - jsonPath: $.*.projectId - - - jsonPath: $.*.facilityId - - - jsonPath: $.*.additionalFields - type: JSON - dbType: JSONB - - - jsonPath: $.*.auditDetails.lastModifiedBy - - - jsonPath: $.*.auditDetails.lastModifiedTime - - - jsonPath: $.*.rowVersion - - - jsonPath: $.*.isDeleted - - - jsonPath: $.*.id - - - version: 1.0 - description: Deletes Project Facility - fromTopic: delete-project-facility-topic - isTransaction: true - queryMaps: - - query: UPDATE project_facility SET lastModifiedBy=?, lastModifiedTime=?, rowVersion=?, isDeleted=?, additionalDetails=? WHERE id=?; - basePath: $.* - jsonMaps: - - jsonPath: $.*.auditDetails.lastModifiedBy - - jsonPath: $.*.auditDetails.lastModifiedTime - - jsonPath: $.*.rowVersion - - jsonPath: $.*.isDeleted - - jsonPath: $.*.additionalFields - type: JSON - dbType: JSONB - - jsonPath: $.*.id \ No newline at end of file From 71e3d36d1bfaed9cece2c47a429650aa9421659d Mon Sep 17 00:00:00 2001 From: kavi_elrey <25226238+kavi-egov@users.noreply.github.com> Date: Mon, 6 Nov 2023 12:05:35 +0530 Subject: [PATCH 36/41] skip on empty result added --- .../service/DownsyncService.java | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java index d0c644e0bdf..a1beb0a4c94 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java @@ -60,23 +60,35 @@ public Downsync prepareDownsyncData(DownsyncRequest downsyncRequest) { Downsync downsync = new Downsync(); + + List householdIds = null; + Set individualIds = null; + List beneficiaryUuids = null; + List taskIds = null; + downsync.setDownsyncCriteria(downsyncRequest.getDownsyncCriteria()); /* search household */ - List householdIds = searchHouseholds(downsyncRequest, downsync); + householdIds = searchHouseholds(downsyncRequest, downsync); /* search household member using household ids */ - Set individualIds = searchMembers(downsyncRequest, downsync, householdIds); + individualIds = searchMembers(downsyncRequest, downsync, householdIds); - /* search individuals using individual ids */ - searchIndividuals(downsyncRequest, downsync, individualIds); - /* search beneficiary using individual ids */ - List beneficiaryUuids = searchBeneficiaries(downsyncRequest, downsync, individualIds); + if(!CollectionUtils.isEmpty(individualIds)) { + + /* search individuals using individual ids */ + searchIndividuals(downsyncRequest, downsync, individualIds); + + /* search beneficiary using individual ids */ + beneficiaryUuids = searchBeneficiaries(downsyncRequest, downsync, individualIds); + } - // search Tasks - List tasks = new ArrayList<>(); - - List taskIds = tasks.stream().map(Task::getId).collect(Collectors.toList()); + /* search tasks using benegiciary uuids */ + if (!CollectionUtils.isEmpty(beneficiaryUuids)) { + + List tasks = new ArrayList<>(); + taskIds = tasks.stream().map(Task::getId).collect(Collectors.toList()); + } // search side effect FIXME - tasks id array search not available @@ -194,8 +206,12 @@ private List searchBeneficiaries(DownsyncRequest downsyncRequest, Downsy /* FIXME SHOULD BE REMOVED AND SEARCH SHOULD BE enhanced with list of beneficiary ids*/ List ids = jdbcTemplate.queryForList(beneficiaryIdQuery, paramMap, String.class); - ProjectBeneficiarySearch search = ProjectBeneficiarySearch.builder() + if(CollectionUtils.isEmpty(ids)) + return Collections.emptyList(); + + ProjectBeneficiarySearch search = ProjectBeneficiarySearch.builder() .id(ids) + .projectId(downsyncRequest.getDownsyncCriteria().getProjectId()) .build(); BeneficiarySearchRequest searchRequest = BeneficiarySearchRequest.builder() From 948144788be645269c627fed0c7030272a58770d Mon Sep 17 00:00:00 2001 From: kavi_elrey <25226238+kavi-egov@users.noreply.github.com> Date: Mon, 6 Nov 2023 12:07:20 +0530 Subject: [PATCH 37/41] skip on empty result added --- .../org/egov/referralmanagement/service/DownsyncService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java index a1beb0a4c94..5a8a8b97f76 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java @@ -172,7 +172,9 @@ private Set searchMembers(DownsyncRequest downsyncRequest, Downsync down /* FIXME SHOULD BE REMOVED AND SEARCH SHOULD BE enhanced with list of household ids*/ List memeberids = jdbcTemplate.queryForList(memberIdsquery, paramMap, String.class); - + if (CollectionUtils.isEmpty(memeberids)) + return Collections.emptySet(); + HouseholdMemberSearch memberSearch = HouseholdMemberSearch.builder() .id(memeberids) .build(); From 16ee8db51873eee44b44fa23824fde54bb98bc0a Mon Sep 17 00:00:00 2001 From: kavi_elrey <25226238+kavi-egov@users.noreply.github.com> Date: Mon, 6 Nov 2023 12:33:50 +0530 Subject: [PATCH 38/41] beneficary searhc based on individual clientref id added --- .../service/DownsyncService.java | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java index 5a8a8b97f76..d7e6bfe7426 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java @@ -63,6 +63,7 @@ public Downsync prepareDownsyncData(DownsyncRequest downsyncRequest) { List householdIds = null; Set individualIds = null; + List individualClientRefIds = null; List beneficiaryUuids = null; List taskIds = null; @@ -72,17 +73,18 @@ public Downsync prepareDownsyncData(DownsyncRequest downsyncRequest) { /* search household member using household ids */ individualIds = searchMembers(downsyncRequest, downsync, householdIds); + - - if(!CollectionUtils.isEmpty(individualIds)) { - + if (!CollectionUtils.isEmpty(individualIds)) { + /* search individuals using individual ids */ - searchIndividuals(downsyncRequest, downsync, individualIds); - - /* search beneficiary using individual ids */ - beneficiaryUuids = searchBeneficiaries(downsyncRequest, downsync, individualIds); + individualClientRefIds = searchIndividuals(downsyncRequest, downsync, individualIds); } - + + if (!CollectionUtils.isEmpty(individualClientRefIds)) + /* search beneficiary using individual ids */ + beneficiaryUuids = searchBeneficiaries(downsyncRequest, downsync, individualClientRefIds); + /* search tasks using benegiciary uuids */ if (!CollectionUtils.isEmpty(beneficiaryUuids)) { @@ -130,7 +132,14 @@ private List searchHouseholds(DownsyncRequest downsyncRequest, Downsync return households.stream().map(Household::getId).collect(Collectors.toList()); } - private void searchIndividuals(DownsyncRequest downsyncRequest, Downsync downsync, Set individualIds) { + /** + * + * @param downsyncRequest + * @param downsync + * @param individualIds + * @return individual ClientReferenceIds + */ + private List searchIndividuals(DownsyncRequest downsyncRequest, Downsync downsync, Set individualIds) { DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); RequestInfo requestInfo = downsyncRequest.getRequestInfo(); @@ -150,6 +159,8 @@ private void searchIndividuals(DownsyncRequest downsyncRequest, Downsync downsyn List individuals = restClient.fetchResult(url, searchRequest, IndividualBulkResponse.class).getIndividual(); downsync.setIndividuals(individuals); + + return individuals.stream().map(Individual::getClientReferenceId).collect(Collectors.toList()); } /** @@ -191,7 +202,7 @@ private Set searchMembers(DownsyncRequest downsyncRequest, Downsync down } - private List searchBeneficiaries(DownsyncRequest downsyncRequest, Downsync downsync, Set individualIds) { + private List searchBeneficiaries(DownsyncRequest downsyncRequest, Downsync downsync, List individualClientRefIds) { DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); RequestInfo requestInfo = downsyncRequest.getRequestInfo(); @@ -200,10 +211,10 @@ private List searchBeneficiaries(DownsyncRequest downsyncRequest, Downsy .append(configs.getProjectBeneficiarySearchUrl()); url = appendUrlParams(url, criteria); - String beneficiaryIdQuery = "SELECT id from PROJECT_BENEFICIARY where beneficiaryId IN (:beneficiaryIds)"; + String beneficiaryIdQuery = "SELECT id from PROJECT_BENEFICIARY where beneficiaryclientreferenceid IN (:beneficiaryIds)"; Map paramMap = new HashMap<>(); - paramMap.put("beneficiaryIds", individualIds); + paramMap.put("beneficiaryIds", individualClientRefIds); /* FIXME SHOULD BE REMOVED AND SEARCH SHOULD BE enhanced with list of beneficiary ids*/ List ids = jdbcTemplate.queryForList(beneficiaryIdQuery, paramMap, String.class); From b3c9288d54e08431bae8ed55b17a142e3c990727 Mon Sep 17 00:00:00 2001 From: kavi_elrey <25226238+kavi-egov@users.noreply.github.com> Date: Mon, 6 Nov 2023 14:47:09 +0530 Subject: [PATCH 39/41] sideeffetc, ref, task fetch added --- .../repository/ReferralRepository.java | 24 +- .../repository/SideEffectRepository.java | 26 +- .../service/DownsyncService.java | 496 +++++++++++------- .../service/ReferralManagementService.java | 36 +- .../service/SideEffectService.java | 35 +- 5 files changed, 375 insertions(+), 242 deletions(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java index 186e126cc93..10379e3577b 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java @@ -1,29 +1,29 @@ package org.egov.referralmanagement.repository; -import lombok.extern.slf4j.Slf4j; -import org.egov.referralmanagement.repository.rowmapper.ReferralRowMapper; +import static org.egov.common.utils.CommonUtils.getIdMethod; + +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + import org.egov.common.data.query.builder.GenericQueryBuilder; import org.egov.common.data.query.builder.QueryFieldChecker; import org.egov.common.data.query.builder.SelectQueryBuilder; -import org.egov.common.data.query.exception.QueryBuilderException; import org.egov.common.data.repository.GenericRepository; import org.egov.common.models.referralmanagement.Referral; import org.egov.common.models.referralmanagement.ReferralSearch; import org.egov.common.producer.Producer; +import org.egov.referralmanagement.repository.rowmapper.ReferralRowMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.stereotype.Repository; import org.springframework.util.ReflectionUtils; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Collectors; - -import static org.egov.common.utils.CommonUtils.getIdMethod; +import lombok.extern.slf4j.Slf4j; @Repository @Slf4j @@ -39,7 +39,7 @@ protected ReferralRepository(Producer producer, NamedParameterJdbcTemplate named } public List find(ReferralSearch searchObject, Integer limit, Integer offset, String tenantId, - Long lastChangedSince, Boolean includeDeleted) throws QueryBuilderException { + Long lastChangedSince, Boolean includeDeleted) { String query = "SELECT r.id, r.clientreferenceid, r.tenantid, r.projectbeneficiaryid, r.projectbeneficiaryclientreferenceid, r.referrerid, r.recipientid, r.recipienttype, r.reasons, r.sideeffectid, r.sideeffectclientreferenceid, r.createdby, r.createdtime, r.lastmodifiedby, r.lastmodifiedtime, r.clientcreatedby, r.clientcreatedtime, r.clientlastmodifiedby, r.clientlastmodifiedtime, r.rowversion, r.isdeleted, r.additionaldetails, se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedTime, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid"; Map paramsMap = new HashMap<>(); List whereFields = GenericQueryBuilder.getFieldsWithCondition(searchObject, diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/SideEffectRepository.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/SideEffectRepository.java index c3ce7ea000b..e72a3778817 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/SideEffectRepository.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/SideEffectRepository.java @@ -1,14 +1,24 @@ package org.egov.referralmanagement.repository; -import lombok.extern.slf4j.Slf4j; +import static org.egov.common.utils.CommonUtils.getIdList; +import static org.egov.common.utils.CommonUtils.getIdMethod; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + import org.egov.common.data.query.builder.GenericQueryBuilder; import org.egov.common.data.query.builder.QueryFieldChecker; import org.egov.common.data.query.builder.SelectQueryBuilder; -import org.egov.common.data.query.exception.QueryBuilderException; import org.egov.common.data.repository.GenericRepository; +import org.egov.common.models.project.Task; import org.egov.common.models.referralmanagement.sideeffect.SideEffect; import org.egov.common.models.referralmanagement.sideeffect.SideEffectSearch; -import org.egov.common.models.project.Task; import org.egov.common.producer.Producer; import org.egov.referralmanagement.repository.rowmapper.SideEffectRowMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -17,12 +27,7 @@ import org.springframework.stereotype.Repository; import org.springframework.util.ReflectionUtils; -import java.lang.reflect.Method; -import java.util.*; -import java.util.stream.Collectors; - -import static org.egov.common.utils.CommonUtils.getIdList; -import static org.egov.common.utils.CommonUtils.getIdMethod; +import lombok.extern.slf4j.Slf4j; @Repository @Slf4j @@ -63,7 +68,8 @@ public Map> fetchSideEffects(List taskList) { } public List find(SideEffectSearch searchObject, Integer limit, Integer offset, String tenantId, - Long lastChangedSince, Boolean includeDeleted) throws QueryBuilderException { + Long lastChangedSince, Boolean includeDeleted) { + String query = "SELECT * FROM side_effect ae LEFT JOIN project_task pt ON ae.taskId = pt.id "; Map paramsMap = new HashMap<>(); List whereFields = GenericQueryBuilder.getFieldsWithCondition(searchObject, diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java index d7e6bfe7426..00c987779c5 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java @@ -26,11 +26,15 @@ import org.egov.common.models.project.BeneficiarySearchRequest; import org.egov.common.models.project.ProjectBeneficiary; import org.egov.common.models.project.ProjectBeneficiarySearch; -import org.egov.common.models.project.Task; import org.egov.common.models.referralmanagement.Referral; +import org.egov.common.models.referralmanagement.ReferralSearch; +import org.egov.common.models.referralmanagement.ReferralSearchRequest; import org.egov.common.models.referralmanagement.beneficiarydownsync.Downsync; import org.egov.common.models.referralmanagement.beneficiarydownsync.DownsyncCriteria; import org.egov.common.models.referralmanagement.beneficiarydownsync.DownsyncRequest; +import org.egov.common.models.referralmanagement.sideeffect.SideEffect; +import org.egov.common.models.referralmanagement.sideeffect.SideEffectSearch; +import org.egov.common.models.referralmanagement.sideeffect.SideEffectSearchRequest; import org.egov.referralmanagement.config.ReferralManagementConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; @@ -46,212 +50,332 @@ public class DownsyncService { private NamedParameterJdbcTemplate jdbcTemplate; + private SideEffectService sideEffectService; + + private ReferralManagementService referralService; + @Autowired - public DownsyncService(ServiceRequestClient serviceRequestClient, - ReferralManagementConfiguration referralManagementConfiguration, - NamedParameterJdbcTemplate jdbcTemplate) { + public DownsyncService( ServiceRequestClient serviceRequestClient, + ReferralManagementConfiguration referralManagementConfiguration, + NamedParameterJdbcTemplate jdbcTemplate, + SideEffectService sideEffectService, + ReferralManagementService referralService) { this.restClient = serviceRequestClient; this.configs = referralManagementConfiguration; this.jdbcTemplate = jdbcTemplate; - } - - public Downsync prepareDownsyncData(DownsyncRequest downsyncRequest) { - - - Downsync downsync = new Downsync(); + this.sideEffectService=sideEffectService; + this.referralService=referralService; - List householdIds = null; - Set individualIds = null; - List individualClientRefIds = null; - List beneficiaryUuids = null; - List taskIds = null; - - downsync.setDownsyncCriteria(downsyncRequest.getDownsyncCriteria()); - /* search household */ - householdIds = searchHouseholds(downsyncRequest, downsync); - - /* search household member using household ids */ - individualIds = searchMembers(downsyncRequest, downsync, householdIds); + } + + public Downsync prepareDownsyncData(DownsyncRequest downsyncRequest) { - - if (!CollectionUtils.isEmpty(individualIds)) { + Downsync downsync = new Downsync(); - /* search individuals using individual ids */ - individualClientRefIds = searchIndividuals(downsyncRequest, downsync, individualIds); - } + List householdIds = null; + Set individualIds = null; + List individualClientRefIds = null; + List beneficiaryClientRefIds = null; + List taskClientRefIds = null; + + downsync.setDownsyncCriteria(downsyncRequest.getDownsyncCriteria()); + /* search household */ + householdIds = searchHouseholds(downsyncRequest, downsync); + + if (!CollectionUtils.isEmpty(householdIds)) + /* search household member using household ids */ + individualIds = searchMembers(downsyncRequest, downsync, householdIds); + + if (!CollectionUtils.isEmpty(individualIds)) { + + /* search individuals using individual ids */ + individualClientRefIds = searchIndividuals(downsyncRequest, downsync, individualIds); + } + + if (!CollectionUtils.isEmpty(individualClientRefIds)) { + /* search beneficiary using individual ids */ + beneficiaryClientRefIds = searchBeneficiaries(downsyncRequest, downsync, individualClientRefIds); + } - if (!CollectionUtils.isEmpty(individualClientRefIds)) - /* search beneficiary using individual ids */ - beneficiaryUuids = searchBeneficiaries(downsyncRequest, downsync, individualClientRefIds); + if (!CollectionUtils.isEmpty(beneficiaryClientRefIds)) { - /* search tasks using benegiciary uuids */ - if (!CollectionUtils.isEmpty(beneficiaryUuids)) { + /* search tasks using beneficiary uuids */ + taskClientRefIds = searchTasks(downsyncRequest, downsync, beneficiaryClientRefIds); - List tasks = new ArrayList<>(); - taskIds = tasks.stream().map(Task::getId).collect(Collectors.toList()); + /* ref search */ + referralSearch(downsyncRequest, downsync, beneficiaryClientRefIds); + } + + if (!CollectionUtils.isEmpty(taskClientRefIds)) { + + searchSideEffect(downsyncRequest, downsync, taskClientRefIds); + } + + return downsync; } - - // search side effect FIXME - tasks id array search not available - - // referral search - project beneficiary id - List referrals = null; - - - - return downsync; - } + private List searchHouseholds(DownsyncRequest downsyncRequest, Downsync downsync) { - private List searchHouseholds(DownsyncRequest downsyncRequest, Downsync downsync) { - - DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); - RequestInfo requestInfo = downsyncRequest.getRequestInfo(); - - StringBuilder householdUrl = new StringBuilder(configs.getHouseholdHost()) - .append(configs.getHouseholdSearchUrl()); - householdUrl = appendUrlParams(householdUrl, criteria); - - HouseholdSearch householdSearch = HouseholdSearch.builder() - .localityCode(criteria.getLocality()) - .build(); - - HouseholdSearchRequest searchRequest = HouseholdSearchRequest.builder() - .household(householdSearch) - .requestInfo(requestInfo) - .build(); - - HouseholdBulkResponse res = restClient.fetchResult(householdUrl, searchRequest, HouseholdBulkResponse.class); - List households = res.getHouseholds(); - downsync.setHouseholds(households); - downsync.getDownsyncCriteria().setTotalCount(res.getTotalCount()); - - if(CollectionUtils.isEmpty(households)) - return Collections.emptyList(); - - return households.stream().map(Household::getId).collect(Collectors.toList()); - } + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); - /** - * - * @param downsyncRequest - * @param downsync - * @param individualIds - * @return individual ClientReferenceIds - */ - private List searchIndividuals(DownsyncRequest downsyncRequest, Downsync downsync, Set individualIds) { - - DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); - RequestInfo requestInfo = downsyncRequest.getRequestInfo(); - - StringBuilder url = new StringBuilder(configs.getIndividualHost()) - .append(configs.getIndividualSearchUrl()); - url = appendUrlParams(url, criteria); - - IndividualSearch individualSearch = IndividualSearch.builder() - .id(new ArrayList<>(individualIds)) - .build(); - - IndividualSearchRequest searchRequest = IndividualSearchRequest.builder() - .individual(individualSearch) + StringBuilder householdUrl = new StringBuilder(configs.getHouseholdHost()) + .append(configs.getHouseholdSearchUrl()); + householdUrl = appendUrlParams(householdUrl, criteria); + + HouseholdSearch householdSearch = HouseholdSearch.builder() + .localityCode(criteria.getLocality()) + .build(); + + HouseholdSearchRequest searchRequest = HouseholdSearchRequest.builder() + .household(householdSearch) .requestInfo(requestInfo) .build(); - - List individuals = restClient.fetchResult(url, searchRequest, IndividualBulkResponse.class).getIndividual(); - downsync.setIndividuals(individuals); - - return individuals.stream().map(Individual::getClientReferenceId).collect(Collectors.toList()); - } + + HouseholdBulkResponse res = restClient.fetchResult(householdUrl, searchRequest, HouseholdBulkResponse.class); + List households = res.getHouseholds(); + downsync.setHouseholds(households); + downsync.getDownsyncCriteria().setTotalCount(res.getTotalCount()); + + if(CollectionUtils.isEmpty(households)) + return Collections.emptyList(); + + return households.stream().map(Household::getId).collect(Collectors.toList()); + } + + /** + * + * @param downsyncRequest + * @param downsync + * @param individualIds + * @return individual ClientReferenceIds + */ + private List searchIndividuals(DownsyncRequest downsyncRequest, Downsync downsync, + Set individualIds) { + + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); + + StringBuilder url = new StringBuilder(configs.getIndividualHost()) + .append(configs.getIndividualSearchUrl()); + url = appendUrlParams(url, criteria); + + IndividualSearch individualSearch = IndividualSearch.builder() + .id(new ArrayList<>(individualIds)) + .build(); + + IndividualSearchRequest searchRequest = IndividualSearchRequest.builder() + .individual(individualSearch) + .requestInfo(requestInfo) + .build(); + + List individuals = restClient.fetchResult(url, searchRequest, IndividualBulkResponse.class).getIndividual(); + downsync.setIndividuals(individuals); + + return individuals.stream().map(Individual::getClientReferenceId).collect(Collectors.toList()); + } + + /** + * + * @param downsyncRequest + * @param householdIds + * @return + */ + private Set searchMembers(DownsyncRequest downsyncRequest, Downsync downsync, + List householdIds) { + + StringBuilder memberUrl = new StringBuilder(configs.getHouseholdHost()) + .append(configs.getHouseholdMemberSearchUrl()); + + appendUrlParams(memberUrl, downsyncRequest.getDownsyncCriteria()); + + String memberIdsquery = "SELECT id from HOUSEHOLD_MEMBER where householdId IN (:householdIds)"; + + Map paramMap = new HashMap<>(); + paramMap.put("householdIds", householdIds); + + /* FIXME SHOULD BE REMOVED AND SEARCH SHOULD BE enhanced with list of household ids*/ + List memeberids = jdbcTemplate.queryForList(memberIdsquery, paramMap, String.class); + + if (CollectionUtils.isEmpty(memeberids)) + return Collections.emptySet(); - /** - * - * @param downsyncRequest - * @param householdIds - * @return - */ - private Set searchMembers(DownsyncRequest downsyncRequest, Downsync downsync, List householdIds) { - - StringBuilder memberUrl = new StringBuilder(configs.getHouseholdHost()) - .append(configs.getHouseholdMemberSearchUrl()); - appendUrlParams(memberUrl, downsyncRequest.getDownsyncCriteria()); - - String memberIdsquery = "SELECT id from HOUSEHOLD_MEMBER where householdId IN (:householdIds)"; - - Map paramMap = new HashMap<>(); - paramMap.put("householdIds", householdIds); - - /* FIXME SHOULD BE REMOVED AND SEARCH SHOULD BE enhanced with list of household ids*/ - List memeberids = jdbcTemplate.queryForList(memberIdsquery, paramMap, String.class); - - if (CollectionUtils.isEmpty(memeberids)) - return Collections.emptySet(); + HouseholdMemberSearch memberSearch = HouseholdMemberSearch.builder() + .id(memeberids) + .build(); + + HouseholdMemberSearchRequest searchRequest = HouseholdMemberSearchRequest.builder() + .householdMemberSearch(memberSearch) + .requestInfo(downsyncRequest.getRequestInfo()) + .build(); + + List members = restClient.fetchResult(memberUrl, searchRequest, HouseholdMemberBulkResponse.class).getHouseholdMembers(); + downsync.setHouseholdMembers(members); + + return members.stream().map(HouseholdMember::getIndividualId).collect(Collectors.toSet()); + } - HouseholdMemberSearch memberSearch = HouseholdMemberSearch.builder() - .id(memeberids) - .build(); - - HouseholdMemberSearchRequest searchRequest = HouseholdMemberSearchRequest.builder() - .householdMemberSearch(memberSearch) - .requestInfo(downsyncRequest.getRequestInfo()) - .build(); - - List members = restClient.fetchResult(memberUrl, searchRequest, HouseholdMemberBulkResponse.class).getHouseholdMembers(); - downsync.setHouseholdMembers(members); - - return members.stream().map(HouseholdMember::getIndividualId).collect(Collectors.toSet()); - } + /** + * + * @param downsyncRequest + * @param downsync + * @param individualClientRefIds + * @return clientreferenceid of beneficiary object + */ + private List searchBeneficiaries(DownsyncRequest downsyncRequest, Downsync downsync, + List individualClientRefIds) { + + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); + + StringBuilder url = new StringBuilder(configs.getProjectHost()) + .append(configs.getProjectBeneficiarySearchUrl()); + url = appendUrlParams(url, criteria); + + String beneficiaryIdQuery = "SELECT id from PROJECT_BENEFICIARY where beneficiaryclientreferenceid IN (:beneficiaryIds)"; + + Map paramMap = new HashMap<>(); + paramMap.put("beneficiaryIds", individualClientRefIds); + + /* FIXME SHOULD BE REMOVED AND SEARCH SHOULD BE enhanced with list of beneficiary ids*/ + List ids = jdbcTemplate.queryForList(beneficiaryIdQuery, paramMap, String.class); + + if(CollectionUtils.isEmpty(ids)) + return Collections.emptyList(); + + ProjectBeneficiarySearch search = ProjectBeneficiarySearch.builder() + .id(ids) + .projectId(downsyncRequest.getDownsyncCriteria().getProjectId()) + .build(); + + BeneficiarySearchRequest searchRequest = BeneficiarySearchRequest.builder() + .projectBeneficiary(search) + .requestInfo(requestInfo) + .build(); + + List beneficiaries = restClient.fetchResult(url, searchRequest, BeneficiaryBulkResponse.class).getProjectBeneficiaries(); + downsync.setProjectBeneficiaries(beneficiaries); + + return beneficiaries.stream().map(ProjectBeneficiary::getClientReferenceId).collect(Collectors.toList()); + } + + private List searchTasks(DownsyncRequest downsyncRequest, Downsync downsync, + List beneficiaryClientRefIds) { + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); - private List searchBeneficiaries(DownsyncRequest downsyncRequest, Downsync downsync, List individualClientRefIds) { - - DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); - RequestInfo requestInfo = downsyncRequest.getRequestInfo(); - - StringBuilder url = new StringBuilder(configs.getProjectHost()) - .append(configs.getProjectBeneficiarySearchUrl()); - url = appendUrlParams(url, criteria); - - String beneficiaryIdQuery = "SELECT id from PROJECT_BENEFICIARY where beneficiaryclientreferenceid IN (:beneficiaryIds)"; - - Map paramMap = new HashMap<>(); - paramMap.put("beneficiaryIds", individualClientRefIds); - - /* FIXME SHOULD BE REMOVED AND SEARCH SHOULD BE enhanced with list of beneficiary ids*/ - List ids = jdbcTemplate.queryForList(beneficiaryIdQuery, paramMap, String.class); - - if(CollectionUtils.isEmpty(ids)) - return Collections.emptyList(); + StringBuilder url = new StringBuilder(configs.getProjectHost()) + .append(configs.getProjectTaskSearchUrl()); + url = appendUrlParams(url, criteria); + + String taskIdQuery = "SELECT id from PROJECT_TASK where projectBeneficiaryClientReferenceId IN (:beneficiaryClientRefIds)"; + + Map paramMap = new HashMap<>(); + paramMap.put("beneficiaryClientRefIds", beneficiaryClientRefIds); + + /* FIXME SHOULD BE REMOVED AND TASK SEARCH SHOULD BE enhanced with list of client-ref-beneficiary ids*/ + List taskIds = jdbcTemplate.queryForList(taskIdQuery, paramMap, String.class); + + if(CollectionUtils.isEmpty(taskIds)) + return Collections.emptyList(); + + ProjectBeneficiarySearch search = ProjectBeneficiarySearch.builder() + .id(taskIds) + .projectId(downsyncRequest.getDownsyncCriteria().getProjectId()) + .build(); + + BeneficiarySearchRequest searchRequest = BeneficiarySearchRequest.builder() + .projectBeneficiary(search) + .requestInfo(requestInfo) + .build(); + + List beneficiaries = restClient.fetchResult(url, searchRequest, BeneficiaryBulkResponse.class).getProjectBeneficiaries(); + downsync.setProjectBeneficiaries(beneficiaries); + + return beneficiaries.stream().map(ProjectBeneficiary::getClientReferenceId).collect(Collectors.toList()); + } + + private void searchSideEffect(DownsyncRequest downsyncRequest, Downsync downsync, + List taskClientRefIds) { + + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); + + // search side effect FIXME - tasks id array search not available + String taskIdQuery = "SELECT id from SIDE_EFFECT where taskClientReferenceId IN (:taskClientRefIds)"; + + Map paramMap = new HashMap<>(); + paramMap.put("taskClientRefIds", taskClientRefIds); + + /* FIXME SHOULD BE REMOVED AND TASK SEARCH SHOULD BE enhanced with list of client-ref-beneficiary ids*/ + List SEIds = jdbcTemplate.queryForList(taskIdQuery, paramMap, String.class); + + if(CollectionUtils.isEmpty(SEIds)) + return; + + SideEffectSearch search = SideEffectSearch.builder() + .id(SEIds) + .build(); + SideEffectSearchRequest effectSearchRequest = SideEffectSearchRequest.builder() + .sideEffect(search) + .requestInfo(requestInfo) + .build(); + + List effects = sideEffectService.search( + effectSearchRequest, + criteria.getLimit(), + criteria.getOffset(), + criteria.getTenantId(), + criteria.getLastSyncedTime(), + criteria.getIncludeDeleted()); + + downsync.setSideEffects(effects); + } + + private void referralSearch(DownsyncRequest downsyncRequest, Downsync downsync, + List beneficiaryClientRefIds) { + + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); - ProjectBeneficiarySearch search = ProjectBeneficiarySearch.builder() - .id(ids) - .projectId(downsyncRequest.getDownsyncCriteria().getProjectId()) - .build(); - - BeneficiarySearchRequest searchRequest = BeneficiarySearchRequest.builder() - .projectBeneficiary(search) - .requestInfo(requestInfo) - .build(); - - List beneficiaries = restClient.fetchResult(url, searchRequest, BeneficiaryBulkResponse.class).getProjectBeneficiaries(); - downsync.setProjectBeneficiaries(beneficiaries); - - return ids; - } + ReferralSearch search = ReferralSearch.builder() + .projectBeneficiaryClientReferenceId(beneficiaryClientRefIds) + .build(); + + ReferralSearchRequest searchRequest = ReferralSearchRequest.builder() + .referral(search) + .requestInfo(requestInfo) + .build(); + + List referrals = referralService.search( + searchRequest, + criteria.getLimit(), + criteria.getOffset(), + criteria.getTenantId(), + criteria.getLastSyncedTime(), + criteria.getIncludeDeleted()); + + downsync.setReferrals(referrals); + } + + - /** - * append url params - * - * @param url - * @param criteria - * @return - */ - private StringBuilder appendUrlParams(StringBuilder url, DownsyncCriteria criteria) { - - return url.append("?tenantId=") - .append(criteria.getTenantId()) - .append("&offset=") - .append(criteria.getOffset()) - .append("&limit=") - .append(criteria.getLimit()); + /** + * append url params + * + * @param url + * @param criteria + * @return + */ + private StringBuilder appendUrlParams(StringBuilder url, DownsyncCriteria criteria) { + + return url.append("?tenantId=") + .append(criteria.getTenantId()) + .append("&offset=") + .append(criteria.getOffset()) + .append("&limit=") + .append(criteria.getLimit()); + } } -} diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java index a7c5f09fa43..ec7c710267a 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java @@ -1,6 +1,21 @@ package org.egov.referralmanagement.service; -import lombok.extern.slf4j.Slf4j; +import static org.egov.common.utils.CommonUtils.getIdFieldName; +import static org.egov.common.utils.CommonUtils.getIdMethod; +import static org.egov.common.utils.CommonUtils.handleErrors; +import static org.egov.common.utils.CommonUtils.havingTenantId; +import static org.egov.common.utils.CommonUtils.includeDeleted; +import static org.egov.common.utils.CommonUtils.isSearchByIdOnly; +import static org.egov.common.utils.CommonUtils.lastChangedSince; +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Predicate; +import java.util.stream.Collectors; + import org.egov.common.ds.Tuple; import org.egov.common.models.ErrorDetails; import org.egov.common.models.referralmanagement.Referral; @@ -26,25 +41,12 @@ import org.springframework.stereotype.Service; import org.springframework.util.ReflectionUtils; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -import static org.egov.common.utils.CommonUtils.getIdFieldName; -import static org.egov.common.utils.CommonUtils.getIdMethod; -import static org.egov.common.utils.CommonUtils.handleErrors; -import static org.egov.common.utils.CommonUtils.havingTenantId; -import static org.egov.common.utils.CommonUtils.includeDeleted; -import static org.egov.common.utils.CommonUtils.isSearchByIdOnly; -import static org.egov.common.utils.CommonUtils.lastChangedSince; -import static org.egov.common.utils.CommonUtils.notHavingErrors; -import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import lombok.extern.slf4j.Slf4j; @Service @Slf4j public class ReferralManagementService { + private final IdGenService idGenService; private final ReferralRepository referralRepository; @@ -155,7 +157,7 @@ public List search(ReferralSearchRequest referralSearchRequest, Integer offset, String tenantId, Long lastChangedSince, - Boolean includeDeleted) throws Exception { + Boolean includeDeleted) { log.info("received request to search referrals"); String idFieldName = getIdFieldName(referralSearchRequest.getReferral()); if (isSearchByIdOnly(referralSearchRequest.getReferral(), idFieldName)) { diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/SideEffectService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/SideEffectService.java index fcb56d335b6..4850402507c 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/SideEffectService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/SideEffectService.java @@ -1,6 +1,21 @@ package org.egov.referralmanagement.service; -import lombok.extern.slf4j.Slf4j; +import static org.egov.common.utils.CommonUtils.getIdFieldName; +import static org.egov.common.utils.CommonUtils.getIdMethod; +import static org.egov.common.utils.CommonUtils.handleErrors; +import static org.egov.common.utils.CommonUtils.havingTenantId; +import static org.egov.common.utils.CommonUtils.includeDeleted; +import static org.egov.common.utils.CommonUtils.isSearchByIdOnly; +import static org.egov.common.utils.CommonUtils.lastChangedSince; +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Predicate; +import java.util.stream.Collectors; + import org.egov.common.ds.Tuple; import org.egov.common.models.ErrorDetails; import org.egov.common.models.referralmanagement.sideeffect.SideEffect; @@ -24,21 +39,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.ReflectionUtils; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -import static org.egov.common.utils.CommonUtils.getIdFieldName; -import static org.egov.common.utils.CommonUtils.getIdMethod; -import static org.egov.common.utils.CommonUtils.handleErrors; -import static org.egov.common.utils.CommonUtils.havingTenantId; -import static org.egov.common.utils.CommonUtils.includeDeleted; -import static org.egov.common.utils.CommonUtils.isSearchByIdOnly; -import static org.egov.common.utils.CommonUtils.lastChangedSince; -import static org.egov.common.utils.CommonUtils.notHavingErrors; -import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import lombok.extern.slf4j.Slf4j; /** * @author kanishq-egov @@ -189,7 +190,7 @@ public List search(SideEffectSearchRequest sideEffectSearchRequest, Integer offset, String tenantId, Long lastChangedSince, - Boolean includeDeleted) throws Exception { + Boolean includeDeleted) { log.info("received request to search side effects"); String idFieldName = getIdFieldName(sideEffectSearchRequest.getSideEffect()); if (isSearchByIdOnly(sideEffectSearchRequest.getSideEffect(), idFieldName)) { From 89618710d98908a349c87e51cbc180162730834f Mon Sep 17 00:00:00 2001 From: kavi_elrey <25226238+kavi-egov@users.noreply.github.com> Date: Mon, 6 Nov 2023 15:27:23 +0530 Subject: [PATCH 40/41] tasks earch fix --- .../service/DownsyncService.java | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java index 00c987779c5..81330ddda2b 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java @@ -26,6 +26,8 @@ import org.egov.common.models.project.BeneficiarySearchRequest; import org.egov.common.models.project.ProjectBeneficiary; import org.egov.common.models.project.ProjectBeneficiarySearch; +import org.egov.common.models.project.TaskSearch; +import org.egov.common.models.project.TaskSearchRequest; import org.egov.common.models.referralmanagement.Referral; import org.egov.common.models.referralmanagement.ReferralSearch; import org.egov.common.models.referralmanagement.ReferralSearchRequest; @@ -68,7 +70,12 @@ public DownsyncService( ServiceRequestClient serviceRequestClient, this.referralService=referralService; } - + + /** + * + * @param downsyncRequest + * @return Downsync + */ public Downsync prepareDownsyncData(DownsyncRequest downsyncRequest) { Downsync downsync = new Downsync(); @@ -115,6 +122,12 @@ public Downsync prepareDownsyncData(DownsyncRequest downsyncRequest) { return downsync; } + /** + * + * @param downsyncRequest + * @param downsync + * @return + */ private List searchHouseholds(DownsyncRequest downsyncRequest, Downsync downsync) { DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); @@ -260,6 +273,13 @@ private List searchBeneficiaries(DownsyncRequest downsyncRequest, Downsy return beneficiaries.stream().map(ProjectBeneficiary::getClientReferenceId).collect(Collectors.toList()); } + /** + * + * @param downsyncRequest + * @param downsync + * @param beneficiaryClientRefIds + * @return + */ private List searchTasks(DownsyncRequest downsyncRequest, Downsync downsync, List beneficiaryClientRefIds) { @@ -281,13 +301,13 @@ private List searchTasks(DownsyncRequest downsyncRequest, Downsync downs if(CollectionUtils.isEmpty(taskIds)) return Collections.emptyList(); - ProjectBeneficiarySearch search = ProjectBeneficiarySearch.builder() + TaskSearch search = TaskSearch.builder() .id(taskIds) .projectId(downsyncRequest.getDownsyncCriteria().getProjectId()) .build(); - BeneficiarySearchRequest searchRequest = BeneficiarySearchRequest.builder() - .projectBeneficiary(search) + TaskSearchRequest searchRequest = TaskSearchRequest.builder() + .task(search) .requestInfo(requestInfo) .build(); @@ -297,6 +317,12 @@ private List searchTasks(DownsyncRequest downsyncRequest, Downsync downs return beneficiaries.stream().map(ProjectBeneficiary::getClientReferenceId).collect(Collectors.toList()); } + /** + * + * @param downsyncRequest + * @param downsync + * @param taskClientRefIds + */ private void searchSideEffect(DownsyncRequest downsyncRequest, Downsync downsync, List taskClientRefIds) { From 7af5b3ea27ebb92e27c5f6a153c59816c0fd7c88 Mon Sep 17 00:00:00 2001 From: kavi_elrey <25226238+kavi-egov@users.noreply.github.com> Date: Mon, 6 Nov 2023 17:00:57 +0530 Subject: [PATCH 41/41] referral search fix --- health-services/referralmanagement/pom.xml | 265 +++++++++--------- .../repository/ReferralRepository.java | 4 +- .../service/DownsyncService.java | 15 +- 3 files changed, 147 insertions(+), 137 deletions(-) diff --git a/health-services/referralmanagement/pom.xml b/health-services/referralmanagement/pom.xml index 6b3f7569231..cc9cda07138 100644 --- a/health-services/referralmanagement/pom.xml +++ b/health-services/referralmanagement/pom.xml @@ -1,136 +1,141 @@ - - 4.0.0 + + 4.0.0 - org.egov - referralmanagement - jar - referralmanagement - 1.0.0 - - 1.8 - ${java.version} - ${java.version} - - - org.springframework.boot - spring-boot-starter-parent - 2.2.6.RELEASE - - - src/main/java - - - org.springframework.boot - spring-boot-maven-plugin - - - - repackage - - - - - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.egov.common - health-services-common - 1.0.12-SNAPSHOT - - - org.egov.common - health-services-models - 1.0.10-SNAPSHOT - compile - - - org.springframework.boot - spring-boot-starter-data-redis - - - io.lettuce - lettuce-core - - - - - redis.clients - jedis - - - org.flywaydb - flyway-core - - - org.postgresql - postgresql - 42.2.2.jre7 - - - org.springframework.boot - spring-boot-starter-test - test - + org.egov + referralmanagement + jar + referralmanagement + 1.0.0 + + 1.8 + ${java.version} + ${java.version} + + + org.springframework.boot + spring-boot-starter-parent + 2.2.6.RELEASE + + + src/main/java + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-jdbc + + + org.egov.common + health-services-common + 1.0.12-SNAPSHOT + + + org.egov.common + health-services-models + 1.0.10-SNAPSHOT + compile + + + org.springframework.boot + spring-boot-starter-data-redis + + + io.lettuce + lettuce-core + + + + + redis.clients + jedis + + + org.flywaydb + flyway-core + + + + org.springframework.boot + spring-boot-devtools + - - io.swagger - swagger-core - 1.5.18 - - - - org.egov.services - digit-models - 1.0.0-SNAPSHOT - - - org.projectlombok - lombok - true - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - - - - javax.validation - validation-api - - + + org.postgresql + postgresql + 42.2.2.jre7 + + + org.springframework.boot + spring-boot-starter-test + test + - - - repo.egovernments.org - eGov ERP Releases Repository - https://nexus-repo.egovernments.org/nexus/content/repositories/releases/ - - - repo.egovernments.org.snapshots - eGov ERP Releases Repository - https://nexus-repo.egovernments.org/nexus/content/repositories/snapshots/ - - - repo.egovernments.org.public - eGov Public Repository Group - https://nexus-repo.egovernments.org/nexus/content/groups/public/ - - - repo.digit.org - eGov DIGIT Releases Repository - https://nexus-repo.digit.org/nexus/content/repositories/snapshots/ - - + + io.swagger + swagger-core + 1.5.18 + + + + org.egov.services + digit-models + 1.0.0-SNAPSHOT + + + org.projectlombok + lombok + true + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + + javax.validation + validation-api + + + + + + repo.egovernments.org + eGov ERP Releases Repository + https://nexus-repo.egovernments.org/nexus/content/repositories/releases/ + + + repo.egovernments.org.snapshots + eGov ERP Releases Repository + https://nexus-repo.egovernments.org/nexus/content/repositories/snapshots/ + + + repo.egovernments.org.public + eGov Public Repository Group + https://nexus-repo.egovernments.org/nexus/content/groups/public/ + + + repo.digit.org + eGov DIGIT Releases Repository + https://nexus-repo.digit.org/nexus/content/repositories/snapshots/ + + \ No newline at end of file diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java index 10379e3577b..71a66d60328 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java @@ -47,7 +47,9 @@ public List find(ReferralSearch searchObject, Integer limit, Integer o query = GenericQueryBuilder.generateQuery(query, whereFields).toString(); query = query.replace("id IN (:id)", "r.id IN (:id)"); query = query.replace("clientReferenceId IN (:clientReferenceId)", "r.clientReferenceId IN (:clientReferenceId)"); - + query = query.replace("projectBeneficiaryClientReferenceId IN (:projectBeneficiaryClientReferenceId)", "r.projectBeneficiaryClientReferenceId IN (:projectBeneficiaryClientReferenceId)"); + query = query.replace("projectBeneficiaryId IN (:projectBeneficiaryId)", "r.projectBeneficiaryId IN (:projectBeneficiaryId)"); + query = query + " and r.tenantId=:tenantId "; if (Boolean.FALSE.equals(includeDeleted)) { query = query + "and r.isDeleted=:isDeleted "; diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java index 81330ddda2b..e931dfa46b7 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java @@ -26,6 +26,8 @@ import org.egov.common.models.project.BeneficiarySearchRequest; import org.egov.common.models.project.ProjectBeneficiary; import org.egov.common.models.project.ProjectBeneficiarySearch; +import org.egov.common.models.project.Task; +import org.egov.common.models.project.TaskBulkResponse; import org.egov.common.models.project.TaskSearch; import org.egov.common.models.project.TaskSearchRequest; import org.egov.common.models.referralmanagement.Referral; @@ -209,13 +211,14 @@ private Set searchMembers(DownsyncRequest downsyncRequest, Downsync down paramMap.put("householdIds", householdIds); /* FIXME SHOULD BE REMOVED AND SEARCH SHOULD BE enhanced with list of household ids*/ - List memeberids = jdbcTemplate.queryForList(memberIdsquery, paramMap, String.class); + List memberids = jdbcTemplate.queryForList(memberIdsquery, paramMap, String.class); - if (CollectionUtils.isEmpty(memeberids)) + if (CollectionUtils.isEmpty(memberids)) return Collections.emptySet(); + HouseholdMemberSearch memberSearch = HouseholdMemberSearch.builder() - .id(memeberids) + .id(memberids) .build(); HouseholdMemberSearchRequest searchRequest = HouseholdMemberSearchRequest.builder() @@ -311,10 +314,10 @@ private List searchTasks(DownsyncRequest downsyncRequest, Downsync downs .requestInfo(requestInfo) .build(); - List beneficiaries = restClient.fetchResult(url, searchRequest, BeneficiaryBulkResponse.class).getProjectBeneficiaries(); - downsync.setProjectBeneficiaries(beneficiaries); + List tasks = restClient.fetchResult(url, searchRequest, TaskBulkResponse.class).getTasks(); + downsync.setTasks(tasks); - return beneficiaries.stream().map(ProjectBeneficiary::getClientReferenceId).collect(Collectors.toList()); + return tasks.stream().map(Task::getClientReferenceId).collect(Collectors.toList()); } /**