diff --git a/CODEOWNERS b/CODEOWNERS
index 82c9fb40e92..e5b57cd157d 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -1,3 +1 @@
-* @kavi-egov
-
-
+* @kavi-egov @sathishp-eGov
\ No newline at end of file
diff --git a/build/17/maven/Dockerfile b/build/17/maven/Dockerfile
new file mode 100644
index 00000000000..0816437a705
--- /dev/null
+++ b/build/17/maven/Dockerfile
@@ -0,0 +1,34 @@
+
+FROM egovio/amazoncorretto:17-alpine3.19 AS build
+# FROM egovio/alpine-maven-builder-jdk-8:1-master-NA-6036091e AS build
+#FROM ghcr.io/egovernments/alpine-maven-builder-jdk-8:1-master-na-6036091e AS build
+ARG WORK_DIR
+WORKDIR /app
+
+# Install Maven
+RUN apk add --no-cache maven
+
+# copy the project files
+COPY ${WORK_DIR}/pom.xml ./pom.xml
+COPY build/maven/start.sh ./start.sh
+
+# not useful for stateless builds
+# RUN mvn -B dependency:go-offline
+
+COPY ${WORK_DIR}/src ./src
+RUN mvn -B -f /app/pom.xml package
+
+
+# Create runtime image
+#FROM egovio/8-openjdk-alpine
+#FROM ghcr.io/egovernments/8-openjdk-alpine:latest
+FROM egovio/amazoncorretto:17-alpine3.19
+
+
+WORKDIR /opt/egov
+
+COPY --from=build /app/target/*.jar /app/start.sh /opt/egov/
+
+RUN chmod +x /opt/egov/start.sh
+
+CMD ["/opt/egov/start.sh"]
diff --git a/build/build-config.yml b/build/build-config.yml
index 5c0e4b2d8b4..fff532768be 100644
--- a/build/build-config.yml
+++ b/build/build-config.yml
@@ -57,6 +57,27 @@ config:
dockerfile: "build/maven/Dockerfile"
- work-dir: "health-services/household/src/main/resources/db"
image-name: "household-db"
+ - name: "builds/health-campaign-services/health-services/household-java-17"
+ build:
+ - work-dir: "health-services/household"
+ image-name: "household"
+ dockerfile: "build/17/maven/Dockerfile"
+ - work-dir: "health-services/household/src/main/resources/db"
+ image-name: "household-db"
+ - name: "builds/health-campaign-services/health-services/health-project-java-17"
+ build:
+ - work-dir: "health-services/project"
+ image-name: "health-project"
+ dockerfile: "build/17/maven/Dockerfile"
+ - work-dir: "health-services/project/src/main/resources/db"
+ image-name: "health-project-db"
+ - name: "builds/health-campaign-services/health-services/referralmanagement-java-17"
+ build:
+ - work-dir: "health-services/referralmanagement"
+ image-name: "referralmanagement"
+ dockerfile: "build/17/maven/Dockerfile"
+ - work-dir: "health-services/referralmanagement/src/main/resources/db"
+ image-name: "referralmanagement-db"
- name: "builds/health-campaign-services/health-services/individual"
build:
- work-dir: "health-services/individual"
@@ -71,13 +92,20 @@ config:
dockerfile: "build/maven/Dockerfile"
- work-dir: "health-services/individual/src/main/resources/db"
image-name: "health-individual-db"
- - name: "builds/health-campaign-services/health-services/household"
+ - name: "builds/health-campaign-services/health-services/health-individual-java-17"
build:
- - work-dir: "health-services/household"
- image-name: "household"
+ - work-dir: "health-services/individual"
+ image-name: "health-individual"
+ dockerfile: "build/17/maven/Dockerfile"
+ - work-dir: "health-services/individual/src/main/resources/db"
+ image-name: "health-individual-db"
+ - name: "builds/health-campaign-services/health-services/health-attendance"
+ build:
+ - work-dir: "health-services/attendance"
+ image-name: "health-attendance"
dockerfile: "build/maven/Dockerfile"
- - work-dir: "health-services/household/src/main/resources/db"
- image-name: "household-db"
+ - work-dir: "health-services/attendance/src/main/resources/db"
+ image-name: "health-attendance-db"
- name: "builds/health-campaign-services/core-services/error-handler"
build:
- work-dir: "core-services/error-handler"
@@ -95,6 +123,13 @@ config:
dockerfile: "build/maven/Dockerfile"
- work-dir: "health-services/stock/src/main/resources/db"
image-name: "stock-db"
+ - name: "builds/health-campaign-services/health-services/stock-java-17"
+ build:
+ - work-dir: "health-services/stock"
+ image-name: "stock"
+ dockerfile: "build/17/maven/Dockerfile"
+ - work-dir: "health-services/stock/src/main/resources/db"
+ image-name: "stock-db"
- name: "builds/health-campaign-services/core-services/egov-survey-services"
build:
- work-dir: "core-services/egov-survey-services"
@@ -109,11 +144,23 @@ config:
dockerfile: "build/maven/Dockerfile"
- work-dir: "health-services/facility/src/main/resources/db"
image-name: "facility-db"
+ - name: "builds/health-campaign-services/health-services/facility-java-17"
+ build:
+ - work-dir: "health-services/facility"
+ image-name: "facility"
+ dockerfile: "build/17/maven/Dockerfile"
+ - work-dir: "health-services/facility/src/main/resources/db"
+ image-name: "facility-db"
- name: "builds/health-campaign-services/health-services/transformer"
build:
- work-dir: "health-services/transformer"
image-name: "transformer"
dockerfile: "build/maven/Dockerfile"
+ - name: "builds/health-campaign-services/health-services/transformer-java-17"
+ build:
+ - work-dir: "health-services/transformer"
+ image-name: "transformer"
+ dockerfile: "build/17/maven/Dockerfile"
- name: "builds/health-campaign-services/core-services/service-request"
build:
- work-dir: "core-services/service-request"
@@ -161,3 +208,35 @@ config:
dockerfile: "build/maven/Dockerfile"
- work-dir: "core-services/egov-hrms/src/main/resources/db"
image-name: "health-hrms-db"
+ - name: "builds/health-campaign-services/core-services/health-hrms-java-17"
+ build:
+ - work-dir: "core-services/egov-hrms"
+ image-name: "health-hrms"
+ dockerfile: "build/17/maven/Dockerfile"
+ - work-dir: "core-services/egov-hrms/src/main/resources/db"
+ image-name: "health-hrms-db"
+ - name: "builds/health-campaign-services/core-services/egov-hrms"
+ build:
+ - work-dir: "core-services/egov-hrms"
+ image-name: "egov-hrms"
+ dockerfile: "build/maven/Dockerfile"
+ - work-dir: "core-services/egov-hrms/src/main/resources/db"
+ image-name: "egov-hrms-db"
+ - name: "builds/health-campaign-services/health-services/plan-service"
+ build:
+ - work-dir: "health-services/plan-service"
+ image-name: "plan-service"
+ dockerfile: "build/17/maven/Dockerfile"
+ - work-dir: "health-services/plan-service/src/main/resources/db"
+ image-name: "plan-service-db"
+ - name: "builds/health-campaign-services/health-services/resource-estimation-service"
+ build:
+ - work-dir: "health-services/resource-estimation-service"
+ image-name: "resource-estimation-service"
+ dockerfile: "build/17/maven/Dockerfile"
+ - work-dir: "health-services/resource-estimation-service/src/main/resources/db"
+ image-name: "resource-estimation-service-db"
+ - name: "builds/health-campaign-services/analytics/auth-proxy"
+ build:
+ - work-dir: "analytics/auth-proxy"
+ image-name: "auth-proxy"
\ No newline at end of file
diff --git a/core-services/egov-hrms/pom.xml b/core-services/egov-hrms/pom.xml
index 63ff6fcda8c..555e8f69e0c 100644
--- a/core-services/egov-hrms/pom.xml
+++ b/core-services/egov-hrms/pom.xml
@@ -100,7 +100,7 @@
org.egov.common
health-services-models
- 1.0.9-SNAPSHOT
+ 1.0.12-SNAPSHOT
compile
diff --git a/core-services/egov-hrms/src/main/java/org/egov/hrms/config/PropertiesManager.java b/core-services/egov-hrms/src/main/java/org/egov/hrms/config/PropertiesManager.java
index dd0fb1ee4c6..1f0522f0d36 100644
--- a/core-services/egov-hrms/src/main/java/org/egov/hrms/config/PropertiesManager.java
+++ b/core-services/egov-hrms/src/main/java/org/egov/hrms/config/PropertiesManager.java
@@ -134,4 +134,10 @@ public class PropertiesManager {
@Value("${egov.hrms.auto.generate.password}")
private boolean autoGeneratePassword;
+
+ @Value("${egov.boundary.host}")
+ private String boundaryServiceHost;
+
+ @Value("${egov.boundary.search.url}")
+ private String boundarySearchUrl;
}
\ No newline at end of file
diff --git a/core-services/egov-hrms/src/main/java/org/egov/hrms/service/IndividualService.java b/core-services/egov-hrms/src/main/java/org/egov/hrms/service/IndividualService.java
index 07b315bf1bc..c1b3932a22a 100644
--- a/core-services/egov-hrms/src/main/java/org/egov/hrms/service/IndividualService.java
+++ b/core-services/egov-hrms/src/main/java/org/egov/hrms/service/IndividualService.java
@@ -2,6 +2,7 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
@@ -13,6 +14,7 @@
import digit.models.coremodels.AuditDetails;
import digit.models.coremodels.user.enums.UserType;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.egov.common.contract.request.RequestInfo;
import org.egov.common.models.core.Role;
import org.egov.common.models.individual.Address;
@@ -23,8 +25,6 @@
import org.egov.common.models.individual.IndividualBulkResponse;
import org.egov.common.models.individual.IndividualRequest;
import org.egov.common.models.individual.IndividualResponse;
-import org.egov.common.models.individual.IndividualSearch;
-import org.egov.common.models.individual.IndividualSearchRequest;
import org.egov.common.models.individual.Name;
import org.egov.common.models.individual.UserDetails;
import org.egov.hrms.config.PropertiesManager;
@@ -33,6 +33,8 @@
import org.egov.hrms.web.contract.User;
import org.egov.hrms.web.contract.UserRequest;
import org.egov.hrms.web.contract.UserResponse;
+import org.egov.hrms.web.models.IndividualSearch;
+import org.egov.hrms.web.models.IndividualSearchRequest;
import org.springframework.beans.factory.annotation.Autowired;
import static org.egov.hrms.utils.HRMSConstants.SYSTEM_GENERATED;
@@ -86,13 +88,25 @@ public UserResponse updateUser(UserRequest userRequest) {
@Override
public UserResponse getUser(RequestInfo requestInfo, Map userSearchCriteria ) {
+ String mobileNumber = (String) userSearchCriteria.get("mobileNumber");
+ String username = (String) userSearchCriteria.get(HRMSConstants.HRMS_USER_SEARCH_CRITERA_USERNAME);
+ List mobileNumberList = null;
+ List usernameList = null;
+ if(!StringUtils.isEmpty(mobileNumber)) {
+ mobileNumberList = Collections.singletonList(mobileNumber);
+ }
+ if(!StringUtils.isEmpty(username)) {
+ usernameList = Collections.singletonList(username);
+ }
IndividualSearchRequest request = IndividualSearchRequest.builder()
.requestInfo(requestInfo)
.individual(IndividualSearch.builder()
- .mobileNumber((String) userSearchCriteria.get("mobileNumber"))
+ .mobileNumber(
+ mobileNumberList
+ )
.id((List) userSearchCriteria.get("uuid"))
.roleCodes((List) userSearchCriteria.get("roleCodes"))
- .username((String) userSearchCriteria.get(HRMSConstants.HRMS_USER_SEARCH_CRITERA_USERNAME))
+ .username(usernameList)
// given name
.individualName((String) userSearchCriteria
.get(HRMSConstants.HRMS_USER_SEARCH_CRITERA_NAME))
diff --git a/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/EgovOfflineSearchModel.java b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/EgovOfflineSearchModel.java
new file mode 100644
index 00000000000..e744771def2
--- /dev/null
+++ b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/EgovOfflineSearchModel.java
@@ -0,0 +1,20 @@
+package org.egov.hrms.web.models;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@SuperBuilder
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class EgovOfflineSearchModel extends EgovSearchModel {
+ @JsonProperty("clientReferenceId")
+ private List clientReferenceId = null;
+}
diff --git a/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/EgovSearchModel.java b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/EgovSearchModel.java
new file mode 100644
index 00000000000..ae080fbcc57
--- /dev/null
+++ b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/EgovSearchModel.java
@@ -0,0 +1,22 @@
+package org.egov.hrms.web.models;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.validation.Valid;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@SuperBuilder
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class EgovSearchModel {
+ @JsonProperty("id")
+ @Valid
+ private List id = null;
+}
diff --git a/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/Exclude.java b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/Exclude.java
new file mode 100644
index 00000000000..aa7eae18a57
--- /dev/null
+++ b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/Exclude.java
@@ -0,0 +1,13 @@
+package org.egov.hrms.web.models;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+// This annotation is used to mark fields in a model class that should be ignored or excluded when the class is being processed,
+// specifically during serialization to JSON or when constructing database queries.
+public @interface Exclude {
+}
diff --git a/health-services/individual/src/main/java/org/egov/individual/web/models/IndividualSearch.java b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/IndividualSearch.java
similarity index 75%
rename from health-services/individual/src/main/java/org/egov/individual/web/models/IndividualSearch.java
rename to core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/IndividualSearch.java
index 9082e5bd0af..e4e3cb58e4d 100644
--- a/health-services/individual/src/main/java/org/egov/individual/web/models/IndividualSearch.java
+++ b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/IndividualSearch.java
@@ -1,49 +1,38 @@
-package org.egov.individual.web.models;
+package org.egov.hrms.web.models;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
-import io.swagger.annotations.ApiModel;
+import javax.validation.Valid;
+import javax.validation.constraints.DecimalMax;
+import javax.validation.constraints.DecimalMin;
+import javax.validation.constraints.Size;
import lombok.AllArgsConstructor;
-import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
-import org.egov.common.data.query.annotations.Exclude;
+import lombok.experimental.SuperBuilder;
import org.egov.common.models.individual.Gender;
import org.egov.common.models.individual.Identifier;
import org.egov.common.models.individual.Name;
import org.springframework.validation.annotation.Validated;
-import javax.validation.Valid;
-import javax.validation.constraints.DecimalMax;
-import javax.validation.constraints.DecimalMin;
-import javax.validation.constraints.Size;
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-
/**
* A representation of an Individual.
*/
- @ApiModel(description = "A representation of an Individual.")
@Validated
-@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-27T11:47:19.561+05:30")
-
@Data
@NoArgsConstructor
@AllArgsConstructor
-@Builder
- @JsonIgnoreProperties(ignoreUnknown = true)
-public class IndividualSearch {
- @JsonProperty("id")
- private List id = null;
-
+@SuperBuilder
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class IndividualSearch extends EgovOfflineSearchModel {
@JsonProperty("individualId")
private List individualId = null;
- @JsonProperty("clientReferenceId")
- private List clientReferenceId = null;
-
@JsonProperty("name")
@Valid
private Name name = null;
@@ -60,47 +49,36 @@ public class IndividualSearch {
private List mobileNumber = null;
@JsonProperty("socialCategory")
- @Exclude
private String socialCategory = null;
@JsonProperty("wardCode")
- @Exclude
private String wardCode = null;
@JsonProperty("individualName")
- @Exclude
private String individualName = null;
@JsonProperty("createdFrom")
- @Exclude
private BigDecimal createdFrom = null;
@JsonProperty("createdTo")
- @Exclude
private BigDecimal createdTo = null;
@JsonProperty("identifier")
@Valid
- @Exclude
private Identifier identifier = null;
@JsonProperty("boundaryCode")
- @Exclude
private String boundaryCode = null;
@JsonProperty("roleCodes")
- @Exclude
private List roleCodes = null;
- @Exclude
@JsonProperty("username")
private List username;
- @Exclude
@JsonProperty("userId")
private List userId;
- @Exclude
@JsonProperty("userUuid")
@Size(min = 1)
private List userUuid;
@@ -118,8 +96,8 @@ public class IndividualSearch {
private Double longitude;
/*
- * @value unit of measurement in Kilometer
- * */
+ * @value unit of measurement in Kilometer
+ * */
@Exclude
@JsonProperty("searchRadius")
@DecimalMin("0")
diff --git a/health-services/stock/src/main/java/org/egov/stock/web/models/StockSearchRequest.java b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/IndividualSearchRequest.java
similarity index 70%
rename from health-services/stock/src/main/java/org/egov/stock/web/models/StockSearchRequest.java
rename to core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/IndividualSearchRequest.java
index b1eeec0dabb..dd968c97f25 100644
--- a/health-services/stock/src/main/java/org/egov/stock/web/models/StockSearchRequest.java
+++ b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/IndividualSearchRequest.java
@@ -1,37 +1,37 @@
-package org.egov.stock.web.models;
+package org.egov.hrms.web.models;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.validation.annotation.Validated;
-import javax.validation.Valid;
-import javax.validation.constraints.NotNull;
-
/**
-* StockSearchRequest
+* IndividualSearchRequest
*/
@Validated
-@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30")
+
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
-public class StockSearchRequest {
-
+public class IndividualSearchRequest {
@JsonProperty("RequestInfo")
@NotNull
@Valid
private org.egov.common.contract.request.RequestInfo requestInfo = null;
- @JsonProperty("Stock")
+ @JsonProperty("Individual")
@NotNull
@Valid
- private StockSearch stock = null;
+ private IndividualSearch individual = null;
+
+
}
diff --git a/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/boundary/Boundary.java b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/boundary/Boundary.java
new file mode 100644
index 00000000000..4972888a0fc
--- /dev/null
+++ b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/boundary/Boundary.java
@@ -0,0 +1,44 @@
+package org.egov.hrms.web.models.boundary;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.JsonNode;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.egov.hrms.model.AuditDetails;
+import org.springframework.validation.annotation.Validated;
+
+/**
+ * Boundary
+ */
+@Validated
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class Boundary {
+
+ @JsonProperty("id")
+ private String id = null;
+
+ @JsonProperty("tenantId")
+ private String tenantId = null;
+
+ @JsonProperty("code")
+ @NotNull
+ private String code = null;
+
+ @JsonProperty("geometry")
+ @Valid
+ private JsonNode geometry = null;
+
+ @JsonProperty("auditDetails")
+ private AuditDetails auditDetails = null;
+
+ @JsonProperty("additionalDetails")
+ private JsonNode additionalDetails = null;
+}
diff --git a/health-services/project/src/main/java/org/egov/project/web/models/ProjectSearchRequest.java b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/boundary/BoundaryRequest.java
similarity index 63%
rename from health-services/project/src/main/java/org/egov/project/web/models/ProjectSearchRequest.java
rename to core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/boundary/BoundaryRequest.java
index a0dbf1c361c..a9f4c40be39 100644
--- a/health-services/project/src/main/java/org/egov/project/web/models/ProjectSearchRequest.java
+++ b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/boundary/BoundaryRequest.java
@@ -1,6 +1,10 @@
-package org.egov.project.web.models;
+package org.egov.hrms.web.models.boundary;
+
+import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -9,31 +13,25 @@
import org.egov.common.contract.request.RequestInfo;
import org.springframework.validation.annotation.Validated;
-import javax.validation.Valid;
-import javax.validation.constraints.NotNull;
-
/**
-* ProjectSearchRequest
-*/
+ * BoundaryRequest
+ */
@Validated
-@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30")
-
+@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-10-16T17:02:11.361704+05:30[Asia/Kolkata]")
@Data
-@NoArgsConstructor
@AllArgsConstructor
+@NoArgsConstructor
@Builder
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class ProjectSearchRequest {
+public class BoundaryRequest {
@JsonProperty("RequestInfo")
- @NotNull
@Valid
private RequestInfo requestInfo = null;
- @JsonProperty("Project")
- @NotNull
@Valid
- private ProjectSearch project = null;
+ @NotNull
+ @JsonProperty("Boundary")
+ @Size(min = 1, max = 300)
+ private List boundary = null;
}
-
diff --git a/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/boundary/BoundaryResponse.java b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/boundary/BoundaryResponse.java
new file mode 100644
index 00000000000..942e4b5f392
--- /dev/null
+++ b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/boundary/BoundaryResponse.java
@@ -0,0 +1,43 @@
+package org.egov.hrms.web.models.boundary;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.Valid;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.egov.common.contract.response.ResponseInfo;
+import org.springframework.validation.annotation.Validated;
+
+/**
+ * BoundaryResponse
+ */
+@Validated
+@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-10-16T17:02:11.361704+05:30[Asia/Kolkata]")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class BoundaryResponse {
+
+ @JsonProperty("ResponseInfo")
+ @Valid
+ private ResponseInfo responseInfo = null;
+
+ @JsonProperty("Boundary")
+ @Valid
+ private List boundary = null;
+
+
+ public BoundaryResponse addBoundaryItem(Boundary boundaryItem) {
+ if (this.boundary == null) {
+ this.boundary = new ArrayList<>();
+ }
+ this.boundary.add(boundaryItem);
+ return this;
+ }
+
+}
diff --git a/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/boundary/BoundarySearchCriteria.java b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/boundary/BoundarySearchCriteria.java
new file mode 100644
index 00000000000..6a9ccaf34dc
--- /dev/null
+++ b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/models/boundary/BoundarySearchCriteria.java
@@ -0,0 +1,37 @@
+package org.egov.hrms.web.models.boundary;
+
+import java.util.List;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+
+@Validated
+@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-10-16T17:02:11.361704+05:30[Asia/Kolkata]")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class BoundarySearchCriteria {
+
+ @NotNull
+ @Size(min = 1)
+ @JsonProperty("codes")
+ private List codes;
+
+ @NotNull
+ @JsonProperty("tenantId")
+ private String tenantId;
+
+ @JsonProperty("offset")
+ private Integer offset;
+
+ @JsonProperty("limit")
+ private Integer limit;
+
+}
diff --git a/core-services/egov-hrms/src/main/java/org/egov/hrms/web/validator/EmployeeValidator.java b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/validator/EmployeeValidator.java
index 1494f83bdbc..d2577ef8540 100644
--- a/core-services/egov-hrms/src/main/java/org/egov/hrms/web/validator/EmployeeValidator.java
+++ b/core-services/egov-hrms/src/main/java/org/egov/hrms/web/validator/EmployeeValidator.java
@@ -1,17 +1,32 @@
package org.egov.hrms.web.validator;
-import java.util.*;
-import java.util.stream.Collectors;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
import com.jayway.jsonpath.JsonPath;
+import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.egov.common.contract.request.RequestInfo;
import org.egov.common.contract.request.Role;
import org.egov.hrms.config.PropertiesManager;
-import org.egov.hrms.model.*;
+import org.egov.hrms.model.Assignment;
+import org.egov.hrms.model.DeactivationDetails;
+import org.egov.hrms.model.DepartmentalTest;
+import org.egov.hrms.model.EducationalQualification;
+import org.egov.hrms.model.Employee;
+import org.egov.hrms.model.Jurisdiction;
+import org.egov.hrms.model.ReactivationDetails;
+import org.egov.hrms.model.ServiceHistory;
+import org.egov.hrms.repository.RestCallRepository;
import org.egov.hrms.service.EmployeeService;
import org.egov.hrms.service.MDMSService;
import org.egov.hrms.service.UserService;
@@ -22,14 +37,13 @@
import org.egov.hrms.web.contract.EmployeeResponse;
import org.egov.hrms.web.contract.EmployeeSearchCriteria;
import org.egov.hrms.web.contract.UserResponse;
+import org.egov.hrms.web.models.boundary.BoundaryResponse;
import org.egov.mdms.model.MdmsResponse;
import org.egov.tracer.model.CustomException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
-import lombok.extern.slf4j.Slf4j;
-
import static org.egov.hrms.utils.ErrorConstants.CITIZEN_TYPE_CODE;
@Service
@@ -51,6 +65,9 @@ public class EmployeeValidator {
@Autowired
private HRMSUtils hrmsUtils;
+ @Autowired
+ private RestCallRepository restCallRepository;
+
/**
* Validates employee request for create. Validations include:
* 1. Validating MDMS codes
@@ -65,6 +82,7 @@ public void validateCreateEmployee(EmployeeRequest request) {
if(!CollectionUtils.isEmpty(errorMap.keySet()))
throw new CustomException(errorMap);
Map> boundaryMap = getBoundaryList(request.getRequestInfo(),request.getEmployees().get(0));
+ //FIXME hierarchy type has to be validated
Map> mdmsData = mdmsService.getMDMSData(request.getRequestInfo(), request.getEmployees().get(0).getTenantId());
if(!CollectionUtils.isEmpty(mdmsData.keySet())){
request.getEmployees().stream().forEach(employee -> validateMdmsData(employee, errorMap, mdmsData,boundaryMap));
@@ -97,25 +115,42 @@ public Map> getBoundaryList(RequestInfo requestInfo,Employe
}
List boundaryResponseList = new ArrayList<>();
- for(String boundary: boundarytList){
- MdmsResponse responseLoc = mdmsService.fetchMDMSDataLoc(requestInfo, boundary);
- if(!CollectionUtils.isEmpty(responseLoc.getMdmsRes()))
- boundaryResponseList.add(responseLoc);
- }
-
- if(!CollectionUtils.isEmpty(boundaryResponseList)){
- List tenantBoundaryData = new ArrayList<>();
- for(MdmsResponse responseLoc : boundaryResponseList){
- if(!CollectionUtils.isEmpty(responseLoc.getMdmsRes().keySet())) {
- if(null != responseLoc.getMdmsRes().get(HRMSConstants.HRMS_MDMS_EGOV_LOCATION_MASTERS_CODE)) {
- eachMasterMap = (Map) responseLoc.getMdmsRes().get(HRMSConstants.HRMS_MDMS_EGOV_LOCATION_MASTERS_CODE);
- tenantBoundaryData.addAll(eachMasterMap.get(HRMSConstants.HRMS_MDMS_TENANT_BOUNDARY_CODE));
- }
- }
+// for(String boundary: boundarytList){
+// MdmsResponse responseLoc = mdmsService.fetchMDMSDataLoc(requestInfo, boundary);
+// BoundaryResponse boundarySearchResponse = serviceRequestClient.fetchResult(
+// new StringBuilder(propertiesManager.getBoundaryServiceHost()
+// + propertiesManager.getBoundarySearchUrl()
+// +"?limit=" + boundaries.size()
+// + "&offset=0&tenantId=" + tenantId
+// + "&codes=" + String.join(",", boundaries)),
+// request.getRequestInfo(),
+// BoundaryResponse.class
+// );
+// if(!CollectionUtils.isEmpty(responseLoc.getMdmsRes()))
+// boundaryResponseList.add(responseLoc);
+// }
+
+ if(!CollectionUtils.isEmpty(boundarytList)) {
+ try {
+ BoundaryResponse boundarySearchResponse = restCallRepository.fetchResult(
+ new StringBuilder(propertiesManager.getBoundaryServiceHost()
+ + propertiesManager.getBoundarySearchUrl()
+ +"?limit=" + boundarytList.size()
+ + "&offset=0&tenantId=" + employee.getTenantId()
+ + "&codes=" + String.join(",", boundarytList)),
+ requestInfo,
+ BoundaryResponse.class
+ );
+ masterData.put(HRMSConstants.HRMS_MDMS_TENANT_BOUNDARY_CODE, boundarySearchResponse.getBoundary().stream()
+ .map(boundary -> boundary.getCode())
+ .collect(Collectors.toList())
+ );
+ log.info("successfully fetch boundary");
+ } catch (Exception e) {
+ log.error("error while fetching boundary");
}
- if(!CollectionUtils.isEmpty(tenantBoundaryData))
- masterData.put(HRMSConstants.HRMS_MDMS_TENANT_BOUNDARY_CODE,tenantBoundaryData);
}
+
return masterData;
}
@@ -276,7 +311,7 @@ private void validateMdmsData(Employee employee, Map errorMap, M
validateEmployee(employee, errorMap, mdmsData);
validateAssignments(employee, errorMap, mdmsData);
validateServiceHistory(employee, errorMap, mdmsData);
- validateJurisdicton(employee, errorMap, mdmsData, boundaryMap);
+// validateJurisdicton(employee, errorMap, mdmsData, boundaryMap);
validateEducationalDetails(employee, errorMap, mdmsData);
validateDepartmentalTest(employee, errorMap, mdmsData);
}
diff --git a/core-services/egov-hrms/src/main/resources/application.properties b/core-services/egov-hrms/src/main/resources/application.properties
index ece32eba711..dcece925352 100644
--- a/core-services/egov-hrms/src/main/resources/application.properties
+++ b/core-services/egov-hrms/src/main/resources/application.properties
@@ -115,4 +115,9 @@ log4j.logger.org.springframework.jdbc.core = TRACE
state.level.tenant.id=default
-egov.hrms.auto.generate.password=true
\ No newline at end of file
+egov.hrms.auto.generate.password=true
+
+# BOUNDARY SERVICE
+egov.boundary.host=http://localhost:8081
+egov.boundary.search.url=/boundary-service/boundary/_search
+egov.boundary.hierarchy=HCM-Moz-Hierarchy
\ No newline at end of file
diff --git a/docs/health-api-specs/contracts/referral-management.yml b/docs/health-api-specs/contracts/referral-management.yml
index 2c2eeeab57f..af73191c0e1 100644
--- a/docs/health-api-specs/contracts/referral-management.yml
+++ b/docs/health-api-specs/contracts/referral-management.yml
@@ -675,6 +675,24 @@ definitions:
type: array
items:
type: string
+ sideEffectId:
+ type: array
+ items:
+ type: string
+ sideEffectClientReferenceId:
+ type: array
+ items:
+ type: string
+ referrerId:
+ type: array
+ items:
+ type: string
+ recipientId:
+ type: array
+ items:
+ type: string
+
+
ReferralSearchRequest:
type: object
properties:
diff --git a/health-services/facility/CHANGELOG.md b/health-services/facility/CHANGELOG.md
index 645e12b40e1..3dd4374a248 100644
--- a/health-services/facility/CHANGELOG.md
+++ b/health-services/facility/CHANGELOG.md
@@ -1,4 +1,6 @@
All notable changes to this module will be documented in this file.
+## 1.1.1 - 2024-05-10
+- Integrated Boundary v2 functionality
## 1.0.0
diff --git a/health-services/facility/pom.xml b/health-services/facility/pom.xml
index 3c81500312d..f95fffa375d 100644
--- a/health-services/facility/pom.xml
+++ b/health-services/facility/pom.xml
@@ -5,16 +5,17 @@
facility
jar
facility
- 1.1.0
+ 1.1.1
- 1.8
+ 17
${java.version}
${java.version}
+ 1.18.22
org.springframework.boot
spring-boot-starter-parent
- 2.2.6.RELEASE
+ 3.2.2
src/main/java
@@ -44,27 +45,18 @@
org.egov.common
health-services-common
- 1.0.8-SNAPSHOT
+ 1.0.16-SNAPSHOT
org.egov.common
health-services-models
- 1.0.15-SNAPSHOT
+ 1.0.20-SNAPSHOT
compile
- org.springframework.boot
- spring-boot-starter-data-redis
-
-
- io.lettuce
- lettuce-core
-
-
-
-
- redis.clients
- jedis
+ org.egov.services
+ tracer
+ 2.9.0-SNAPSHOT
org.flywaydb
@@ -90,17 +82,24 @@
org.projectlombok
lombok
+ ${lombok.version}
true
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jsr310
+ junit
+ junit
+ 4.13.2
+ test
+
+
+ jakarta.validation
+ jakarta.validation-api
+ 3.0.2
+ compile
-
- javax.validation
- validation-api
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
diff --git a/health-services/facility/src/main/java/org/egov/facility/config/FacilityConfiguration.java b/health-services/facility/src/main/java/org/egov/facility/config/FacilityConfiguration.java
index 503f83b2f32..d92cf5b04b7 100644
--- a/health-services/facility/src/main/java/org/egov/facility/config/FacilityConfiguration.java
+++ b/health-services/facility/src/main/java/org/egov/facility/config/FacilityConfiguration.java
@@ -35,4 +35,10 @@ public class FacilityConfiguration {
@Value("${facility.idgen.id.format}")
private String facilityIdFormat;
+
+ @Value("${egov.boundary.host}")
+ private String boundaryServiceHost;
+
+ @Value("${egov.boundary.search.url}")
+ private String boundarySearchUrl;
}
diff --git a/health-services/facility/src/main/java/org/egov/facility/config/MainConfiguration.java b/health-services/facility/src/main/java/org/egov/facility/config/MainConfiguration.java
index 34cf8965b63..0c88de6e214 100644
--- a/health-services/facility/src/main/java/org/egov/facility/config/MainConfiguration.java
+++ b/health-services/facility/src/main/java/org/egov/facility/config/MainConfiguration.java
@@ -22,7 +22,7 @@
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import java.util.TimeZone;
@Import({TracerConfiguration.class})
@Configuration
diff --git a/health-services/facility/src/main/java/org/egov/facility/repository/rowmapper/FacilityRowMapper.java b/health-services/facility/src/main/java/org/egov/facility/repository/rowmapper/FacilityRowMapper.java
index 4ab51ba5ed3..3517293adcf 100644
--- a/health-services/facility/src/main/java/org/egov/facility/repository/rowmapper/FacilityRowMapper.java
+++ b/health-services/facility/src/main/java/org/egov/facility/repository/rowmapper/FacilityRowMapper.java
@@ -1,19 +1,19 @@
package org.egov.facility.repository.rowmapper;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import digit.models.coremodels.AuditDetails;
-import org.egov.common.models.facility.AdditionalFields;
+import org.egov.common.models.core.AdditionalFields;
import org.egov.common.models.facility.Address;
import org.egov.common.models.facility.AddressType;
-import org.egov.common.models.facility.Boundary;
+import org.egov.common.models.core.Boundary;
import org.egov.common.models.facility.Facility;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
@Component
public class FacilityRowMapper implements RowMapper {
diff --git a/health-services/facility/src/main/java/org/egov/facility/service/FacilityService.java b/health-services/facility/src/main/java/org/egov/facility/service/FacilityService.java
index 9f40852ecdf..04cf66e5760 100644
--- a/health-services/facility/src/main/java/org/egov/facility/service/FacilityService.java
+++ b/health-services/facility/src/main/java/org/egov/facility/service/FacilityService.java
@@ -11,6 +11,7 @@
import org.egov.facility.config.FacilityConfiguration;
import org.egov.facility.repository.FacilityRepository;
import org.egov.facility.service.enrichment.FacilityEnrichmentService;
+import org.egov.facility.validator.FBoundaryValidator;
import org.egov.facility.validator.FIsDeletedValidator;
import org.egov.facility.validator.FNonExistentValidator;
import org.egov.facility.validator.FNullIdValidator;
@@ -52,12 +53,16 @@ public class FacilityService {
private final FacilityEnrichmentService enrichmentService;
+ private final Predicate> isApplicableForCreate =
+ validator -> validator.getClass().equals(FBoundaryValidator.class);
+
private final Predicate> isApplicableForUpdate =
validator -> validator.getClass().equals(FIsDeletedValidator.class)
- || validator.getClass().equals(FNonExistentValidator.class)
- || validator.getClass().equals(FNullIdValidator.class)
- || validator.getClass().equals(FRowVersionValidator.class)
- || validator.getClass().equals(FUniqueEntityValidator.class);
+ || validator.getClass().equals(FBoundaryValidator.class)
+ || validator.getClass().equals(FNonExistentValidator.class)
+ || validator.getClass().equals(FNullIdValidator.class)
+ || validator.getClass().equals(FRowVersionValidator.class)
+ || validator.getClass().equals(FUniqueEntityValidator.class);
private final Predicate> isApplicableForDelete =
validator -> validator.getClass().equals(FNonExistentValidator.class)
@@ -83,9 +88,12 @@ public Facility create(FacilityRequest request) {
public List create(FacilityBulkRequest request, boolean isBulk) {
log.info("starting create method for facility");
- Map errorDetailsMap = new HashMap<>();
- List validEntities = request.getFacilities();
+ Tuple, Map> tuple = validate(validators,
+ isApplicableForCreate, request, SET_FACILITIES, GET_FACILITIES, VALIDATION_ERROR,
+ isBulk);
+ Map errorDetailsMap = tuple.getY();
+ List validEntities = tuple.getX();
try {
if (!validEntities.isEmpty()) {
log.info("processing {} valid entities", validEntities.size());
diff --git a/health-services/facility/src/main/java/org/egov/facility/validator/FBoundaryValidator.java b/health-services/facility/src/main/java/org/egov/facility/validator/FBoundaryValidator.java
new file mode 100644
index 00000000000..dc0dc2b157d
--- /dev/null
+++ b/health-services/facility/src/main/java/org/egov/facility/validator/FBoundaryValidator.java
@@ -0,0 +1,127 @@
+package org.egov.facility.validator;
+
+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 lombok.extern.slf4j.Slf4j;
+import org.egov.common.http.client.ServiceRequestClient;
+import org.egov.common.models.Error;
+import org.egov.common.models.core.Boundary;
+import org.egov.common.models.facility.Facility;
+import org.egov.common.models.facility.FacilityBulkRequest;
+import org.egov.common.validator.Validator;
+import org.egov.facility.config.FacilityConfiguration;
+import org.egov.facility.web.models.boundary.BoundaryResponse;
+import org.egov.tracer.model.CustomException;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import static org.egov.common.utils.CommonUtils.populateErrorDetails;
+
+/**
+ * Validator class for validating facility boundaries.
+ */
+@Component
+@Order(value = 4)
+@Slf4j
+public class FBoundaryValidator implements Validator {
+
+ private final ServiceRequestClient serviceRequestClient;
+
+ private final FacilityConfiguration facilityConfiguration;
+
+ /**
+ * Constructor to initialize the HBoundaryValidator.
+ *
+ * @param serviceRequestClient Service request client for making HTTP requests
+ * @param facilityConfiguration Configuration properties for the facility module
+ */
+ public FBoundaryValidator(ServiceRequestClient serviceRequestClient, FacilityConfiguration facilityConfiguration) {
+ this.serviceRequestClient = serviceRequestClient;
+ this.facilityConfiguration = facilityConfiguration;
+ }
+
+ /**
+ * Validates the facilities' boundaries.
+ *
+ * @param request the bulk request containing facilities
+ * @return a map containing facilities with their corresponding list of errors
+ */
+ @Override
+ public Map> validate(FacilityBulkRequest request) {
+ log.debug("Validating facilities boundaries.");
+ // Create a HashMap to store error details for each facility
+ HashMap> errorDetailsMap = new HashMap<>();
+
+ // Filter facilities with non-null addresses
+ List entitiesWithValidBoundaries = request.getFacilities().parallelStream()
+ .filter(facility -> Objects.nonNull(facility.getAddress()))
+ .filter(facility -> Objects.nonNull(facility.getAddress().getLocality())) // Exclude null locality codes
+ .collect(Collectors.toList());
+
+ Map> tenantIdFacilityMap = entitiesWithValidBoundaries.stream().collect(Collectors.groupingBy(Facility::getTenantId));
+
+ tenantIdFacilityMap.forEach((tenantId, facilities) -> {
+ // Group facilities by locality code
+ Map> boundaryCodeFacilitysMap = facilities.stream()
+ .collect(Collectors.groupingBy(
+ facility -> facility.getAddress().getLocality().getCode() // Group by locality code
+ ));
+
+ List boundaries = new ArrayList<>(boundaryCodeFacilitysMap.keySet());
+ if(!CollectionUtils.isEmpty(boundaries)) {
+ try {
+ // Fetch boundary details from the service
+ log.debug("Fetching boundary details for tenantId: {}, boundaries: {}", tenantId, boundaries);
+ BoundaryResponse boundarySearchResponse = serviceRequestClient.fetchResult(
+ new StringBuilder(facilityConfiguration.getBoundaryServiceHost()
+ + facilityConfiguration.getBoundarySearchUrl()
+ +"?limit=" + boundaries.size()
+ + "&offset=0&tenantId=" + tenantId
+ + "&codes=" + String.join(",", boundaries)),
+ request.getRequestInfo(),
+ BoundaryResponse.class
+ );
+ log.debug("Boundary details fetched successfully for tenantId: {}", tenantId);
+
+ List invalidBoundaryCodes = new ArrayList<>(boundaries);
+ invalidBoundaryCodes.removeAll(boundarySearchResponse.getBoundary().stream()
+ .map(Boundary::getCode)
+ .collect(Collectors.toList())
+ );
+
+ // Filter out facilities with invalid boundary codes
+ List facilitiesWithInvalidBoundaries = boundaryCodeFacilitysMap.entrySet().stream()
+ .filter(entry -> invalidBoundaryCodes.contains(entry.getKey())) // filter invalid boundary codes
+ .flatMap(entry -> entry.getValue().stream()) // Flatten the list of facilities
+ .collect(Collectors.toList());
+
+
+ facilitiesWithInvalidBoundaries.forEach(facility -> {
+ // Create an error object for facilities with invalid boundaries
+ Error error = Error.builder()
+ .errorMessage("Boundary code does not exist in db")
+ .errorCode("NON_EXISTENT_ENTITY")
+ .type(Error.ErrorType.NON_RECOVERABLE)
+ .exception(new CustomException("NON_EXISTENT_ENTITY", "Boundary code does not exist in db"))
+ .build();
+ // Populate error details for the facility
+ populateErrorDetails(facility, error, errorDetailsMap);
+ });
+
+ } catch (Exception e) {
+ log.error("Exception while searching boundaries for tenantId: {}", tenantId, e);
+ // Throw a custom exception if an error occurs during boundary search
+ throw new CustomException("BOUNDARY_SEARCH_ERROR", e.getMessage());
+ }
+ }
+ });
+
+ return errorDetailsMap;
+ }
+}
diff --git a/health-services/facility/src/main/java/org/egov/facility/web/controllers/FacilityApiController.java b/health-services/facility/src/main/java/org/egov/facility/web/controllers/FacilityApiController.java
index c7db346d9a6..3ca37071ca8 100644
--- a/health-services/facility/src/main/java/org/egov/facility/web/controllers/FacilityApiController.java
+++ b/health-services/facility/src/main/java/org/egov/facility/web/controllers/FacilityApiController.java
@@ -1,9 +1,14 @@
package org.egov.facility.web.controllers;
+import java.util.List;
+
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.ApiParam;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.validation.Valid;
import org.egov.common.contract.response.ResponseInfo;
+import org.egov.common.models.core.URLParams;
import org.egov.common.models.facility.Facility;
import org.egov.common.models.facility.FacilityBulkRequest;
import org.egov.common.models.facility.FacilityBulkResponse;
@@ -18,19 +23,10 @@
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.validation.Valid;
-import javax.validation.constraints.Max;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
-import java.util.List;
-
-@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30")
@Controller
@RequestMapping("")
@@ -111,11 +107,17 @@ public ResponseEntity facilityV1DeletePost(@ApiParam(value = "
}
@RequestMapping(value = "/v1/_search", method = RequestMethod.POST)
- public ResponseEntity facilityV1SearchPost(@ApiParam(value = "Details for existing facility.", required = true) @Valid @RequestBody FacilitySearchRequest request, @NotNull
- @Min(0)
- @Max(1000) @ApiParam(value = "Pagination - limit records in response", required = true) @Valid @RequestParam(value = "limit", required = true) Integer limit, @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 @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) throws Exception {
- List facilities = facilityService.search(request, limit, offset, tenantId, lastChangedSince, includeDeleted);
+ public ResponseEntity facilityV1SearchPost(
+ @Valid @ModelAttribute URLParams urlParams,
+ @ApiParam(value = "Details for existing facility.", required = true) @Valid @RequestBody FacilitySearchRequest request
+ ) throws Exception {
+ List facilities = facilityService.search(
+ request,
+ urlParams.getLimit(),
+ urlParams.getOffset(),
+ urlParams.getTenantId(),
+ urlParams.getLastChangedSince(),
+ urlParams.getIncludeDeleted());
FacilityBulkResponse response = FacilityBulkResponse.builder().responseInfo(ResponseInfoFactory
.createResponseInfo(request.getRequestInfo(), true)).facilities(facilities).build();
diff --git a/health-services/facility/src/main/java/org/egov/facility/web/models/boundary/BoundaryRequest.java b/health-services/facility/src/main/java/org/egov/facility/web/models/boundary/BoundaryRequest.java
new file mode 100644
index 00000000000..78efab9d986
--- /dev/null
+++ b/health-services/facility/src/main/java/org/egov/facility/web/models/boundary/BoundaryRequest.java
@@ -0,0 +1,38 @@
+package org.egov.facility.web.models.boundary;
+
+import java.util.List;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.egov.common.contract.request.RequestInfo;
+import org.egov.common.models.core.Boundary;
+import org.springframework.validation.annotation.Validated;
+
+/**
+ * BoundaryRequest
+ */
+@Validated
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class BoundaryRequest {
+
+ @JsonProperty("RequestInfo")
+ @Valid
+ private RequestInfo requestInfo = null;
+
+ @Valid
+ @NotNull
+ @JsonProperty("Boundary")
+ @Size(min = 1, max = 300)
+ private List boundary = null;
+
+}
diff --git a/health-services/facility/src/main/java/org/egov/facility/web/models/boundary/BoundaryResponse.java b/health-services/facility/src/main/java/org/egov/facility/web/models/boundary/BoundaryResponse.java
new file mode 100644
index 00000000000..a05cd2437cd
--- /dev/null
+++ b/health-services/facility/src/main/java/org/egov/facility/web/models/boundary/BoundaryResponse.java
@@ -0,0 +1,44 @@
+package org.egov.facility.web.models.boundary;
+
+import java.util.ArrayList;
+import java.util.List;
+import jakarta.validation.Valid;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.egov.common.contract.response.ResponseInfo;
+import org.egov.common.models.core.Boundary;
+import org.springframework.validation.annotation.Validated;
+
+/**
+ * BoundaryResponse
+ */
+@Validated
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class BoundaryResponse {
+
+ @JsonProperty("ResponseInfo")
+ @Valid
+ private ResponseInfo responseInfo = null;
+
+ @JsonProperty("Boundary")
+ @Valid
+ private List boundary = null;
+
+
+ public BoundaryResponse addBoundaryItem(Boundary boundaryItem) {
+ if (this.boundary == null) {
+ this.boundary = new ArrayList<>();
+ }
+ this.boundary.add(boundaryItem);
+ return this;
+ }
+
+}
diff --git a/health-services/facility/src/main/java/org/egov/facility/web/models/boundary/BoundarySearchCriteria.java b/health-services/facility/src/main/java/org/egov/facility/web/models/boundary/BoundarySearchCriteria.java
new file mode 100644
index 00000000000..6f2780fa4c9
--- /dev/null
+++ b/health-services/facility/src/main/java/org/egov/facility/web/models/boundary/BoundarySearchCriteria.java
@@ -0,0 +1,37 @@
+package org.egov.facility.web.models.boundary;
+
+import java.util.List;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+
+@Validated
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class BoundarySearchCriteria {
+
+ @NotNull
+ @Size(min = 1)
+ @JsonProperty("codes")
+ private List codes;
+
+ @NotNull
+ @JsonProperty("tenantId")
+ private String tenantId;
+
+ @JsonProperty("offset")
+ private Integer offset;
+
+ @JsonProperty("limit")
+ private Integer limit;
+
+}
diff --git a/health-services/facility/src/main/resources/application.properties b/health-services/facility/src/main/resources/application.properties
index 6e8b6a05ae0..f25c5a93406 100644
--- a/health-services/facility/src/main/resources/application.properties
+++ b/health-services/facility/src/main/resources/application.properties
@@ -80,3 +80,9 @@ facility.consumer.bulk.update.topic=update-facility-bulk-topic
facility.kafka.create.topic=save-facility-topic
facility.kafka.update.topic=update-facility-topic
facility.kafka.delete.topic=delete-facility-topic
+
+
+# BOUNDARY SERVICE
+egov.boundary.host=http://localhost:8081
+egov.boundary.search.url=/boundary-service/boundary/_search
+egov.boundary.hierarchy=HCM-Moz-Hierarchy
diff --git a/health-services/facility/src/test/java/org/egov/facility/helper/FacilityTestBuilder.java b/health-services/facility/src/test/java/org/egov/facility/helper/FacilityTestBuilder.java
index 8b4b27934fe..3a9eb405169 100644
--- a/health-services/facility/src/test/java/org/egov/facility/helper/FacilityTestBuilder.java
+++ b/health-services/facility/src/test/java/org/egov/facility/helper/FacilityTestBuilder.java
@@ -7,10 +7,10 @@
public class FacilityTestBuilder {
- private final Facility.FacilityBuilder builder;
+ private final Facility.FacilityBuilder builder;
public FacilityTestBuilder() {
- this.builder = Facility.builder();
+ this.builder = (Facility.FacilityBuilder) Facility.builder();
}
public static FacilityTestBuilder builder() {
diff --git a/health-services/household/CHANGELOG.md b/health-services/household/CHANGELOG.md
index 8e48fdafe66..23ba8116523 100644
--- a/health-services/household/CHANGELOG.md
+++ b/health-services/household/CHANGELOG.md
@@ -4,6 +4,9 @@ All notable changes to this module will be documented in this file.
- The following field were updated to accept list of search entities instead of single entity in HouseholdMemberSearch:
- householdId, householdClientReferenceId, individualId, and individualClientReferenceId
+## 1.1.2 - 2024-05-10
+- Integrated Boundary v2 functionality
+-
## 1.1.1 - 2023-11-15
- Added total count for household
diff --git a/health-services/household/pom.xml b/health-services/household/pom.xml
index 47a6a20c4de..3d9d0c4799e 100644
--- a/health-services/household/pom.xml
+++ b/health-services/household/pom.xml
@@ -7,14 +7,15 @@
household
1.1.1
- 1.8
+ 17
${java.version}
${java.version}
+ 1.18.22
org.springframework.boot
spring-boot-starter-parent
- 2.2.6.RELEASE
+ 3.2.2
src/main/java
@@ -44,28 +45,40 @@
org.egov.common
health-services-common
- 1.0.8-SNAPSHOT
+ 1.0.16-SNAPSHOT
org.egov.common
health-services-models
- 1.0.15-SNAPSHOT
+ 1.0.20-SNAPSHOT
compile
org.flywaydb
flyway-core
+ 9.22.3
org.postgresql
postgresql
- 42.2.2.jre7
+ 42.7.1
+
+
+ org.egov.services
+ tracer
+ 2.9.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-test
test
+
+ junit
+ junit
+ 4.13.2
+ test
+
io.swagger
swagger-core
@@ -75,6 +88,7 @@
org.projectlombok
lombok
+ ${lombok.version}
true
@@ -82,11 +96,6 @@
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
-
-
- javax.validation
- validation-api
-
diff --git a/health-services/household/src/main/java/org/egov/household/Constants.java b/health-services/household/src/main/java/org/egov/household/Constants.java
index c32122f155f..da512e39234 100644
--- a/health-services/household/src/main/java/org/egov/household/Constants.java
+++ b/health-services/household/src/main/java/org/egov/household/Constants.java
@@ -5,6 +5,8 @@ public interface Constants {
String GET_ID = "getId";
+ String GET_CLIENT_REFERENCE_ID = "getClientReferenceId";
+
String GET_INDIVIDUAL_ID = "getIndividualId";
String GET_INDIVIDUAL_CLIENT_REFERENCE_ID = "getIndividualClientReferenceId";
diff --git a/health-services/household/src/main/java/org/egov/household/config/HouseholdConfiguration.java b/health-services/household/src/main/java/org/egov/household/config/HouseholdConfiguration.java
index 889b1393141..c906d52786f 100644
--- a/health-services/household/src/main/java/org/egov/household/config/HouseholdConfiguration.java
+++ b/health-services/household/src/main/java/org/egov/household/config/HouseholdConfiguration.java
@@ -37,4 +37,9 @@ public class HouseholdConfiguration {
@Value("${household.idgen.id.format}")
private String idgenFormat;
+ @Value("${egov.boundary.host}")
+ private String boundaryServiceHost;
+
+ @Value("${egov.boundary.search.url}")
+ private String boundarySearchUrl;
}
diff --git a/health-services/household/src/main/java/org/egov/household/config/MainConfiguration.java b/health-services/household/src/main/java/org/egov/household/config/MainConfiguration.java
index c04b49176dd..edfc34ac8d6 100644
--- a/health-services/household/src/main/java/org/egov/household/config/MainConfiguration.java
+++ b/health-services/household/src/main/java/org/egov/household/config/MainConfiguration.java
@@ -22,7 +22,7 @@
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import java.util.TimeZone;
@Import({TracerConfiguration.class})
@Configuration
diff --git a/health-services/household/src/main/java/org/egov/household/household/member/validators/HmExistentEntityValidator.java b/health-services/household/src/main/java/org/egov/household/household/member/validators/HmExistentEntityValidator.java
new file mode 100644
index 00000000000..609001e7c71
--- /dev/null
+++ b/health-services/household/src/main/java/org/egov/household/household/member/validators/HmExistentEntityValidator.java
@@ -0,0 +1,77 @@
+package org.egov.household.household.member.validators;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.egov.common.models.Error;
+import org.egov.common.models.household.HouseholdMember;
+import org.egov.common.models.household.HouseholdMemberBulkRequest;
+import org.egov.common.models.household.HouseholdMemberSearch;
+import org.egov.common.validator.Validator;
+import org.egov.household.repository.HouseholdMemberRepository;
+import org.springframework.util.CollectionUtils;
+
+import static org.egov.common.utils.CommonUtils.getIdFieldName;
+import static org.egov.common.utils.CommonUtils.notHavingErrors;
+import static org.egov.common.utils.CommonUtils.populateErrorDetails;
+import static org.egov.common.utils.ValidatorUtils.getErrorForUniqueEntity;
+
+/**
+ * Validator class for checking the existence of entities with the given client reference IDs.
+ * This validator checks if the provided HouseholdMember entities already exist in the database based on their client reference IDs.
+ *
+ * @author kanishq-egov
+ */
+public class HmExistentEntityValidator implements Validator {
+
+ private final HouseholdMemberRepository householdMemberRepository;
+
+ /**
+ * Constructor to initialize the HouseholdMemberRepository dependency.
+ *
+ * @param householdMemberRepository The repository for HouseholdMember entities.
+ */
+ public HmExistentEntityValidator(HouseholdMemberRepository householdMemberRepository) {
+ this.householdMemberRepository = householdMemberRepository;
+ }
+
+ /**
+ * Validates the existence of entities with the given client reference IDs.
+ *
+ * @param request The bulk request containing HouseholdMember entities.
+ * @return A map containing HouseholdMember entities and their associated error details.
+ */
+ @Override
+ public Map> validate(HouseholdMemberBulkRequest request) {
+ // Map to hold HouseholdMember entities and their error details
+ Map> errorDetailsMap = new HashMap<>();
+ // Get the list of HouseholdMember entities from the request
+ List entities = request.getHouseholdMembers();
+ // Extract client reference IDs from HouseholdMember entities without errors
+ List clientReferenceIdList = entities.stream()
+ .filter(notHavingErrors())
+ .map(HouseholdMember::getClientReferenceId)
+ .collect(Collectors.toList());
+ // Create a search object for querying entities by client reference IDs
+ HouseholdMemberSearch householdSearch = HouseholdMemberSearch.builder()
+ .clientReferenceId(clientReferenceIdList)
+ .build();
+ // Check if the client reference ID list is not empty
+ if (!CollectionUtils.isEmpty(clientReferenceIdList)) {
+ // Query the repository to find existing entities by client reference IDs
+ List existentEntities = householdMemberRepository.findById(
+ clientReferenceIdList,
+ getIdFieldName(householdSearch),
+ Boolean.FALSE).getResponse();
+ // For each existing entity, populate error details for uniqueness
+ existentEntities.forEach(entity -> {
+ Error error = getErrorForUniqueEntity();
+ populateErrorDetails(entity, error, errorDetailsMap);
+ });
+ }
+ return errorDetailsMap;
+ }
+
+}
diff --git a/health-services/household/src/main/java/org/egov/household/household/member/validators/HmHouseholdHeadValidator.java b/health-services/household/src/main/java/org/egov/household/household/member/validators/HmHouseholdHeadValidator.java
index 6196b6328f4..09999669c9e 100644
--- a/health-services/household/src/main/java/org/egov/household/household/member/validators/HmHouseholdHeadValidator.java
+++ b/health-services/household/src/main/java/org/egov/household/household/member/validators/HmHouseholdHeadValidator.java
@@ -70,7 +70,7 @@ private void validateHeadOfHousehold(HouseholdMember householdMember, Method idM
log.info("validating if household already has a head");
List householdMembersHeadCheck = householdMemberRepository
.findIndividualByHousehold((String) ReflectionUtils.invokeMethod(idMethod, householdMember),
- columnName).stream().filter(HouseholdMember::getIsHeadOfHousehold)
+ columnName).getResponse().stream().filter(HouseholdMember::getIsHeadOfHousehold)
.collect(Collectors.toList());
if(!householdMembersHeadCheck.isEmpty()){
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 ad9e9c81e84..6c97049b779 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).getY();
+ List validHouseHoldIds = householdService.findById(houseHoldIds, columnName, false).getResponse();
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/household/member/validators/HmNonExistentEntityValidator.java b/health-services/household/src/main/java/org/egov/household/household/member/validators/HmNonExistentEntityValidator.java
index ee740ccab6e..e7b195dd694 100644
--- a/health-services/household/src/main/java/org/egov/household/household/member/validators/HmNonExistentEntityValidator.java
+++ b/health-services/household/src/main/java/org/egov/household/household/member/validators/HmNonExistentEntityValidator.java
@@ -1,22 +1,25 @@
package org.egov.household.household.member.validators;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
import lombok.extern.slf4j.Slf4j;
import org.egov.common.models.Error;
+import org.egov.common.models.household.Household;
import org.egov.common.models.household.HouseholdMember;
import org.egov.common.models.household.HouseholdMemberBulkRequest;
+import org.egov.common.models.household.HouseholdMemberSearch;
+import org.egov.common.models.household.HouseholdSearch;
import org.egov.common.validator.Validator;
import org.egov.household.repository.HouseholdMemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
import static org.egov.common.utils.CommonUtils.checkNonExistentEntities;
import static org.egov.common.utils.CommonUtils.getIdFieldName;
import static org.egov.common.utils.CommonUtils.getIdToObjMap;
@@ -27,6 +30,11 @@
import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity;
import static org.egov.household.Constants.GET_ID;
+/**
+ * Validator class for checking the non-existence of household members.
+ * This validator checks if the provided household members do not already exist in the database.
+ * @author kanishq-egov
+ */
@Component
@Order(value = 4)
@Slf4j
@@ -34,33 +42,78 @@ public class HmNonExistentEntityValidator implements Validator> validate(HouseholdMemberBulkRequest request) {
+ // Map to hold household members and their error details
Map> errorDetailsMap = new HashMap<>();
+ // Get the list of household members from the request
List householdMembers = request.getHouseholdMembers();
- log.info("validating non existent household member");
+ // Log message for validation process
+ log.info("Validating non-existent household members");
+ // Get class and method information for ID retrieval
Class> objClass = getObjClass(householdMembers);
Method idMethod = getMethod(GET_ID, objClass);
+ // Create a map of household members with their IDs as keys
Map iMap = getIdToObjMap(householdMembers
.stream().filter(notHavingErrors()).collect(Collectors.toList()), idMethod);
+ // Check if the map is not empty
+
+ // Lists to store IDs and client reference IDs
+ List idList = new ArrayList<>();
+ List clientReferenceIdList = new ArrayList<>();
+ // Extract IDs and client reference IDs from household entities
+ householdMembers.forEach(householdMember -> {
+ idList.add(householdMember.getId());
+ clientReferenceIdList.add(householdMember.getClientReferenceId());
+ });
+
if (!iMap.isEmpty()) {
+ // Extract IDs from the map
List householdMemberIds = new ArrayList<>(iMap.keySet());
- List existingHouseholdMembers = householdMemberRepository.findById(householdMemberIds,
- getIdFieldName(idMethod), false);
+ // Create a search object for querying existing entities
+ HouseholdMemberSearch householdMemberSearch = HouseholdMemberSearch.builder()
+ .clientReferenceId(clientReferenceIdList)
+ .id(idList)
+ .build();
+
+ List existingHouseholdMembers;
+ try {
+ // Query the repository to find existing entities
+ existingHouseholdMembers = householdMemberRepository.find(householdMemberSearch, householdMembers.size(), 0,
+ householdMembers.get(0).getTenantId(), null, false).getResponse();
+ } catch (Exception e) {
+ // Handle query builder exception
+ throw new RuntimeException(e);
+ }
+
+ // Check for non-existent household members
List nonExistentIndividuals = checkNonExistentEntities(iMap,
existingHouseholdMembers, idMethod);
+ // For each non-existent household member, populate error details
nonExistentIndividuals.forEach(householdMember -> {
Error error = getErrorForNonExistentEntity();
populateErrorDetails(householdMember, error, errorDetailsMap);
});
}
- log.info("household member non existent validation completed successfully, total errors: " + errorDetailsMap.size());
+ // Log message for validation completion
+ log.info("Household member non-existent validation completed successfully, total errors: " + errorDetailsMap.size());
return errorDetailsMap;
}
}
diff --git a/health-services/household/src/main/java/org/egov/household/household/member/validators/HmRowVersionValidator.java b/health-services/household/src/main/java/org/egov/household/household/member/validators/HmRowVersionValidator.java
index fb9ec3cdd98..18d77c76920 100644
--- a/health-services/household/src/main/java/org/egov/household/household/member/validators/HmRowVersionValidator.java
+++ b/health-services/household/src/main/java/org/egov/household/household/member/validators/HmRowVersionValidator.java
@@ -50,7 +50,7 @@ public Map> validate(HouseholdMemberBulkRequest req
if (!iMap.isEmpty()) {
List householdMemberIds = new ArrayList<>(iMap.keySet());
List existingHouseholdMembers = householdMemberRepository.findById(householdMemberIds,
- getIdFieldName(idMethod), false);
+ getIdFieldName(idMethod), false).getResponse();
List entitiesWithMismatchedRowVersion =
getEntitiesWithMismatchedRowVersion(iMap, existingHouseholdMembers, idMethod);
entitiesWithMismatchedRowVersion.forEach(householdMember -> {
diff --git a/health-services/household/src/main/java/org/egov/household/household/member/validators/HmUniqueIndividualValidator.java b/health-services/household/src/main/java/org/egov/household/household/member/validators/HmUniqueIndividualValidator.java
index 0d2f4682dce..535c842f81f 100644
--- a/health-services/household/src/main/java/org/egov/household/household/member/validators/HmUniqueIndividualValidator.java
+++ b/health-services/household/src/main/java/org/egov/household/household/member/validators/HmUniqueIndividualValidator.java
@@ -69,7 +69,7 @@ public Map> validate(HouseholdMemberBulkRequest hou
log.info("finding individuals mappings in household member");
List individualSearchResult = householdMemberRepository
- .findIndividual(individual.getId());
+ .findIndividual(individual.getId()).getResponse();
if(!individualSearchResult.isEmpty()) {
Error error = Error.builder().errorMessage(INDIVIDUAL_ALREADY_MEMBER_OF_HOUSEHOLD_MESSAGE)
.errorCode(INDIVIDUAL_ALREADY_MEMBER_OF_HOUSEHOLD)
diff --git a/health-services/household/src/main/java/org/egov/household/repository/HouseholdMemberRepository.java b/health-services/household/src/main/java/org/egov/household/repository/HouseholdMemberRepository.java
index 565a076eeef..c402d24c05e 100644
--- a/health-services/household/src/main/java/org/egov/household/repository/HouseholdMemberRepository.java
+++ b/health-services/household/src/main/java/org/egov/household/repository/HouseholdMemberRepository.java
@@ -1,9 +1,14 @@
package org.egov.household.repository;
import lombok.extern.slf4j.Slf4j;
+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.core.SearchResponse;
import org.egov.common.models.household.HouseholdMember;
+import org.egov.common.models.household.HouseholdMemberSearch;
import org.egov.common.producer.Producer;
import org.egov.household.repository.rowmapper.HouseholdMemberRowMapper;
import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +24,7 @@
import java.util.Optional;
import java.util.stream.Collectors;
+import static org.egov.common.utils.CommonUtils.constructTotalCountCTEAndReturnResult;
import static org.egov.common.utils.CommonUtils.getIdMethod;
@Repository
@@ -34,7 +40,56 @@ protected HouseholdMemberRepository(Producer producer,
super(producer, namedParameterJdbcTemplate, redisTemplate, selectQueryBuilder, householdMemberRowMapper, Optional.of("household_member"));
}
- public List findById(List ids, String columnName, Boolean includeDeleted) {
+
+ public SearchResponse find(HouseholdMemberSearch householdMemberSearch,
+ Integer limit,
+ Integer offset,
+ String tenantId,
+ Long lastChangedSince,
+ Boolean includeDeleted) {
+
+ Map paramsMap = new HashMap<>();
+ StringBuilder queryBuilder = new StringBuilder();
+
+ String query = "SELECT * FROM household_member";
+
+ List whereFields = GenericQueryBuilder.getFieldsWithCondition(householdMemberSearch, QueryFieldChecker.isNotNull, paramsMap);
+ query = GenericQueryBuilder.generateQuery(query, whereFields).toString().trim();
+
+ query = query + " AND tenantId=:tenantId ";
+
+ if (query.contains(this.tableName + " AND")) {
+ query = query.replace(this.tableName + " AND", this.tableName + " WHERE");
+ }
+
+ queryBuilder.append(query);
+
+ if (Boolean.FALSE.equals(includeDeleted)) {
+ queryBuilder.append("AND isDeleted=:isDeleted ");
+ }
+
+ if (lastChangedSince != null) {
+ queryBuilder.append("AND lastModifiedTime>=:lastModifiedTime ");
+ }
+
+ paramsMap.put("tenantId", tenantId);
+ paramsMap.put("isDeleted", includeDeleted);
+ paramsMap.put("lastModifiedTime", lastChangedSince);
+
+ queryBuilder.append(" ORDER BY id ASC ");
+
+ Long totalCount = constructTotalCountCTEAndReturnResult(queryBuilder.toString(), paramsMap, this.namedParameterJdbcTemplate);
+
+ queryBuilder.append(" LIMIT :limit OFFSET :offset");
+ paramsMap.put("limit", limit);
+ paramsMap.put("offset", offset);
+
+ List householdMembers = this.namedParameterJdbcTemplate.query(queryBuilder.toString(), paramsMap, this.rowMapper);
+
+ return SearchResponse.builder().totalCount(totalCount).response(householdMembers).build();
+ }
+
+ public SearchResponse findById(List ids, String columnName, Boolean includeDeleted) {
List objFound = findInCache(ids).stream()
.filter(entity -> entity.getIsDeleted().equals(includeDeleted))
.collect(Collectors.toList());
@@ -45,7 +100,7 @@ public List findById(List ids, String columnName, Boole
.collect(Collectors.toList()));
if (ids.isEmpty()) {
log.info("all objects were found in the cache, returning objects");
- return objFound;
+ return SearchResponse.builder().response(objFound).build();
}
}
@@ -59,23 +114,29 @@ public List findById(List ids, String columnName, Boole
objFound.addAll(this.namedParameterJdbcTemplate.query(query, paramMap, this.rowMapper));
putInCache(objFound);
log.info("returning objects from the database");
- return objFound;
+ return SearchResponse.builder().response(objFound).build();
}
- public List findIndividual(String individualId) {
+ public SearchResponse findIndividual(String individualId) {
log.info("searching for HouseholdMember with individualId: {}", individualId);
String query = "SELECT * FROM household_member where individualId = :individualId AND isDeleted = false";
Map paramMap = new HashMap();
paramMap.put("individualId", individualId);
- return this.namedParameterJdbcTemplate.query(query, paramMap, this.rowMapper);
+ List householdMembers = this.namedParameterJdbcTemplate.query(query, paramMap, this.rowMapper);
+ return SearchResponse.builder().totalCount(Long.valueOf(householdMembers.size())).response(householdMembers).build();
}
- public List findIndividualByHousehold(String householdId, String columnName) {
+ public SearchResponse findIndividualByHousehold(String householdId, String columnName) {
log.info("searching for HouseholdMembers with householdId: {}", householdId);
String query = String.format("SELECT * FROM household_member where %s = :householdId AND isDeleted = false",
columnName);
Map paramMap = new HashMap();
paramMap.put("householdId", householdId);
- return this.namedParameterJdbcTemplate.query(query, paramMap, this.rowMapper);
+
+ Long totalCount = constructTotalCountCTEAndReturnResult(query, paramMap, this.namedParameterJdbcTemplate);
+
+ List householdMembers = this.namedParameterJdbcTemplate.query(query, paramMap, this.rowMapper);
+
+ return SearchResponse.builder().totalCount(totalCount).response(householdMembers).build();
}
}
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 e6e0315956f..35ed43a136b 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,31 +1,31 @@
package org.egov.household.repository;
-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 lombok.extern.slf4j.Slf4j;
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.ds.Tuple;
+import org.egov.common.models.core.SearchResponse;
import org.egov.common.models.household.Household;
import org.egov.common.producer.Producer;
import org.egov.household.repository.rowmapper.HouseholdRowMapper;
-import org.egov.household.web.models.HouseholdSearch;
+import org.egov.common.models.household.HouseholdSearch;
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 lombok.extern.slf4j.Slf4j;
+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.constructTotalCountCTEAndReturnResult;
+import static org.egov.common.utils.CommonUtils.getIdMethod;
@Repository
@Slf4j
@@ -39,10 +39,10 @@ protected HouseholdRepository(Producer producer,
RedisTemplate redisTemplate,
SelectQueryBuilder selectQueryBuilder,
HouseholdRowMapper householdRowMapper) {
- super(producer, namedParameterJdbcTemplate, redisTemplate, selectQueryBuilder, householdRowMapper, Optional.of("household"));
+ super(producer, namedParameterJdbcTemplate, redisTemplate, selectQueryBuilder, householdRowMapper, Optional.of("household h"));
}
- public Tuple> findById(List ids, String columnName, Boolean includeDeleted) {
+ public SearchResponse findById(List ids, String columnName, Boolean includeDeleted) {
List objFound = findInCache(ids).stream()
.filter(entity -> entity.getIsDeleted().equals(includeDeleted))
.collect(Collectors.toList());
@@ -52,7 +52,7 @@ public Tuple> findById(List ids, String columnName
.map(obj -> (String) ReflectionUtils.invokeMethod(idMethod, obj))
.collect(Collectors.toList()));
if (ids.isEmpty()) {
- return new Tuple<>(Long.valueOf(objFound.size()), objFound);
+ return SearchResponse.builder().totalCount(Long.valueOf(objFound.size())).response(objFound).build();
}
}
@@ -63,14 +63,14 @@ public Tuple> findById(List ids, String columnName
Map paramMap = new HashMap();
paramMap.put("ids", ids);
- Long totalCount = constructTotalCountCTEAndReturnResult(query, paramMap);
+ Long totalCount = constructTotalCountCTEAndReturnResult(query, paramMap, this.namedParameterJdbcTemplate);
objFound.addAll(this.namedParameterJdbcTemplate.query(query, paramMap, this.rowMapper));
putInCache(objFound);
- return new Tuple<>(totalCount, objFound);
+ return SearchResponse.builder().totalCount(totalCount).response(objFound).build();
}
- public Tuple> find(HouseholdSearch searchObject, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted) throws QueryBuilderException {
+ public SearchResponse find(HouseholdSearch searchObject, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted) {
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<>();
@@ -91,12 +91,13 @@ public Tuple> find(HouseholdSearch searchObject, Integer l
paramsMap.put("isDeleted", includeDeleted);
paramsMap.put("lastModifiedTime", lastChangedSince);
- Long totalCount = constructTotalCountCTEAndReturnResult(query, paramsMap);
+ Long totalCount = constructTotalCountCTEAndReturnResult(query, paramsMap, this.namedParameterJdbcTemplate);
query = query + "ORDER BY h.id ASC LIMIT :limit OFFSET :offset";
paramsMap.put("limit", limit);
paramsMap.put("offset", offset);
- return new Tuple<>(totalCount, this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper));
+ List households = this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper);
+ return SearchResponse.builder().totalCount(totalCount).response(households).build();
}
/**
@@ -110,7 +111,7 @@ public Tuple> find(HouseholdSearch searchObject, Integer l
*
* Fetch all the household which falls under the radius provided using longitude and latitude provided.
*/
- public Tuple> findByRadius(HouseholdSearch searchObject, Integer limit, Integer offset, String tenantId, Boolean includeDeleted) throws QueryBuilderException {
+ public SearchResponse findByRadius(HouseholdSearch searchObject, Integer limit, Integer offset, String tenantId, Boolean includeDeleted) throws QueryBuilderException {
String query = searchCriteriaWaypointQuery +
"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 ";
@@ -130,22 +131,13 @@ public Tuple> findByRadius(HouseholdSearch searchObject, I
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 ";
+ query = query + " ORDER BY distance ASC";
+ Long totalCount = constructTotalCountCTEAndReturnResult(query, paramsMap, this.namedParameterJdbcTemplate);
+ query = query + " LIMIT :limit OFFSET :offset ";
paramsMap.put("limit", limit);
paramsMap.put("offset", offset);
- return new Tuple<>(totalCount, this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper));
+ List households = this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper);
+ return SearchResponse.builder().totalCount(totalCount).response(households).build();
}
- 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 -> {
- if(resultSet.next())
- return resultSet.getLong("totalRows");
- else
- return 0L;
- });
- }
-
-
}
diff --git a/health-services/household/src/main/java/org/egov/household/repository/rowmapper/HouseholdMemberRowMapper.java b/health-services/household/src/main/java/org/egov/household/repository/rowmapper/HouseholdMemberRowMapper.java
index f3b40cbee6f..79a762807ea 100644
--- a/health-services/household/src/main/java/org/egov/household/repository/rowmapper/HouseholdMemberRowMapper.java
+++ b/health-services/household/src/main/java/org/egov/household/repository/rowmapper/HouseholdMemberRowMapper.java
@@ -1,16 +1,16 @@
package org.egov.household.repository.rowmapper;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import digit.models.coremodels.AuditDetails;
-import org.egov.common.models.household.AdditionalFields;
+import org.egov.common.models.core.AdditionalFields;
import org.egov.common.models.household.HouseholdMember;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
@Component
public class HouseholdMemberRowMapper implements RowMapper {
private final ObjectMapper objectMapper = new ObjectMapper();
diff --git a/health-services/household/src/main/java/org/egov/household/repository/rowmapper/HouseholdRowMapper.java b/health-services/household/src/main/java/org/egov/household/repository/rowmapper/HouseholdRowMapper.java
index fe90675a387..be08e68e1d1 100644
--- a/health-services/household/src/main/java/org/egov/household/repository/rowmapper/HouseholdRowMapper.java
+++ b/health-services/household/src/main/java/org/egov/household/repository/rowmapper/HouseholdRowMapper.java
@@ -1,19 +1,19 @@
package org.egov.household.repository.rowmapper;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import digit.models.coremodels.AuditDetails;
-import org.egov.common.models.household.AdditionalFields;
+import org.egov.common.models.core.AdditionalFields;
import org.egov.common.models.household.Address;
import org.egov.common.models.household.AddressType;
-import org.egov.common.models.household.Boundary;
+import org.egov.common.models.core.Boundary;
import org.egov.common.models.household.Household;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
@Component
public class HouseholdRowMapper implements RowMapper {
private final ObjectMapper objectMapper = new ObjectMapper();
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 afcc8124b8f..ed07e4c8135 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
@@ -58,7 +58,7 @@ public void update(List householdMembers,
Map hMap = getIdToObjMap(householdMembers);
List householdMemberIds = new ArrayList<>(hMap.keySet());
List existingHouseholdMembers = householdMemberRepository.findById(householdMemberIds,
- "id", false);
+ "id", false).getResponse();
log.info("updating lastModifiedTime and lastModifiedBy");
enrichForUpdate(hMap, existingHouseholdMembers, beneficiaryRequest);
log.info("household Members updated successfully.");
@@ -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).getY();
+ List householdList = householdService.findById(houseHoldIds, columnName, false).getResponse();
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/service/HouseholdMemberService.java b/health-services/household/src/main/java/org/egov/household/service/HouseholdMemberService.java
index c1621e432cf..2f350d2be76 100644
--- a/health-services/household/src/main/java/org/egov/household/service/HouseholdMemberService.java
+++ b/health-services/household/src/main/java/org/egov/household/service/HouseholdMemberService.java
@@ -1,16 +1,24 @@
package org.egov.household.service;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
import lombok.extern.slf4j.Slf4j;
-import org.egov.common.data.query.exception.QueryBuilderException;
import org.egov.common.ds.Tuple;
import org.egov.common.http.client.ServiceRequestClient;
import org.egov.common.models.ErrorDetails;
+import org.egov.common.models.core.SearchResponse;
import org.egov.common.models.household.HouseholdMember;
import org.egov.common.models.household.HouseholdMemberBulkRequest;
import org.egov.common.models.household.HouseholdMemberRequest;
+import org.egov.common.models.household.HouseholdMemberSearch;
import org.egov.common.utils.CommonUtils;
import org.egov.common.validator.Validator;
import org.egov.household.config.HouseholdMemberConfiguration;
+import org.egov.household.household.member.validators.HmExistentEntityValidator;
import org.egov.household.household.member.validators.HmHouseholdHeadValidator;
import org.egov.household.household.member.validators.HmHouseholdValidator;
import org.egov.household.household.member.validators.HmIndividualValidator;
@@ -21,18 +29,11 @@
import org.egov.household.household.member.validators.HmUniqueEntityValidator;
import org.egov.household.household.member.validators.HmUniqueIndividualValidator;
import org.egov.household.repository.HouseholdMemberRepository;
-import org.egov.household.web.models.HouseholdMemberSearch;
import org.egov.tracer.model.CustomException;
import org.springframework.beans.factory.annotation.Autowired;
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;
@@ -73,6 +74,7 @@ public class HouseholdMemberService {
private final Predicate> isApplicableForCreate = validator ->
validator.getClass().equals(HmHouseholdValidator.class)
+ || validator.getClass().equals(HmExistentEntityValidator.class)
|| validator.getClass().equals(HmUniqueIndividualValidator.class)
|| validator.getClass().equals(HmHouseholdHeadValidator.class);
@@ -134,27 +136,31 @@ public List create(HouseholdMemberBulkRequest householdMemberBu
}
- public List search(HouseholdMemberSearch householdMemberSearch, Integer limit, Integer offset, String tenantId,
- Long lastChangedSince, Boolean includeDeleted) {
+ public SearchResponse search(HouseholdMemberSearch householdMemberSearch, Integer limit, Integer offset, String tenantId,
+ Long lastChangedSince, Boolean includeDeleted) {
String idFieldName = getIdFieldName(householdMemberSearch);
if (isSearchByIdOnly(householdMemberSearch, idFieldName)) {
List ids = (List) ReflectionUtils.invokeMethod(getIdMethod(Collections
.singletonList(householdMemberSearch)),
householdMemberSearch);
- List householdMembers = householdMemberRepository.findById(ids,
- idFieldName, includeDeleted).stream()
+ SearchResponse searchResponse = householdMemberRepository.findById(ids,
+ idFieldName, includeDeleted);
+ List householdMembers = searchResponse.getResponse().stream()
.filter(lastChangedSince(lastChangedSince))
.filter(havingTenantId(tenantId))
.filter(includeDeleted(includeDeleted))
.collect(Collectors.toList());
log.info("found {} household members for search by id", householdMembers.size());
- return householdMembers;
+
+ searchResponse.setResponse(householdMembers);
+
+ return searchResponse;
}
try {
return householdMemberRepository.find(householdMemberSearch, limit, offset,
tenantId, lastChangedSince, includeDeleted);
- } catch (QueryBuilderException e) {
+ } catch (Exception e) {
log.error("error in building query for household member search", e);
throw new CustomException("ERROR_IN_QUERY", e.getMessage());
}
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 5da1471730b..2fb2804f178 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
@@ -4,6 +4,7 @@
import org.egov.common.data.query.exception.QueryBuilderException;
import org.egov.common.ds.Tuple;
import org.egov.common.models.ErrorDetails;
+import org.egov.common.models.core.SearchResponse;
import org.egov.common.models.household.Household;
import org.egov.common.models.household.HouseholdBulkRequest;
import org.egov.common.models.household.HouseholdRequest;
@@ -12,12 +13,14 @@
import org.egov.common.validator.Validator;
import org.egov.household.config.HouseholdConfiguration;
import org.egov.household.repository.HouseholdRepository;
+import org.egov.household.validators.household.HExistentEntityValidator;
+import org.egov.household.validators.household.HBoundaryValidator;
import org.egov.household.validators.household.HIsDeletedValidator;
-import org.egov.household.validators.household.HNonExsistentEntityValidator;
+import org.egov.household.validators.household.HNonExistentEntityValidator;
import org.egov.household.validators.household.HNullIdValidator;
import org.egov.household.validators.household.HRowVersionValidator;
import org.egov.household.validators.household.HUniqueEntityValidator;
-import org.egov.household.web.models.HouseholdSearch;
+import org.egov.common.models.household.HouseholdSearch;
import org.egov.tracer.model.CustomException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -56,16 +59,21 @@ public class HouseholdService {
private final HouseholdEnrichmentService enrichmentService;
+ private final Predicate> isApplicableForCreate = validator ->
+ validator.getClass().equals(HBoundaryValidator.class)
+ || validator.getClass().equals(HExistentEntityValidator.class);
+
private final Predicate> isApplicableForUpdate = validator ->
validator.getClass().equals(HNullIdValidator.class)
+ || validator.getClass().equals(HBoundaryValidator.class)
|| validator.getClass().equals(HIsDeletedValidator.class)
|| validator.getClass().equals(HUniqueEntityValidator.class)
- || validator.getClass().equals(HNonExsistentEntityValidator.class)
+ || validator.getClass().equals(HNonExistentEntityValidator.class)
|| validator.getClass().equals(HRowVersionValidator.class);
private final Predicate> isApplicableForDelete = validator ->
validator.getClass().equals(HNullIdValidator.class)
- || validator.getClass().equals(HNonExsistentEntityValidator.class)
+ || validator.getClass().equals(HNonExistentEntityValidator.class)
|| validator.getClass().equals(HRowVersionValidator.class);
@Autowired
@@ -91,8 +99,11 @@ public Household create(HouseholdRequest request) {
public List create(HouseholdBulkRequest request, boolean isBulk) {
log.info("received request to create households");
- Map errorDetailsMap = new HashMap<>();
- List validEntities = request.getHouseholds();
+ Tuple, Map> tuple = validate(validators,
+ isApplicableForCreate, request,
+ isBulk);
+ Map errorDetailsMap = tuple.getY();
+ List validEntities = tuple.getX();
try {
if (!validEntities.isEmpty()) {
enrichmentService.create(validEntities, request);
@@ -108,34 +119,33 @@ public List create(HouseholdBulkRequest request, boolean isBulk) {
return request.getHouseholds();
}
- public Tuple> search(HouseholdSearch householdSearch, Integer limit, Integer offset, String tenantId,
- Long lastChangedSince, Boolean includeDeleted) {
+ public SearchResponse search(HouseholdSearch householdSearch, Integer limit, Integer offset, String tenantId,
+ Long lastChangedSince, Boolean includeDeleted) {
String idFieldName = getIdFieldName(householdSearch);
if (isSearchByIdOnly(householdSearch, idFieldName)) {
List ids = (List) ReflectionUtils.invokeMethod(getIdMethod(Collections
.singletonList(householdSearch)),
householdSearch);
- Tuple> householdsTuple = householdRepository.findById(ids,
+ SearchResponse householdsTuple = householdRepository.findById(ids,
idFieldName, includeDeleted);
- List households = householdsTuple.getY().stream()
+ List households = householdsTuple.getResponse().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 new Tuple<>(householdsTuple.getX(), households);
+ return SearchResponse.builder().totalCount(Long.valueOf(households.size())).response(households).build();
}
try {
- new Tuple<>(null, Collections.emptyList());
- Tuple> householdsTuple;
+ SearchResponse searchResponse;
if(Boolean.TRUE.equals(isProximityBasedSearch(householdSearch))) {
- householdsTuple = householdRepository.findByRadius(householdSearch, limit, offset, tenantId, includeDeleted);
+ searchResponse = householdRepository.findByRadius(householdSearch, limit, offset, tenantId, includeDeleted);
} else {
- householdsTuple = householdRepository.find(householdSearch, limit, offset, tenantId, lastChangedSince, includeDeleted);
+ searchResponse = householdRepository.find(householdSearch, limit, offset, tenantId, lastChangedSince, includeDeleted);
}
- log.info("households found for search, size: {}", householdsTuple.getY().size());
- return householdsTuple;
+ log.info("households found for search, size: {}", searchResponse.getResponse().size());
+ return searchResponse;
} catch (QueryBuilderException e) {
log.error("error occurred while searching households", e);
throw new CustomException("ERROR_IN_QUERY", e.getMessage());
@@ -205,13 +215,13 @@ public List delete(HouseholdBulkRequest request, boolean isBulk) {
return request.getHouseholds();
}
- public Tuple> findById(List houseHoldIds, String columnName, boolean includeDeleted){
+ public SearchResponse 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");
- Tuple> householdsTuple = householdRepository.findById(houseHoldIds, columnName, includeDeleted);
- log.info("finished finding Households by Ids. Found {} Households", householdsTuple.getY().size());
- return householdsTuple;
+ SearchResponse searchResponse = householdRepository.findById(houseHoldIds, columnName, includeDeleted);
+ log.info("finished finding Households by Ids. Found {} Households", searchResponse.getResponse().size());
+ return searchResponse;
}
public void putInCache(List households) {
diff --git a/health-services/household/src/main/java/org/egov/household/validators/household/HBoundaryValidator.java b/health-services/household/src/main/java/org/egov/household/validators/household/HBoundaryValidator.java
new file mode 100644
index 00000000000..b0998f29cde
--- /dev/null
+++ b/health-services/household/src/main/java/org/egov/household/validators/household/HBoundaryValidator.java
@@ -0,0 +1,127 @@
+package org.egov.household.validators.household;
+
+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 lombok.extern.slf4j.Slf4j;
+import org.egov.common.http.client.ServiceRequestClient;
+import org.egov.common.models.Error;
+import org.egov.common.models.core.Boundary;
+import org.egov.common.models.household.Household;
+import org.egov.common.models.household.HouseholdBulkRequest;
+import org.egov.common.validator.Validator;
+import org.egov.household.config.HouseholdConfiguration;
+import org.egov.household.web.models.boundary.BoundaryResponse;
+import org.egov.tracer.model.CustomException;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import static org.egov.common.utils.CommonUtils.populateErrorDetails;
+
+/**
+ * Validator class for validating household boundaries.
+ */
+@Component
+@Order(value = 4)
+@Slf4j
+public class HBoundaryValidator implements Validator {
+
+ private final ServiceRequestClient serviceRequestClient;
+
+ private final HouseholdConfiguration householdConfiguration;
+
+ /**
+ * Constructor to initialize the HBoundaryValidator.
+ *
+ * @param serviceRequestClient Service request client for making HTTP requests
+ * @param householdConfiguration Configuration properties for the household module
+ */
+ public HBoundaryValidator(ServiceRequestClient serviceRequestClient, HouseholdConfiguration householdConfiguration) {
+ this.serviceRequestClient = serviceRequestClient;
+ this.householdConfiguration = householdConfiguration;
+ }
+
+ /**
+ * Validates the households' boundaries.
+ *
+ * @param request the bulk request containing households
+ * @return a map containing households with their corresponding list of errors
+ */
+ @Override
+ public Map> validate(HouseholdBulkRequest request) {
+ log.debug("Validating households boundaries.");
+ // Create a HashMap to store error details for each household
+ HashMap> errorDetailsMap = new HashMap<>();
+
+ // Filter households with non-null addresses
+ List entitiesWithValidBoundaries = request.getHouseholds().parallelStream()
+ .filter(household -> Objects.nonNull(household.getAddress()))
+ .filter(household -> Objects.nonNull(household.getAddress().getLocality())) // Exclude null locality codes
+ .collect(Collectors.toList());
+
+ Map> tenantIdHouseholdMap = entitiesWithValidBoundaries.stream().collect(Collectors.groupingBy(Household::getTenantId));
+
+ tenantIdHouseholdMap.forEach((tenantId, households) -> {
+ // Group households by locality code
+ Map> boundaryCodeHouseholdsMap = households.stream()
+ .collect(Collectors.groupingBy(
+ household -> household.getAddress().getLocality().getCode() // Group by locality code
+ ));
+
+ List boundaries = new ArrayList<>(boundaryCodeHouseholdsMap.keySet());
+ if(!CollectionUtils.isEmpty(boundaries)) {
+ try {
+ // Fetch boundary details from the service
+ log.debug("Fetching boundary details for tenantId: {}, boundaries: {}", tenantId, boundaries);
+ BoundaryResponse boundarySearchResponse = serviceRequestClient.fetchResult(
+ new StringBuilder(householdConfiguration.getBoundaryServiceHost()
+ + householdConfiguration.getBoundarySearchUrl()
+ +"?limit=" + boundaries.size()
+ + "&offset=0&tenantId=" + tenantId
+ + "&codes=" + String.join(",", boundaries)),
+ request.getRequestInfo(),
+ BoundaryResponse.class
+ );
+ log.debug("Boundary details fetched successfully for tenantId: {}", tenantId);
+
+ List invalidBoundaryCodes = new ArrayList<>(boundaries);
+ invalidBoundaryCodes.removeAll(boundarySearchResponse.getBoundary().stream()
+ .map(Boundary::getCode)
+ .collect(Collectors.toList())
+ );
+
+ // Filter out households with invalid boundary codes
+ List householdsWithInvalidBoundaries = boundaryCodeHouseholdsMap.entrySet().stream()
+ .filter(entry -> invalidBoundaryCodes.contains(entry.getKey())) // filter invalid boundary codes
+ .flatMap(entry -> entry.getValue().stream()) // Flatten the list of households
+ .collect(Collectors.toList());
+
+
+ householdsWithInvalidBoundaries.forEach(household -> {
+ // Create an error object for households with invalid boundaries
+ Error error = Error.builder()
+ .errorMessage("Boundary code does not exist in db")
+ .errorCode("NON_EXISTENT_ENTITY")
+ .type(Error.ErrorType.NON_RECOVERABLE)
+ .exception(new CustomException("NON_EXISTENT_ENTITY", "Boundary code does not exist in db"))
+ .build();
+ // Populate error details for the household
+ populateErrorDetails(household, error, errorDetailsMap);
+ });
+
+ } catch (Exception e) {
+ log.error("Exception while searching boundaries for tenantId: {}", tenantId, e);
+ // Throw a custom exception if an error occurs during boundary search
+ throw new CustomException("BOUNDARY_SEARCH_ERROR", e.getMessage());
+ }
+ }
+ });
+
+ return errorDetailsMap;
+ }
+}
diff --git a/health-services/household/src/main/java/org/egov/household/validators/household/HExistentEntityValidator.java b/health-services/household/src/main/java/org/egov/household/validators/household/HExistentEntityValidator.java
new file mode 100644
index 00000000000..980702a693d
--- /dev/null
+++ b/health-services/household/src/main/java/org/egov/household/validators/household/HExistentEntityValidator.java
@@ -0,0 +1,76 @@
+package org.egov.household.validators.household;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.egov.common.models.Error;
+import org.egov.common.models.household.Household;
+import org.egov.common.models.household.HouseholdBulkRequest;
+import org.egov.common.models.household.HouseholdSearch;
+import org.egov.common.validator.Validator;
+import org.egov.household.repository.HouseholdRepository;
+import org.springframework.util.CollectionUtils;
+
+import static org.egov.common.utils.CommonUtils.getIdFieldName;
+import static org.egov.common.utils.CommonUtils.notHavingErrors;
+import static org.egov.common.utils.CommonUtils.populateErrorDetails;
+import static org.egov.common.utils.ValidatorUtils.getErrorForUniqueEntity;
+
+/**
+ * Validator class for checking the existence of entities with the given client reference IDs.
+ * This validator checks if the provided household entities already exist in the database based on their client reference IDs.
+ * @author kanishq-egov
+ */
+public class HExistentEntityValidator implements Validator {
+
+ private final HouseholdRepository householdRepository;
+
+ /**
+ * Constructor to initialize the HouseholdRepository dependency.
+ *
+ * @param householdRepository The repository for household entities.
+ */
+ public HExistentEntityValidator(HouseholdRepository householdRepository) {
+ this.householdRepository = householdRepository;
+ }
+
+ /**
+ * Validates the existence of entities with the given client reference IDs.
+ *
+ * @param request The bulk request containing household entities.
+ * @return A map containing household entities and their associated error details.
+ */
+ @Override
+ public Map> validate(HouseholdBulkRequest request) {
+ // Map to hold household entities and their error details
+ Map> errorDetailsMap = new HashMap<>();
+ // Get the list of household entities from the request
+ List entities = request.getHouseholds();
+ // Extract client reference IDs from household entities without errors
+ List clientReferenceIdList = entities.stream()
+ .filter(notHavingErrors())
+ .map(Household::getClientReferenceId)
+ .collect(Collectors.toList());
+ // Create a search object for querying entities by client reference IDs
+ HouseholdSearch householdSearch = HouseholdSearch.builder()
+ .clientReferenceId(clientReferenceIdList)
+ .build();
+ // Check if the client reference ID list is not empty
+ if (!CollectionUtils.isEmpty(clientReferenceIdList)) {
+ // Query the repository to find existing entities by client reference IDs
+ List existentEntities = householdRepository.findById(
+ clientReferenceIdList,
+ getIdFieldName(householdSearch),
+ Boolean.FALSE).getResponse();
+ // For each existing entity, populate error details for uniqueness
+ existentEntities.forEach(entity -> {
+ Error error = getErrorForUniqueEntity();
+ populateErrorDetails(entity, error, errorDetailsMap);
+ });
+ }
+ return errorDetailsMap;
+ }
+
+}
diff --git a/health-services/household/src/main/java/org/egov/household/validators/household/HNonExistentEntityValidator.java b/health-services/household/src/main/java/org/egov/household/validators/household/HNonExistentEntityValidator.java
new file mode 100644
index 00000000000..e18090664ea
--- /dev/null
+++ b/health-services/household/src/main/java/org/egov/household/validators/household/HNonExistentEntityValidator.java
@@ -0,0 +1,105 @@
+package org.egov.household.validators.household;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import lombok.extern.slf4j.Slf4j;
+import org.egov.common.data.query.exception.QueryBuilderException;
+import org.egov.common.models.Error;
+import org.egov.common.models.household.Household;
+import org.egov.common.models.household.HouseholdBulkRequest;
+import org.egov.common.models.household.HouseholdSearch;
+import org.egov.common.validator.Validator;
+import org.egov.household.repository.HouseholdRepository;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import static org.egov.common.utils.CommonUtils.checkNonExistentEntities;
+import static org.egov.common.utils.CommonUtils.getIdToObjMap;
+import static org.egov.common.utils.CommonUtils.getMethod;
+import static org.egov.common.utils.CommonUtils.getObjClass;
+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.household.Constants.GET_ID;
+
+/**
+ * Validator for checking the non-existence of household entities.
+ * This validator checks if the provided household entities do not already exist in the database.
+ *
+ * @author kanishq-egov
+ */
+@Component
+@Order(value = 2)
+@Slf4j
+public class HNonExistentEntityValidator implements Validator {
+
+ private final HouseholdRepository householdRepository;
+
+ public HNonExistentEntityValidator(HouseholdRepository householdRepository) {
+ this.householdRepository = householdRepository;
+ }
+
+ /**
+ * Validates the non-existence of entities based on their IDs and client reference IDs.
+ *
+ * @param request The bulk request containing household entities.
+ * @return A map containing household entities and their associated error details.
+ */
+ @Override
+ public Map> validate(HouseholdBulkRequest request) {
+ // Map to hold household entities and their error details
+ Map> errorDetailsMap = new HashMap<>();
+ // Get the list of household entities from the request
+ List entities = request.getHouseholds();
+ // Get the class of the household entity
+ Class> objClass = getObjClass(entities);
+ // Get the method for fetching the ID of the entity
+ Method idMethod = getMethod(GET_ID, objClass);
+ // Map to store entities by their IDs
+ Map eMap = getIdToObjMap(
+ entities.stream().filter(notHavingErrors()).collect(Collectors.toList()), idMethod);
+ // Lists to store IDs and client reference IDs
+ List idList = new ArrayList<>();
+ List clientReferenceIdList = new ArrayList<>();
+ // Extract IDs and client reference IDs from household entities
+ entities.forEach(household -> {
+ idList.add(household.getId());
+ clientReferenceIdList.add(household.getClientReferenceId());
+ });
+ // Check if the entity map is not empty
+ if (!eMap.isEmpty()) {
+ // Extract entity IDs
+ List entityIds = new ArrayList<>(eMap.keySet());
+ // Create a search object for querying existing entities
+ HouseholdSearch householdSearch = HouseholdSearch.builder()
+ .clientReferenceId(clientReferenceIdList)
+ .id(idList)
+ .build();
+
+ List existingEntities;
+ try {
+ // Query the repository to find existing entities
+ existingEntities = householdRepository.find(householdSearch, entities.size(), 0,
+ entities.get(0).getTenantId(), null, false).getResponse();
+ } catch (Exception e) {
+ // Handle query builder exception
+ throw new RuntimeException(e);
+ }
+ // Check for non-existent entities
+ List nonExistentEntities = checkNonExistentEntities(eMap,
+ existingEntities, idMethod);
+ // Populate error details for non-existent entities
+ nonExistentEntities.forEach(entity -> {
+ Error error = getErrorForNonExistentEntity();
+ populateErrorDetails(entity, error, errorDetailsMap);
+ });
+ }
+
+ return errorDetailsMap;
+ }
+}
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 a4ea82912ba..2458f465b66 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).getY();
+ getIdFieldName(idMethod), false).getResponse();
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 e9ab1f1bae4..8a6e73a9b88 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).getY();
+ getIdFieldName(idMethod), false).getResponse();
List entitiesWithMismatchedRowVersion =
getEntitiesWithMismatchedRowVersion(eMap, existingEntities, idMethod);
entitiesWithMismatchedRowVersion.forEach(individual -> {
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 460adf4e6ab..82e3263f2fb 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
@@ -1,10 +1,15 @@
package org.egov.household.web.controllers;
+import java.util.List;
+
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.ApiParam;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.validation.Valid;
import org.egov.common.contract.response.ResponseInfo;
-import org.egov.common.ds.Tuple;
+import org.egov.common.models.core.SearchResponse;
+import org.egov.common.models.core.URLParams;
import org.egov.common.models.household.Household;
import org.egov.common.models.household.HouseholdBulkRequest;
import org.egov.common.models.household.HouseholdBulkResponse;
@@ -13,35 +18,28 @@
import org.egov.common.models.household.HouseholdMemberBulkResponse;
import org.egov.common.models.household.HouseholdMemberRequest;
import org.egov.common.models.household.HouseholdMemberResponse;
+import org.egov.common.models.household.HouseholdMemberSearchRequest;
import org.egov.common.models.household.HouseholdRequest;
import org.egov.common.models.household.HouseholdResponse;
+import org.egov.common.models.household.HouseholdSearchRequest;
import org.egov.common.producer.Producer;
import org.egov.common.utils.ResponseInfoFactory;
import org.egov.household.config.HouseholdConfiguration;
import org.egov.household.config.HouseholdMemberConfiguration;
import org.egov.household.service.HouseholdMemberService;
import org.egov.household.service.HouseholdService;
-import org.egov.household.web.models.HouseholdMemberSearchRequest;
-import org.egov.household.web.models.HouseholdSearchRequest;
import org.springframework.beans.factory.annotation.Autowired;
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.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
-import javax.servlet.http.HttpServletRequest;
-import javax.validation.Valid;
-import javax.validation.constraints.Max;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-import java.util.List;
-@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30")
@Controller
@RequestMapping("")
@@ -99,14 +97,22 @@ public ResponseEntity householdMemberV1CreatePost(@ApiP
}
@RequestMapping(value = "/member/v1/_search", method = RequestMethod.POST)
- public ResponseEntity householdMemberV1SearchPost(@ApiParam(value = "Details for existing household member.", required = true) @Valid @RequestBody HouseholdMemberSearchRequest householdMemberSearchRequest, @NotNull
- @Min(0)
- @Max(1000) @ApiParam(value = "Pagination - limit records in response", required = true) @Valid @RequestParam(value = "limit", required = true) Integer limit, @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 @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) {
- List households = householdMemberService.search(householdMemberSearchRequest.getHouseholdMemberSearch(), limit, offset, tenantId, lastChangedSince, includeDeleted);
+ public ResponseEntity householdMemberV1SearchPost(
+ @Valid @ModelAttribute URLParams urlParams,
+ @ApiParam(value = "Details for existing household member.", required = true) @Valid @RequestBody HouseholdMemberSearchRequest householdMemberSearchRequest
+ ) {
+ SearchResponse searchResponse = householdMemberService.search(
+ householdMemberSearchRequest.getHouseholdMemberSearch(),
+ urlParams.getLimit(),
+ urlParams.getOffset(),
+ urlParams.getTenantId(),
+ urlParams.getLastChangedSince(),
+ urlParams.getIncludeDeleted()
+ );
HouseholdMemberBulkResponse response = HouseholdMemberBulkResponse.builder().responseInfo(ResponseInfoFactory
.createResponseInfo(householdMemberSearchRequest.getRequestInfo(), true))
- .householdMembers(households)
+ .householdMembers(searchResponse.getResponse())
+ .totalCount(searchResponse.getTotalCount())
.build();
return ResponseEntity.status(HttpStatus.OK).body(response);
@@ -198,17 +204,25 @@ public ResponseEntity householdV1DeletePost(@ApiParam(value = "Cap
}
@RequestMapping(value = "/v1/_search", method = RequestMethod.POST)
- public ResponseEntity householdV1SearchPost(@ApiParam(value = "Details for existing household.", required = true) @Valid @RequestBody HouseholdSearchRequest request,
- @NotNull @Min(0) @Max(1000) @ApiParam(value = "Pagination - limit records in response", required = true) @Valid @RequestParam(value = "limit", required = true) Integer limit,
- @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 to test performance", defaultValue = "false") @Valid @RequestParam(value = "useCte", required = false, defaultValue = "false") Boolean useCte) {
-
- Tuple> householdsTuple = householdService.search(request.getHousehold(), limit, offset, tenantId, lastChangedSince, includeDeleted);
- HouseholdBulkResponse response = HouseholdBulkResponse.builder().responseInfo(ResponseInfoFactory
- .createResponseInfo(request.getRequestInfo(), true)).totalCount(householdsTuple.getX()).households(householdsTuple.getY()).build();
+ public ResponseEntity householdV1SearchPost(
+ @Valid @ModelAttribute URLParams urlParams,
+ @ApiParam(value = "Details for existing household.", required = true) @Valid @RequestBody HouseholdSearchRequest request
+ ) {
+ SearchResponse searchResponse = householdService.search(
+ request.getHousehold(),
+ urlParams.getLimit(),
+ urlParams.getOffset(),
+ urlParams.getTenantId(),
+ urlParams.getLastChangedSince(),
+ urlParams.getIncludeDeleted()
+ );
+ HouseholdBulkResponse response = HouseholdBulkResponse.builder()
+ .responseInfo(
+ ResponseInfoFactory.createResponseInfo(
+ request.getRequestInfo(), true
+ )
+ ).totalCount(searchResponse.getTotalCount())
+ .households(searchResponse.getResponse()).build();
return ResponseEntity.status(HttpStatus.OK).body(response);
}
diff --git a/health-services/household/src/main/java/org/egov/household/web/models/HouseholdMemberSearch.java b/health-services/household/src/main/java/org/egov/household/web/models/HouseholdMemberSearch.java
deleted file mode 100644
index a50d32819d2..00000000000
--- a/health-services/household/src/main/java/org/egov/household/web/models/HouseholdMemberSearch.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.egov.household.web.models;
-
-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.egov.common.data.query.annotations.Table;
-import org.springframework.validation.annotation.Validated;
-
-import javax.validation.Valid;
-import java.util.List;
-
-/**
-* Search model for household member
-*/
- @ApiModel(description = "Search model for household member")
-@Validated
-@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30")
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@Builder
- @JsonIgnoreProperties(ignoreUnknown = true)
- @Table(name = "household_member")
-public class HouseholdMemberSearch {
-
- @JsonProperty("id")
- private List id = null;
-
- @JsonProperty("householdId")
- private String householdId = null;
-
- @JsonProperty("householdClientReferenceId")
- private String householdClientReferenceId = null;
-
- @JsonProperty("individualId")
- private String individualId = null;
-
- @JsonProperty("individualClientReferenceId")
- private String individualClientReferenceId = null;
-
- @JsonProperty("isHeadOfHousehold")
- private Boolean isHeadOfHousehold = null;
-
- @JsonProperty("clientReferenceId")
- private List clientReferenceId = null;
-
- @JsonProperty("tenantId")
- @Valid
- private String tenantId = null;
-
-}
-
diff --git a/health-services/household/src/main/java/org/egov/household/web/models/HouseholdMemberSearchRequest.java b/health-services/household/src/main/java/org/egov/household/web/models/HouseholdMemberSearchRequest.java
deleted file mode 100644
index f4b82ca9688..00000000000
--- a/health-services/household/src/main/java/org/egov/household/web/models/HouseholdMemberSearchRequest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.egov.household.web.models;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.springframework.validation.annotation.Validated;
-
-import javax.validation.Valid;
-import javax.validation.constraints.NotNull;
-
-/**
-* HouseholdMemberSearchRequest
-*/
-@Validated
-@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30")
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@Builder
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class HouseholdMemberSearchRequest {
-
- @JsonProperty("RequestInfo")
- @NotNull
- @Valid
- private org.egov.common.contract.request.RequestInfo requestInfo = null;
-
- @JsonProperty("HouseholdMember")
- @NotNull
- @Valid
- private HouseholdMemberSearch householdMemberSearch = null;
-
-
-}
-
diff --git a/health-services/household/src/main/java/org/egov/household/web/models/HouseholdSearch.java b/health-services/household/src/main/java/org/egov/household/web/models/HouseholdSearch.java
deleted file mode 100644
index 96b8e529b4a..00000000000
--- a/health-services/household/src/main/java/org/egov/household/web/models/HouseholdSearch.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.egov.household.web.models;
-
-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.egov.common.data.query.annotations.Exclude;
-import org.egov.common.data.query.annotations.Table;
-import org.springframework.validation.annotation.Validated;
-
-import javax.validation.constraints.DecimalMax;
-import javax.validation.constraints.DecimalMin;
-import java.util.List;
-
-/**
-* A representation of Household.
-*/
- @ApiModel(description = "A representation of Household.")
-@Validated
-@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30")
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@Builder
- @JsonIgnoreProperties(ignoreUnknown = true)
-@Table(name = "household h")
-public class HouseholdSearch {
-
- @JsonProperty("id")
- private List id = null;
-
- @JsonProperty("clientReferenceId")
- private List clientReferenceId = null;
-
-// @JsonProperty("memberCount")
-// private Integer memberCount = null;
-
- @JsonProperty("boundaryCode")
- private String localityCode = null;
-
- @Exclude
- @JsonProperty("latitude")
- @DecimalMin("-90")
- @DecimalMax("90")
- private Double latitude = null;
-
- @Exclude
- @JsonProperty("longitude")
- @DecimalMin("-180")
- @DecimalMax("180")
- private Double longitude = null;
-
- /*
- * @value unit of measurement in Kilometer
- * */
- @Exclude
- @JsonProperty("searchRadius")
- @DecimalMin("0")
- private Double searchRadius = null;
-}
-
diff --git a/health-services/household/src/main/java/org/egov/household/web/models/HouseholdSearchRequest.java b/health-services/household/src/main/java/org/egov/household/web/models/HouseholdSearchRequest.java
deleted file mode 100644
index e55cbc9ff3f..00000000000
--- a/health-services/household/src/main/java/org/egov/household/web/models/HouseholdSearchRequest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.egov.household.web.models;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.egov.common.contract.request.RequestInfo;
-import org.springframework.validation.annotation.Validated;
-
-import javax.validation.Valid;
-import javax.validation.constraints.NotNull;
-
-/**
-* HouseholdSearchRequest
-*/
-@Validated
-@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30")
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@Builder
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class HouseholdSearchRequest {
-
- @JsonProperty("RequestInfo")
- @NotNull
- @Valid
- private RequestInfo requestInfo = null;
-
- @JsonProperty("Household")
- @NotNull
- @Valid
- private HouseholdSearch household = null;
-}
-
diff --git a/health-services/household/src/main/java/org/egov/household/web/models/boundary/BoundaryRequest.java b/health-services/household/src/main/java/org/egov/household/web/models/boundary/BoundaryRequest.java
new file mode 100644
index 00000000000..9b3937ed018
--- /dev/null
+++ b/health-services/household/src/main/java/org/egov/household/web/models/boundary/BoundaryRequest.java
@@ -0,0 +1,38 @@
+package org.egov.household.web.models.boundary;
+
+import java.util.List;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.egov.common.contract.request.RequestInfo;
+import org.egov.common.models.core.Boundary;
+import org.springframework.validation.annotation.Validated;
+
+/**
+ * BoundaryRequest
+ */
+@Validated
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class BoundaryRequest {
+
+ @JsonProperty("RequestInfo")
+ @Valid
+ private RequestInfo requestInfo = null;
+
+ @Valid
+ @NotNull
+ @JsonProperty("Boundary")
+ @Size(min = 1, max = 300)
+ private List boundary = null;
+
+}
diff --git a/health-services/household/src/main/java/org/egov/household/web/models/boundary/BoundaryResponse.java b/health-services/household/src/main/java/org/egov/household/web/models/boundary/BoundaryResponse.java
new file mode 100644
index 00000000000..4f3f07f82b9
--- /dev/null
+++ b/health-services/household/src/main/java/org/egov/household/web/models/boundary/BoundaryResponse.java
@@ -0,0 +1,44 @@
+package org.egov.household.web.models.boundary;
+
+import java.util.ArrayList;
+import java.util.List;
+import jakarta.validation.Valid;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.egov.common.contract.response.ResponseInfo;
+import org.egov.common.models.core.Boundary;
+import org.springframework.validation.annotation.Validated;
+
+/**
+ * BoundaryResponse
+ */
+@Validated
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class BoundaryResponse {
+
+ @JsonProperty("ResponseInfo")
+ @Valid
+ private ResponseInfo responseInfo = null;
+
+ @JsonProperty("Boundary")
+ @Valid
+ private List boundary = null;
+
+
+ public BoundaryResponse addBoundaryItem(Boundary boundaryItem) {
+ if (this.boundary == null) {
+ this.boundary = new ArrayList<>();
+ }
+ this.boundary.add(boundaryItem);
+ return this;
+ }
+
+}
diff --git a/health-services/household/src/main/java/org/egov/household/web/models/boundary/BoundarySearchCriteria.java b/health-services/household/src/main/java/org/egov/household/web/models/boundary/BoundarySearchCriteria.java
new file mode 100644
index 00000000000..f7c6fcca045
--- /dev/null
+++ b/health-services/household/src/main/java/org/egov/household/web/models/boundary/BoundarySearchCriteria.java
@@ -0,0 +1,37 @@
+package org.egov.household.web.models.boundary;
+
+import java.util.List;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+
+@Validated
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class BoundarySearchCriteria {
+
+ @NotNull
+ @Size(min = 1)
+ @JsonProperty("codes")
+ private List codes;
+
+ @NotNull
+ @JsonProperty("tenantId")
+ private String tenantId;
+
+ @JsonProperty("offset")
+ private Integer offset;
+
+ @JsonProperty("limit")
+ private Integer limit;
+
+}
diff --git a/health-services/household/src/main/resources/application.properties b/health-services/household/src/main/resources/application.properties
index ae3b0272d47..dfd2b4f6937 100644
--- a/health-services/household/src/main/resources/application.properties
+++ b/health-services/household/src/main/resources/application.properties
@@ -23,7 +23,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
@@ -49,8 +49,8 @@ kafka.producer.config.linger_ms_config=1
kafka.producer.config.buffer_memory_config=33554432
# IDGEN CONFIG
-egov.idgen.host=https://dev.digit.org/
-#egov.idgen.host=http://localhost:8081/
+#egov.idgen.host=https://dev.digit.org/
+egov.idgen.host=http://localhost:8082/
egov.idgen.path=egov-idgen/id/_generate
egov.idgen.integration.enabled=true
household.idgen.id.format=household.id
@@ -59,7 +59,8 @@ household.idgen.id.format=household.id
kafka.topics.consumer=household-consumer-topic
# USER CONFIG
-egov.user.host=https://dev.digit.org
+#egov.user.host=https://dev.digit.org
+egov.user.host=http://localhost:8083/
egov.user.context.path=/user/users
egov.user.create.path=/_createnovalidate
egov.user.search.path=/user/_search
@@ -96,3 +97,9 @@ household.member.consumer.bulk.delete.topic=household-member-consumer-bulk-delet
# INDIVIDUAL SERVICE
egov.individual.host=https://dev.digit.org
egov.individual.search.url=/individual/v1/_search
+
+
+# BOUNDARY SERVICE
+egov.boundary.host=http://localhost:8081
+egov.boundary.search.url=/boundary-service/boundary/_search
+egov.boundary.hierarchy=HCM-Moz-Hierarchy
diff --git a/health-services/household/src/main/resources/db/Dockerfile b/health-services/household/src/main/resources/db/Dockerfile
index 60fc07ce69f..e7da01d7f0b 100644
--- a/health-services/household/src/main/resources/db/Dockerfile
+++ b/health-services/household/src/main/resources/db/Dockerfile
@@ -1,4 +1,4 @@
-FROM egovio/flyway:4.1.2
+FROM egovio/flyway:10.7.1
COPY ./migration/main /flyway/sql
@@ -6,4 +6,4 @@ COPY migrate.sh /usr/bin/migrate.sh
RUN chmod +x /usr/bin/migrate.sh
-CMD ["/usr/bin/migrate.sh"]
\ No newline at end of file
+ENTRYPOINT ["/usr/bin/migrate.sh"]
\ No newline at end of file
diff --git a/health-services/household/src/main/resources/db/migrate.sh b/health-services/household/src/main/resources/db/migrate.sh
index 43960b25cdb..5593a173eba 100644
--- a/health-services/household/src/main/resources/db/migrate.sh
+++ b/health-services/household/src/main/resources/db/migrate.sh
@@ -1,3 +1,3 @@
#!/bin/sh
-flyway -url=$DB_URL -table=$SCHEMA_TABLE -user=$FLYWAY_USER -password=$FLYWAY_PASSWORD -locations=$FLYWAY_LOCATIONS -baselineOnMigrate=true -outOfOrder=true -ignoreMissingMigrations=true migrate
\ No newline at end of file
+flyway -url=$DB_URL -table=$SCHEMA_TABLE -user=$FLYWAY_USER -password=$FLYWAY_PASSWORD -locations=$FLYWAY_LOCATIONS -baselineOnMigrate=true -outOfOrder=true migrate
\ No newline at end of file
diff --git a/health-services/household/src/test/java/org/egov/household/helper/HouseholdMemberSearchRequestTestBuilder.java b/health-services/household/src/test/java/org/egov/household/helper/HouseholdMemberSearchRequestTestBuilder.java
new file mode 100644
index 00000000000..868e354278b
--- /dev/null
+++ b/health-services/household/src/test/java/org/egov/household/helper/HouseholdMemberSearchRequestTestBuilder.java
@@ -0,0 +1,20 @@
+package org.egov.household.helper;
+
+import org.egov.common.models.household.HouseholdMemberSearchRequest;
+
+public class HouseholdMemberSearchRequestTestBuilder {
+ private HouseholdMemberSearchRequest.HouseholdMemberSearchRequestBuilder builder;
+
+ public HouseholdMemberSearchRequestTestBuilder() {
+ this.builder = HouseholdMemberSearchRequest.builder();
+ }
+ public static HouseholdMemberSearchRequestTestBuilder builder() {
+ return new HouseholdMemberSearchRequestTestBuilder();
+ }
+
+ public HouseholdMemberSearchRequest build() {
+ return this.builder.build();
+ }
+
+
+}
diff --git a/health-services/household/src/test/java/org/egov/household/helper/HouseholdMemberTestBuilder.java b/health-services/household/src/test/java/org/egov/household/helper/HouseholdMemberTestBuilder.java
index 6ccc6322324..140f6b3f84f 100644
--- a/health-services/household/src/test/java/org/egov/household/helper/HouseholdMemberTestBuilder.java
+++ b/health-services/household/src/test/java/org/egov/household/helper/HouseholdMemberTestBuilder.java
@@ -1,16 +1,17 @@
package org.egov.household.helper;
import org.egov.common.helper.AuditDetailsTestBuilder;
-import org.egov.common.models.household.AdditionalFields;
+import org.egov.common.models.core.AdditionalFields;
+import org.egov.common.models.household.Household;
import org.egov.common.models.household.HouseholdMember;
public class HouseholdMemberTestBuilder {
- private HouseholdMember.HouseholdMemberBuilder builder;
+ private HouseholdMember.HouseholdMemberBuilder builder;
public HouseholdMemberTestBuilder() {
- this.builder = HouseholdMember.builder();
+ this.builder = (HouseholdMember.HouseholdMemberBuilder) HouseholdMember.builder();
}
public static HouseholdMemberTestBuilder builder() {
diff --git a/health-services/household/src/test/java/org/egov/household/helper/HouseholdSearchTestBuilder.java b/health-services/household/src/test/java/org/egov/household/helper/HouseholdSearchTestBuilder.java
new file mode 100644
index 00000000000..aee59e664e5
--- /dev/null
+++ b/health-services/household/src/test/java/org/egov/household/helper/HouseholdSearchTestBuilder.java
@@ -0,0 +1,39 @@
+package org.egov.household.helper;
+
+import java.util.Collections;
+
+import org.egov.common.models.household.HouseholdSearch;
+
+
+public class HouseholdSearchTestBuilder {
+
+ private HouseholdSearch.HouseholdSearchBuilder builder;
+
+ public HouseholdSearchTestBuilder() {
+ this.builder = (HouseholdSearch.HouseholdSearchBuilder) HouseholdSearch.builder();
+ }
+
+ public static HouseholdSearchTestBuilder builder() {
+ return new HouseholdSearchTestBuilder();
+ }
+
+ public HouseholdSearch build() {
+ return this.builder.build();
+ }
+
+ public HouseholdSearchTestBuilder withHouseholdSearch(){
+ this.builder.id(Collections.singletonList("some-id"))
+ .clientReferenceId(Collections.singletonList("some-id"));
+ return this;
+ }
+
+ public HouseholdSearchTestBuilder withId(String id) {
+ this.builder.id(Collections.singletonList(id));
+ return this;
+ }
+
+ public HouseholdSearchTestBuilder withClientReferenceId(String clientReferenceId) {
+ this.builder.clientReferenceId(Collections.singletonList(clientReferenceId));
+ return this;
+ }
+}
diff --git a/health-services/household/src/test/java/org/egov/household/helper/HouseholdTestBuilder.java b/health-services/household/src/test/java/org/egov/household/helper/HouseholdTestBuilder.java
index e891b3e51bd..c80173a9af9 100644
--- a/health-services/household/src/test/java/org/egov/household/helper/HouseholdTestBuilder.java
+++ b/health-services/household/src/test/java/org/egov/household/helper/HouseholdTestBuilder.java
@@ -1,17 +1,17 @@
package org.egov.household.helper;
import org.egov.common.helper.AuditDetailsTestBuilder;
-import org.egov.common.models.household.AdditionalFields;
+import org.egov.common.models.core.AdditionalFields;
import org.egov.common.models.household.Address;
import org.egov.common.models.household.Household;
public class HouseholdTestBuilder {
- private Household.HouseholdBuilder builder;
+ private Household.HouseholdBuilder builder;
public HouseholdTestBuilder() {
- this.builder = Household.builder();
+ this.builder = (Household.HouseholdBuilder) Household.builder();
}
public static HouseholdTestBuilder builder() {
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 f0b176d0bcf..91a0f2b2424 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
@@ -3,9 +3,11 @@
import org.egov.common.data.query.exception.QueryBuilderException;
import org.egov.common.ds.Tuple;
import org.egov.common.helper.RequestInfoTestBuilder;
+import org.egov.common.models.core.SearchResponse;
+import org.egov.common.models.household.Household;
import org.egov.household.repository.HouseholdRepository;
-import org.egov.household.web.models.HouseholdSearch;
-import org.egov.household.web.models.HouseholdSearchRequest;
+import org.egov.common.models.household.HouseholdSearch;
+import org.egov.common.models.household.HouseholdSearchRequest;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -41,7 +43,7 @@ void shouldOnlySearchByIdIfOnlyIdIsPresent() throws QueryBuilderException {
.requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build())
.household(HouseholdSearch.builder().id(Collections.singletonList("some-id")).build()).build();
when(householdRepository.findById(anyList(), eq("id"), anyBoolean()))
- .thenReturn(new Tuple(0L, Collections.emptyList()));
+ .thenReturn(SearchResponse.builder().build());
householdService.search(householdSearchRequest.getHousehold(), 10, 0, "default",
null, false);
@@ -57,7 +59,7 @@ void shouldOnlySearchByClientReferenceIdIfOnlyClientReferenceIdIsPresent() throw
.requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build())
.household(HouseholdSearch.builder().clientReferenceId(Collections.singletonList("some-id")).build()).build();
when(householdRepository.findById(anyList(), eq("clientReferenceId"), anyBoolean()))
- .thenReturn(new Tuple(0L, Collections.emptyList()));
+ .thenReturn(SearchResponse.builder().build());
householdService.search(householdSearchRequest.getHousehold(), 10, 0, "default",
null, false);
@@ -68,13 +70,13 @@ void shouldOnlySearchByClientReferenceIdIfOnlyClientReferenceIdIsPresent() throw
@Test
@DisplayName("should not call findById if more search parameters are available")
- void shouldNotCallFindByIfIfMoreParametersAreAvailable() throws QueryBuilderException {
+ void shouldNotCallFindByIdIfMoreParametersAreAvailable() throws QueryBuilderException {
HouseholdSearchRequest householdSearchRequest = HouseholdSearchRequest.builder()
.requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build())
.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(new Tuple(0L, Collections.emptyList()));
+ anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(SearchResponse.builder().build());
householdService.search(householdSearchRequest.getHousehold(), 10, 0,
"default", 0L, false);
@@ -91,7 +93,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(new Tuple(0L, Collections.emptyList()));
+ anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(SearchResponse.builder().build());
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 cb0a984b9a3..5947df9657a 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,6 +1,7 @@
package org.egov.household.service;
import org.egov.common.ds.Tuple;
+import org.egov.common.models.core.SearchResponse;
import org.egov.common.models.household.Household;
import org.egov.common.models.household.HouseholdMemberBulkRequest;
import org.egov.household.helper.HouseholdMemberBulkRequestTestBuilder;
@@ -45,11 +46,10 @@ private void mockHouseholdFindIds() {
any(List.class),
any(String.class),
any(Boolean.class)
- )).thenReturn(new Tuple(1L,
- Collections.singletonList(
- Household.builder().id("some-household-id").clientReferenceId("some-client-ref-id").build())
- )
- );
+ )).thenReturn(SearchResponse.builder()
+ .response(Collections.singletonList(
+ Household.builder().id("some-household-id").clientReferenceId("some-client-ref-id").build()))
+ .build());
}
@Test
diff --git a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberFindTest.java b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberFindTest.java
index 13875c1bdd8..614189e57a1 100644
--- a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberFindTest.java
+++ b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberFindTest.java
@@ -2,9 +2,11 @@
import org.egov.common.data.query.exception.QueryBuilderException;
import org.egov.common.helper.RequestInfoTestBuilder;
+import org.egov.common.models.core.SearchResponse;
+import org.egov.common.models.household.HouseholdMember;
import org.egov.household.repository.HouseholdMemberRepository;
-import org.egov.household.web.models.HouseholdMemberSearch;
-import org.egov.household.web.models.HouseholdMemberSearchRequest;
+import org.egov.common.models.household.HouseholdMemberSearch;
+import org.egov.common.models.household.HouseholdMemberSearchRequest;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -41,7 +43,7 @@ void shouldOnlySearchByIdIfOnlyIdIsPresent() {
.householdMemberSearch(HouseholdMemberSearch.builder()
.id(Collections.singletonList("some-id")).build()).build();
when(householdMemberRepository.findById(anyList(), eq("id"), anyBoolean()))
- .thenReturn(Collections.emptyList());
+ .thenReturn(SearchResponse.builder().build());
householdMemberService.search(householdSearchRequest.getHouseholdMemberSearch(), 10, 0, "default",
null, false);
@@ -57,9 +59,9 @@ void shouldNotCallFindByIfIfMoreParametersAreAvailable() throws QueryBuilderExce
HouseholdMemberSearchRequest householdMemberSearchRequest = HouseholdMemberSearchRequest.builder()
.requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build())
.householdMemberSearch(HouseholdMemberSearch.builder()
- .id(Collections.singletonList("some-id")).householdId("household-id").build()).build();
+ .id(Collections.singletonList("some-id")).householdId(Collections.singletonList("household-id")).build()).build();
when(householdMemberRepository.find(any(HouseholdMemberSearch.class), anyInt(),
- anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(Collections.emptyList());
+ anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(SearchResponse.builder().build());
householdMemberService.search(householdMemberSearchRequest.getHouseholdMemberSearch(), 10, 0,
"", 0L, false);
@@ -75,9 +77,9 @@ void shouldCallFindIfMoreParametersAreAvailable() throws QueryBuilderException {
HouseholdMemberSearchRequest householdMemberSearchRequest = HouseholdMemberSearchRequest.builder()
.requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build())
.householdMemberSearch(HouseholdMemberSearch.builder()
- .id(Collections.singletonList("some-id")).householdId("household-id").build()).build();
+ .id(Collections.singletonList("some-id")).householdId(Collections.singletonList("household-id")).build()).build();
when(householdMemberRepository.find(any(HouseholdMemberSearch.class), anyInt(),
- anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(Collections.emptyList());
+ anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(SearchResponse.builder().build());
householdMemberService.search(householdMemberSearchRequest.getHouseholdMemberSearch(), 10, 0,
"default", 0L, false);
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 89524134397..7c25e9e465f 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,6 +1,7 @@
package org.egov.household.service;
import org.egov.common.ds.Tuple;
+import org.egov.common.models.core.SearchResponse;
import org.egov.common.models.household.Household;
import org.egov.common.models.household.HouseholdMember;
import org.egov.common.models.household.HouseholdMemberBulkRequest;
@@ -44,10 +45,10 @@ private void mockHouseholdFindIds() {
any(List.class),
any(String.class),
any(Boolean.class)
- )).thenReturn(new Tuple(1L,
- Collections.singletonList(
- Household.builder().id("some-household-id").clientReferenceId("some-client-ref-id").build())
- )
+ )).thenReturn(SearchResponse.builder()
+ .response(Collections.singletonList(
+ Household.builder().id("some-household-id").clientReferenceId("some-client-ref-id").build()))
+ .build()
);
}
@@ -57,8 +58,8 @@ private void mockFindById() {
any(String.class),
any(Boolean.class)
)).thenReturn(
- Collections.singletonList(
- HouseholdMember.builder().id("some-id").build())
+ SearchResponse.