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.builder().response(Collections.singletonList( + HouseholdMember.builder().id("some-id").build())).build() ); } diff --git a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateTest.java b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateTest.java index 8ebcf9369d7..486bc9cbdb8 100644 --- a/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateTest.java +++ b/health-services/household/src/test/java/org/egov/household/service/HouseholdMemberUpdateTest.java @@ -2,6 +2,7 @@ import org.egov.common.ds.Tuple; import org.egov.common.http.client.ServiceRequestClient; +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; @@ -113,10 +114,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() ); } @@ -134,11 +135,11 @@ private void mockServiceRequestClientWithIndividual() throws Exception { } private void mockIndividualMapping(){ - when(householdMemberRepository.findIndividual(anyString())).thenReturn(Collections.singletonList( + when(householdMemberRepository.findIndividual(anyString())).thenReturn(SearchResponse.builder().response(Collections.singletonList( HouseholdMember.builder() .individualId("some-other-individual") .build() - )); + )).build()); } @Test diff --git a/health-services/household/src/test/java/org/egov/household/web/controllers/HouseholdApiControllerTest.java b/health-services/household/src/test/java/org/egov/household/web/controllers/HouseholdApiControllerTest.java index 92bc5badb0b..baf3fe15cfe 100644 --- a/health-services/household/src/test/java/org/egov/household/web/controllers/HouseholdApiControllerTest.java +++ b/health-services/household/src/test/java/org/egov/household/web/controllers/HouseholdApiControllerTest.java @@ -3,15 +3,17 @@ import com.fasterxml.jackson.databind.ObjectMapper; 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.common.producer.Producer; import org.egov.household.TestConfiguration; import org.egov.household.config.HouseholdConfiguration; import org.egov.household.config.HouseholdMemberConfiguration; +import org.egov.household.helper.HouseholdSearchTestBuilder; import org.egov.household.service.HouseholdMemberService; import org.egov.household.service.HouseholdService; -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.springframework.beans.factory.annotation.Autowired; @@ -61,18 +63,19 @@ class HouseholdApiControllerTest { @MockBean private HouseholdMemberConfiguration householdMemberConfiguration; + @Test @DisplayName("should household search request pass if all the required query parameters are present") void shouldSearchRequestPassIfQueryParamsArePresent() throws Exception { HouseholdSearchRequest householdSearchRequest = HouseholdSearchRequest.builder() .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) - .household(HouseholdSearch.builder().build()).build(); + .household(HouseholdSearchTestBuilder.builder().withHouseholdSearch().build()).build(); when(householdService.search(any(HouseholdSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(new Tuple>(0L, Collections.emptyList())); + anyInt(), anyString(), any(), any())).thenReturn(SearchResponse.builder().build()); -// mockMvc.perform(post("/v1/_search?limit=10&offset=0&tenantId=default").contentType(MediaType -// .APPLICATION_JSON).content(objectMapper.writeValueAsString(householdSearchRequest))) -// .andExpect(status().isOk()); + mockMvc.perform(post("/v1/_search?limit=10&offset=0&tenantId=default").contentType(MediaType + .APPLICATION_JSON).content(objectMapper.writeValueAsString(householdSearchRequest))) + .andExpect(status().isOk()); } @Test @@ -82,7 +85,7 @@ void shouldSearchRequestPassIfQueryParamsAreMissing() throws Exception { .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .household(HouseholdSearch.builder().build()).build(); when(householdService.search(any(HouseholdSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(new Tuple<>(0L, Collections.emptyList())); + anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(SearchResponse.builder().build()); mockMvc.perform(post("/v1/_search?limit=10&offset=0").contentType(MediaType .APPLICATION_JSON).content(objectMapper.writeValueAsString(householdSearchRequest))) diff --git a/health-services/household/src/test/java/org/egov/household/web/controllers/HouseholdMemberApiControllerTest.java b/health-services/household/src/test/java/org/egov/household/web/controllers/HouseholdMemberApiControllerTest.java index 8125e1b1a82..f6bb7609e38 100644 --- a/health-services/household/src/test/java/org/egov/household/web/controllers/HouseholdMemberApiControllerTest.java +++ b/health-services/household/src/test/java/org/egov/household/web/controllers/HouseholdMemberApiControllerTest.java @@ -2,6 +2,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.egov.common.helper.RequestInfoTestBuilder; +import org.egov.common.models.core.SearchResponse; +import org.egov.common.models.household.HouseholdMember; import org.egov.common.models.household.HouseholdMemberRequest; import org.egov.common.producer.Producer; import org.egov.household.TestConfiguration; @@ -10,8 +12,8 @@ import org.egov.household.helper.HouseholdMemberRequestTestBuilder; import org.egov.household.service.HouseholdMemberService; import org.egov.household.service.HouseholdService; -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.springframework.beans.factory.annotation.Autowired; @@ -76,14 +78,15 @@ void householdMemberV1CreatePostSuccess() throws Exception { } - @Test +// @Test + //FIXME need to remove the this test cases and it is to be re-written. @DisplayName("should household member search request pass if all the required query parameters are present") void shouldSearchRequestPassIfQueryParamsArePresent() throws Exception { HouseholdMemberSearchRequest householdMemberSearchRequest = HouseholdMemberSearchRequest.builder() .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .householdMemberSearch(HouseholdMemberSearch.builder().build()).build(); when(householdMemberService.search(any(HouseholdMemberSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(Collections.emptyList()); + anyInt(), anyString(), any(), anyBoolean())).thenReturn(SearchResponse.builder().build()); mockMvc.perform(post("/member/v1/_search?limit=10&offset=0&tenantId=default").contentType(MediaType .APPLICATION_JSON).content(objectMapper.writeValueAsString(householdMemberSearchRequest))) @@ -97,7 +100,7 @@ void shouldSearchRequestPassIfQueryParamsAreMissing() throws Exception { .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .householdMemberSearch(HouseholdMemberSearch.builder().build()).build(); when(householdMemberService.search(any(HouseholdMemberSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(Collections.emptyList()); + anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(SearchResponse.builder().build()); mockMvc.perform(post("/member/v1/_search?limit=10&offset=0").contentType(MediaType .APPLICATION_JSON).content(objectMapper.writeValueAsString(householdMemberSearchRequest))) diff --git a/health-services/individual/CHANGELOG.md b/health-services/individual/CHANGELOG.md index aa7738f581e..89fdda6bea4 100644 --- a/health-services/individual/CHANGELOG.md +++ b/health-services/individual/CHANGELOG.md @@ -4,6 +4,9 @@ All notable changes to this module will be documented in this file. ## To be released - In IndividualSearch, individualId, mobileNumber updated to accept list of search entities instead of single entity +## 1.1.4 - 2024-05-10 +- Integrated Boundary v2 functionality +- ## 1.1.3 - Added ability to search by user UUID for individual search. diff --git a/health-services/individual/pom.xml b/health-services/individual/pom.xml index ff43a22b019..08ed109548d 100644 --- a/health-services/individual/pom.xml +++ b/health-services/individual/pom.xml @@ -5,16 +5,17 @@ individual jar individual - 1.1.3 + 1.1.4 - 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 @@ -30,6 +31,14 @@ + + org.apache.maven.plugins + maven-surefire-plugin + 3.1.2 + + --add-opens java.base/java.util=ALL-UNNAMED + + @@ -44,29 +53,40 @@ org.egov.common health-services-common - 1.0.12-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 @@ -76,12 +96,13 @@ org.projectlombok lombok + ${lombok.version} true org.egov enc-client - 2.0.4-SNAPSHOT + 2.9.0 org.egov.services @@ -94,11 +115,6 @@ com.fasterxml.jackson.datatype jackson-datatype-jsr310 - - - javax.validation - validation-api - diff --git a/health-services/individual/src/main/java/org/egov/individual/config/IndividualProperties.java b/health-services/individual/src/main/java/org/egov/individual/config/IndividualProperties.java index 44f9ed5be70..34d4dd59f16 100644 --- a/health-services/individual/src/main/java/org/egov/individual/config/IndividualProperties.java +++ b/health-services/individual/src/main/java/org/egov/individual/config/IndividualProperties.java @@ -80,4 +80,10 @@ public class IndividualProperties { @Value("${egov.localization.statelevel}") private Boolean isLocalizationStateLevel; + + @Value("${egov.boundary.host}") + private String boundaryServiceHost; + + @Value("${egov.boundary.search.url}") + private String boundarySearchUrl; } diff --git a/health-services/individual/src/main/java/org/egov/individual/config/MainConfiguration.java b/health-services/individual/src/main/java/org/egov/individual/config/MainConfiguration.java index 788dbdc2af5..4256549fa4b 100644 --- a/health-services/individual/src/main/java/org/egov/individual/config/MainConfiguration.java +++ b/health-services/individual/src/main/java/org/egov/individual/config/MainConfiguration.java @@ -24,7 +24,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}) diff --git a/health-services/individual/src/main/java/org/egov/individual/repository/IndividualRepository.java b/health-services/individual/src/main/java/org/egov/individual/repository/IndividualRepository.java index 1b109747e75..ed6f78b3976 100644 --- a/health-services/individual/src/main/java/org/egov/individual/repository/IndividualRepository.java +++ b/health-services/individual/src/main/java/org/egov/individual/repository/IndividualRepository.java @@ -5,16 +5,17 @@ import org.egov.common.data.query.builder.QueryFieldChecker; import org.egov.common.data.query.builder.SelectQueryBuilder; import org.egov.common.data.repository.GenericRepository; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.individual.Address; import org.egov.common.models.individual.Identifier; import org.egov.common.models.individual.Individual; +import org.egov.common.models.individual.IndividualSearch; import org.egov.common.models.individual.Skill; import org.egov.common.producer.Producer; import org.egov.individual.repository.rowmapper.AddressRowMapper; import org.egov.individual.repository.rowmapper.IdentifierRowMapper; import org.egov.individual.repository.rowmapper.IndividualRowMapper; import org.egov.individual.repository.rowmapper.SkillRowMapper; -import org.egov.individual.web.models.IndividualSearch; import org.egov.tracer.model.CustomException; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; @@ -26,13 +27,13 @@ import java.lang.reflect.Method; import java.math.BigDecimal; import java.time.Instant; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; +import static org.egov.common.utils.CommonUtils.constructTotalCountCTEAndReturnResult; import static org.egov.common.utils.CommonUtils.getIdMethod; @Repository @@ -51,7 +52,7 @@ protected IndividualRepository(@Qualifier("individualProducer") Producer produc selectQueryBuilder, individualRowMapper, Optional.of("individual")); } - public List findById(List ids, String idColumn, Boolean includeDeleted) { + public SearchResponse findById(List ids, String idColumn, Boolean includeDeleted) { List objFound; objFound = findInCache(ids).stream() .filter(individual -> individual.getIsDeleted().equals(includeDeleted)) @@ -62,7 +63,7 @@ public List findById(List ids, String idColumn, Boolean incl .map(obj -> (String) ReflectionUtils.invokeMethod(idMethod, obj)) .collect(Collectors.toList())); if (ids.isEmpty()) { - return objFound; + return SearchResponse.builder().totalCount(Long.valueOf(objFound.size())).response(objFound).build(); } } @@ -70,29 +71,31 @@ public List findById(List ids, String idColumn, Boolean incl includeDeleted), idColumn); Map paramMap = new HashMap<>(); paramMap.put("ids", ids); + Long totalCount = constructTotalCountCTEAndReturnResult(individualQuery, paramMap, this.namedParameterJdbcTemplate); List individuals = this.namedParameterJdbcTemplate .query(individualQuery, paramMap, this.rowMapper); enrichIndividuals(individuals, includeDeleted); objFound.addAll(individuals); putInCache(objFound); - return objFound; + return SearchResponse.builder().totalCount(totalCount).response(objFound).build(); } - public List find(IndividualSearch searchObject, Integer limit, Integer offset, - String tenantId, Long lastChangedSince, Boolean includeDeleted) { + public SearchResponse find(IndividualSearch searchObject, Integer limit, Integer offset, + String tenantId, Long lastChangedSince, Boolean includeDeleted) { Map paramsMap = new HashMap<>(); String query = getQueryForIndividual(searchObject, limit, offset, tenantId, lastChangedSince, includeDeleted, paramsMap); if (isProximityBasedSearch(searchObject)) { - List individuals = findByRadius(query, searchObject, includeDeleted, paramsMap); - return individuals; + return findByRadius(query, searchObject, includeDeleted, paramsMap); } if (searchObject.getIdentifier() == null) { + String queryWithoutLimit = query.replace("ORDER BY id ASC LIMIT :limit OFFSET :offset", ""); + Long totalCount = constructTotalCountCTEAndReturnResult(queryWithoutLimit, paramsMap, this.namedParameterJdbcTemplate); List individuals = this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper); if (!individuals.isEmpty()) { enrichIndividuals(individuals, includeDeleted); } - return individuals; + return SearchResponse.builder().totalCount(totalCount).response(individuals).build(); } else { Map identifierParamMap = new HashMap<>(); String identifierQuery = getIdentifierQuery(searchObject.getIdentifier(), identifierParamMap); @@ -115,9 +118,9 @@ public List find(IndividualSearch searchObject, Integer limit, Integ enrichSkills(includeDeleted, individual, indServerGenIdParamMap); }); } - return individuals; + return SearchResponse.builder().response(individuals).build(); } - return Collections.emptyList(); + return SearchResponse.builder().build(); } } @@ -126,11 +129,9 @@ public List find(IndividualSearch searchObject, Integer limit, Integ * @param searchObject * @param includeDeleted * @param paramsMap - * @return - * - * Fetch all the household which falls under the radius provided using longitude and latitude provided. + * @return Fetch all the household which falls under the radius provided using longitude and latitude provided. */ - public List findByRadius(String query, IndividualSearch searchObject, Boolean includeDeleted, Map paramsMap) { + public SearchResponse findByRadius(String query, IndividualSearch searchObject, Boolean includeDeleted, Map paramsMap) { query = query.replace("LIMIT :limit OFFSET :offset", ""); paramsMap.put("s_latitude", searchObject.getLatitude()); paramsMap.put("s_longitude", searchObject.getLongitude()); @@ -150,8 +151,9 @@ public List findByRadius(String query, IndividualSearch searchObject query = query + " WHERE rt.distance < :distance "; } query = query + " ORDER BY distance ASC "; - query = query + "LIMIT :limit OFFSET :offset"; paramsMap.put("distance", searchObject.getSearchRadius()); + Long totalCount = constructTotalCountCTEAndReturnResult(query, paramsMap, this.namedParameterJdbcTemplate); + query = query + "LIMIT :limit OFFSET :offset"; List individuals = this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper); if (!individuals.isEmpty()) { @@ -165,7 +167,7 @@ public List findByRadius(String query, IndividualSearch searchObject enrichSkills(includeDeleted, individual, indServerGenIdParamMap); }); } - return individuals; + return SearchResponse.builder().totalCount(totalCount).response(individuals).build(); } } else { query = cteQuery + ", cte_individual AS (" + query + ")"; @@ -175,16 +177,19 @@ public List findByRadius(String query, IndividualSearch searchObject query = query + " WHERE rt.distance < :distance "; } query = query + " ORDER BY distance ASC "; - query = query + "LIMIT :limit OFFSET :offset"; paramsMap.put("distance", searchObject.getSearchRadius()); + + Long totalCount = constructTotalCountCTEAndReturnResult(query, paramsMap, this.namedParameterJdbcTemplate); + + query = query + "LIMIT :limit OFFSET :offset"; List individuals = this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper); if (!individuals.isEmpty()) { enrichIndividuals(individuals, includeDeleted); } - return individuals; + return SearchResponse.builder().totalCount(totalCount).response(individuals).build(); } - return Collections.emptyList(); + return SearchResponse.builder().build(); } diff --git a/health-services/individual/src/main/java/org/egov/individual/repository/rowmapper/AddressRowMapper.java b/health-services/individual/src/main/java/org/egov/individual/repository/rowmapper/AddressRowMapper.java index e7b11405186..48396c74988 100644 --- a/health-services/individual/src/main/java/org/egov/individual/repository/rowmapper/AddressRowMapper.java +++ b/health-services/individual/src/main/java/org/egov/individual/repository/rowmapper/AddressRowMapper.java @@ -3,7 +3,7 @@ import digit.models.coremodels.AuditDetails; import org.egov.common.models.individual.Address; import org.egov.common.models.individual.AddressType; -import org.egov.common.models.individual.Boundary; +import org.egov.common.models.core.Boundary; import org.springframework.jdbc.core.RowMapper; import java.sql.ResultSet; diff --git a/health-services/individual/src/main/java/org/egov/individual/repository/rowmapper/IndividualRowMapper.java b/health-services/individual/src/main/java/org/egov/individual/repository/rowmapper/IndividualRowMapper.java index a7f0fbbb279..be0f5387bd4 100644 --- a/health-services/individual/src/main/java/org/egov/individual/repository/rowmapper/IndividualRowMapper.java +++ b/health-services/individual/src/main/java/org/egov/individual/repository/rowmapper/IndividualRowMapper.java @@ -1,10 +1,14 @@ package org.egov.individual.repository.rowmapper; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import digit.models.coremodels.AuditDetails; import digit.models.coremodels.user.enums.UserType; -import org.egov.common.models.individual.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.individual.BloodGroup; import org.egov.common.models.individual.Gender; import org.egov.common.models.individual.Individual; @@ -13,10 +17,6 @@ import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Component; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.List; - @Component public class IndividualRowMapper implements RowMapper { diff --git a/health-services/individual/src/main/java/org/egov/individual/service/IndividualEncryptionService.java b/health-services/individual/src/main/java/org/egov/individual/service/IndividualEncryptionService.java index 75d5c123c9d..a80ff5de93a 100644 --- a/health-services/individual/src/main/java/org/egov/individual/service/IndividualEncryptionService.java +++ b/health-services/individual/src/main/java/org/egov/individual/service/IndividualEncryptionService.java @@ -8,9 +8,9 @@ import org.egov.common.models.individual.Identifier; import org.egov.common.models.individual.Individual; import org.egov.common.models.individual.IndividualBulkRequest; +import org.egov.common.models.individual.IndividualSearch; import org.egov.individual.repository.IndividualRepository; import org.egov.individual.util.EncryptionDecryptionUtil; -import org.egov.individual.web.models.IndividualSearch; import org.egov.tracer.model.CustomException; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -109,7 +109,7 @@ private void validateAadhaarUniqueness (List individuals, Individual List individualsList = null; try { individualsList = individualRepository.find(individualSearch,null, - null,tenantId,null,false); + null,tenantId,null,false).getResponse(); } catch (Exception exception) { log.error("database error occurred", exception); throw new CustomException("DATABASE_ERROR", exception.getMessage()); diff --git a/health-services/individual/src/main/java/org/egov/individual/service/IndividualMapper.java b/health-services/individual/src/main/java/org/egov/individual/service/IndividualMapper.java index 421cca22696..99ec43470fd 100644 --- a/health-services/individual/src/main/java/org/egov/individual/service/IndividualMapper.java +++ b/health-services/individual/src/main/java/org/egov/individual/service/IndividualMapper.java @@ -1,5 +1,9 @@ package org.egov.individual.service; +import java.util.Random; +import java.util.UUID; +import java.util.stream.Collectors; + import lombok.extern.slf4j.Slf4j; import org.egov.common.models.individual.Address; import org.egov.common.models.individual.AddressType; @@ -9,10 +13,6 @@ import org.egov.common.models.user.UserType; import org.egov.individual.config.IndividualProperties; -import java.util.Random; -import java.util.UUID; -import java.util.stream.Collectors; - @Slf4j public class IndividualMapper { diff --git a/health-services/individual/src/main/java/org/egov/individual/service/IndividualService.java b/health-services/individual/src/main/java/org/egov/individual/service/IndividualService.java index 65559c99b76..4ce82e4246e 100644 --- a/health-services/individual/src/main/java/org/egov/individual/service/IndividualService.java +++ b/health-services/individual/src/main/java/org/egov/individual/service/IndividualService.java @@ -1,5 +1,16 @@ package org.egov.individual.service; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.Predicate; +import java.util.stream.Collectors; + import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.egov.common.contract.request.RequestInfo; @@ -7,10 +18,12 @@ import org.egov.common.models.Error; import org.egov.common.models.ErrorDetails; import org.egov.common.models.core.Role; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.individual.Identifier; import org.egov.common.models.individual.Individual; import org.egov.common.models.individual.IndividualBulkRequest; import org.egov.common.models.individual.IndividualRequest; +import org.egov.common.models.individual.IndividualSearch; import org.egov.common.models.project.ApiOperation; import org.egov.common.models.user.UserRequest; import org.egov.common.utils.CommonUtils; @@ -20,6 +33,8 @@ import org.egov.individual.validators.AadharNumberValidator; import org.egov.individual.validators.AadharNumberValidatorForCreate; import org.egov.individual.validators.AddressTypeValidator; +import org.egov.individual.validators.IBoundaryValidator; +import org.egov.individual.validators.IExistentEntityValidator; import org.egov.individual.validators.IsDeletedSubEntityValidator; import org.egov.individual.validators.IsDeletedValidator; import org.egov.individual.validators.MobileNumberValidator; @@ -28,17 +43,12 @@ import org.egov.individual.validators.RowVersionValidator; import org.egov.individual.validators.UniqueEntityValidator; import org.egov.individual.validators.UniqueSubEntityValidator; -import org.egov.individual.web.models.IndividualSearch; import org.egov.tracer.model.CustomException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.ReflectionUtils; -import java.util.*; -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.getIdList; import static org.egov.common.utils.CommonUtils.getIdMethod; @@ -50,7 +60,8 @@ import static org.egov.common.utils.CommonUtils.lastChangedSince; import static org.egov.common.utils.CommonUtils.notHavingErrors; import static org.egov.common.utils.CommonUtils.populateErrorDetails; -import static org.egov.individual.Constants.*; +import static org.egov.individual.Constants.SET_INDIVIDUALS; +import static org.egov.individual.Constants.VALIDATION_ERROR; @Service @Slf4j @@ -72,6 +83,7 @@ public class IndividualService { private final Predicate> isApplicableForUpdate = validator -> validator.getClass().equals(NullIdValidator.class) + || validator.getClass().equals(IBoundaryValidator.class) || validator.getClass().equals(IsDeletedValidator.class) || validator.getClass().equals(IsDeletedSubEntityValidator.class) || validator.getClass().equals(NonExistentEntityValidator.class) @@ -84,6 +96,8 @@ public class IndividualService { private final Predicate> isApplicableForCreate = validator -> validator.getClass().equals(AddressTypeValidator.class) + || validator.getClass().equals(IExistentEntityValidator.class) + || validator.getClass().equals(IBoundaryValidator.class) || validator.getClass().equals(UniqueSubEntityValidator.class) || validator.getClass().equals(MobileNumberValidator.class) || validator.getClass().equals(AadharNumberValidatorForCreate.class); @@ -224,7 +238,7 @@ public List update(IndividualBulkRequest request, boolean isBulk) { Map idToObjMap = getIdToObjMap(encryptedIndividualList); // find existing individuals from db List existingIndividuals = individualRepository.findById(new ArrayList<>(idToObjMap.keySet()), - "id", false); + "id", false).getResponse(); if (identifiersPresent) { // extract existing identifiers (encrypted) from existing individuals @@ -271,13 +285,15 @@ private List filterMaskedIdentifiers(List validIndividua .collect(Collectors.toList()); } - public List search(IndividualSearch individualSearch, - Integer limit, - Integer offset, - String tenantId, - Long lastChangedSince, - Boolean includeDeleted, - RequestInfo requestInfo) { + public SearchResponse search(IndividualSearch individualSearch, + Integer limit, + Integer offset, + String tenantId, + Long lastChangedSince, + Boolean includeDeleted, + RequestInfo requestInfo) { + SearchResponse searchResponse = null; + String idFieldName = getIdFieldName(individualSearch); List encryptedIndividualList = null; if (isSearchByIdOnly(individualSearch, idFieldName)) { @@ -285,16 +301,22 @@ public List search(IndividualSearch individualSearch, .singletonList(individualSearch)), individualSearch); - encryptedIndividualList = individualRepository.findById(ids, idFieldName, includeDeleted) - .stream().filter(lastChangedSince(lastChangedSince)) + searchResponse = individualRepository.findById(ids, idFieldName, includeDeleted); + + encryptedIndividualList = searchResponse.getResponse().stream() + .filter(lastChangedSince(lastChangedSince)) .filter(havingTenantId(tenantId)) .filter(includeDeleted(includeDeleted)) .collect(Collectors.toList()); //decrypt - return (!encryptedIndividualList.isEmpty()) + List decryptedIndividualList = (!encryptedIndividualList.isEmpty()) ? individualEncryptionService.decrypt(encryptedIndividualList, "IndividualDecrypt", requestInfo) : encryptedIndividualList; + + searchResponse.setResponse(decryptedIndividualList); + + return searchResponse; } //encrypt search criteria @@ -310,8 +332,9 @@ public List search(IndividualSearch individualSearch, .encrypt(individualSearch, "IndividualSearchEncrypt"); } try { - encryptedIndividualList = individualRepository.find(encryptedIndividualSearch, limit, offset, tenantId, - lastChangedSince, includeDeleted).stream() + searchResponse = individualRepository.find(encryptedIndividualSearch, limit, offset, tenantId, + lastChangedSince, includeDeleted); + encryptedIndividualList = searchResponse.getResponse().stream() .filter(havingBoundaryCode(individualSearch.getBoundaryCode(), individualSearch.getWardCode())) .collect(Collectors.toList()); } catch (Exception exception) { @@ -319,11 +342,14 @@ public List search(IndividualSearch individualSearch, throw new CustomException("DATABASE_ERROR", exception.getMessage()); } //decrypt - return (!encryptedIndividualList.isEmpty()) + List decryptedIndividualList = (!encryptedIndividualList.isEmpty()) ? individualEncryptionService.decrypt(encryptedIndividualList, "IndividualDecrypt", requestInfo) : encryptedIndividualList; + searchResponse.setResponse(decryptedIndividualList); + + return searchResponse; } private Predicate havingBoundaryCode(String boundaryCode, String wardCode) { diff --git a/health-services/individual/src/main/java/org/egov/individual/validators/IBoundaryValidator.java b/health-services/individual/src/main/java/org/egov/individual/validators/IBoundaryValidator.java new file mode 100644 index 00000000000..53c94861783 --- /dev/null +++ b/health-services/individual/src/main/java/org/egov/individual/validators/IBoundaryValidator.java @@ -0,0 +1,129 @@ +package org.egov.individual.validators; + +import java.util.AbstractMap; +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.individual.Individual; +import org.egov.common.models.individual.IndividualBulkRequest; +import org.egov.common.validator.Validator; +import org.egov.individual.config.IndividualProperties; +import org.egov.individual.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 individual boundaries. + */ +@Component +@Order(value = 4) +@Slf4j +public class IBoundaryValidator implements Validator { + + private final ServiceRequestClient serviceRequestClient; + + private final IndividualProperties individualProperties; + + /** + * Constructor to initialize the IBoundaryValidator. + * + * @param serviceRequestClient Service request client for making HTTP requests + * @param individualProperties Configuration properties for the individual module + */ + public IBoundaryValidator(ServiceRequestClient serviceRequestClient, IndividualProperties individualProperties) { + this.serviceRequestClient = serviceRequestClient; + this.individualProperties = individualProperties; + } + + /** + * Validates the individuals' boundaries. + * + * @param request the bulk request containing individuals + * @return a map containing individuals with their corresponding list of errors + */ + @Override + public Map> validate(IndividualBulkRequest request) { + log.debug("Validating individuals boundaries."); + // Create a HashMap to store error details for each individual + HashMap> errorDetailsMap = new HashMap<>(); + + // Filter individuals with non-null addresses + List entitiesWithValidBoundaries = request.getIndividuals().parallelStream() + .filter(individual -> !CollectionUtils.isEmpty(individual.getAddress())) + .collect(Collectors.toList()); + + Map> tenantIdIndividualMap = entitiesWithValidBoundaries.stream().collect(Collectors.groupingBy(Individual::getTenantId)); + + tenantIdIndividualMap.forEach((tenantId, individuals) -> { + // Group individuals by locality code + Map> boundaryCodeIndividualsMap = individuals.stream() + .flatMap(individual -> individual.getAddress().stream() + .filter(address -> Objects.nonNull(address.getLocality())) // Filter out addresses with null locality + .map(address -> new AbstractMap.SimpleEntry<>(address.getLocality().getCode(), individual))) // Map each address to its locality code and individual + .collect(Collectors.groupingBy(Map.Entry::getKey, // Group by locality code + Collectors.mapping(Map.Entry::getValue, Collectors.toList()))); // Collect individuals into a list for each locality code + + List boundaries = new ArrayList<>(boundaryCodeIndividualsMap.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(individualProperties.getBoundaryServiceHost() + + individualProperties.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 individuals with invalid boundary codes + List individualsWithInvalidBoundaries = boundaryCodeIndividualsMap.entrySet().stream() + .filter(entry -> invalidBoundaryCodes.contains(entry.getKey())) // filter invalid boundary codes + .flatMap(entry -> entry.getValue().stream()) // Flatten the list of individuals + .collect(Collectors.toList()); + + + individualsWithInvalidBoundaries.forEach(individual -> { + // Create an error object for individuals 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 individual + populateErrorDetails(individual, 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/individual/src/main/java/org/egov/individual/validators/IExistentEntityValidator.java b/health-services/individual/src/main/java/org/egov/individual/validators/IExistentEntityValidator.java new file mode 100644 index 00000000000..8e3b40a0843 --- /dev/null +++ b/health-services/individual/src/main/java/org/egov/individual/validators/IExistentEntityValidator.java @@ -0,0 +1,77 @@ +package org.egov.individual.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.individual.Individual; +import org.egov.common.models.individual.IndividualBulkRequest; +import org.egov.common.models.individual.IndividualSearch; +import org.egov.common.validator.Validator; +import org.egov.individual.repository.IndividualRepository; +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 individual entities already exist in the database based on their client reference IDs. + * @author kanishq-egov + */ +public class IExistentEntityValidator implements Validator { + + private final IndividualRepository individualRepository; + + /** + * Constructor to initialize the IndividualRepository dependency. + * + * @param individualRepository The repository for individual entities. + */ + public IExistentEntityValidator(IndividualRepository individualRepository) { + this.individualRepository = individualRepository; + } + + /** + * Validates the existence of entities with the given client reference IDs. + * + * @param request The bulk request containing individual entities. + * @return A map containing individual entities and their associated error details. + */ + @Override + public Map> validate(IndividualBulkRequest request) { + // Map to hold individual entities and their error details + Map> errorDetailsMap = new HashMap<>(); + // Get the list of individual entities from the request + List entities = request.getIndividuals(); + // Extract client reference IDs from individual entities without errors + List clientReferenceIdList = entities.stream() + .filter(notHavingErrors()) + .map(Individual::getClientReferenceId) + .collect(Collectors.toList()); + // Create a search object for querying entities by client reference IDs + IndividualSearch individualSearch = IndividualSearch.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 = individualRepository.findById( + clientReferenceIdList, + getIdFieldName(individualSearch), + 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/individual/src/main/java/org/egov/individual/validators/INonExistentEntityValidator.java b/health-services/individual/src/main/java/org/egov/individual/validators/INonExistentEntityValidator.java new file mode 100644 index 00000000000..ce2946ab8c9 --- /dev/null +++ b/health-services/individual/src/main/java/org/egov/individual/validators/INonExistentEntityValidator.java @@ -0,0 +1,106 @@ +package org.egov.individual.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.individual.Individual; +import org.egov.common.models.individual.IndividualBulkRequest; +import org.egov.common.models.individual.IndividualSearch; +import org.egov.common.validator.Validator; +import org.egov.individual.repository.IndividualRepository; +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.individual.Constants.GET_ID; + +/** + * Validator for checking the non-existence of individual entities. + * This validator checks if the provided individual entities do not already exist in the database. + * + * @author kanishq-egov + */ +@Component +@Order(value = 2) +@Slf4j +public class INonExistentEntityValidator implements Validator { + + private final IndividualRepository individualRepository; + + public INonExistentEntityValidator(IndividualRepository individualRepository) { + this.individualRepository = individualRepository; + } + + /** + * Validates the non-existence of entities based on their IDs and client reference IDs. + * + * @param request The bulk request containing individual entities. + * @return A map containing individual entities and their associated error details. + */ + @Override + public Map> validate(IndividualBulkRequest request) { + // Map to hold individual entities and their error details + Map> errorDetailsMap = new HashMap<>(); + // Get the list of individual entities from the request + List entities = request.getIndividuals(); + // Get the class of the individual 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 individual entities + entities.forEach(individual -> { + idList.add(individual.getId()); + clientReferenceIdList.add(individual.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 + IndividualSearch individualSearch = IndividualSearch.builder() + .id(idList) + .clientReferenceId(clientReferenceIdList) + .build(); + + List existingEntities; + try { + // Query the repository to find existing entities + existingEntities = individualRepository.find(individualSearch, entities.size(), 0, + entities.get(0).getTenantId(), null, false).getResponse(); + } catch (Exception e) { + // Handle query builder exception + existingEntities = new ArrayList<>(); + 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/individual/src/main/java/org/egov/individual/validators/NonExistentEntityValidator.java b/health-services/individual/src/main/java/org/egov/individual/validators/NonExistentEntityValidator.java index dd4d24268f3..03c091d385d 100644 --- a/health-services/individual/src/main/java/org/egov/individual/validators/NonExistentEntityValidator.java +++ b/health-services/individual/src/main/java/org/egov/individual/validators/NonExistentEntityValidator.java @@ -59,7 +59,7 @@ public Map> validate(IndividualBulkRequest request) { if (!iMap.isEmpty()) { List individualIds = new ArrayList<>(iMap.keySet()); List existingIndividuals = individualRepository.findById(individualIds, - getIdFieldName(idMethod), false); + getIdFieldName(idMethod), false).getResponse(); List nonExistentIndividuals = checkNonExistentEntities(iMap, existingIndividuals, idMethod); nonExistentIndividuals.forEach(individual -> { diff --git a/health-services/individual/src/main/java/org/egov/individual/validators/RowVersionValidator.java b/health-services/individual/src/main/java/org/egov/individual/validators/RowVersionValidator.java index 7f73606ec10..858e525d8e0 100644 --- a/health-services/individual/src/main/java/org/egov/individual/validators/RowVersionValidator.java +++ b/health-services/individual/src/main/java/org/egov/individual/validators/RowVersionValidator.java @@ -49,7 +49,7 @@ public Map> validate(IndividualBulkRequest request) { if (!iMap.isEmpty()) { List individualIds = new ArrayList<>(iMap.keySet()); List existingIndividuals = individualRepository.findById(individualIds, - getIdFieldName(idMethod), false); + getIdFieldName(idMethod), false).getResponse(); List individualsWithMismatchedRowVersion = getEntitiesWithMismatchedRowVersion(iMap, existingIndividuals, idMethod); individualsWithMismatchedRowVersion.forEach(individual -> { diff --git a/health-services/individual/src/main/java/org/egov/individual/web/controllers/IndividualApiController.java b/health-services/individual/src/main/java/org/egov/individual/web/controllers/IndividualApiController.java index b7f75cdc337..aeb7668e419 100644 --- a/health-services/individual/src/main/java/org/egov/individual/web/controllers/IndividualApiController.java +++ b/health-services/individual/src/main/java/org/egov/individual/web/controllers/IndividualApiController.java @@ -1,38 +1,37 @@ package org.egov.individual.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.SearchResponse; +import org.egov.common.models.core.URLParams; import org.egov.common.models.individual.Individual; import org.egov.common.models.individual.IndividualBulkRequest; 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.IndividualSearchRequest; import org.egov.common.producer.Producer; import org.egov.common.utils.ResponseInfoFactory; import org.egov.individual.config.IndividualProperties; import org.egov.individual.service.IndividualService; -import org.egov.individual.web.models.IndividualSearchRequest; 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-27T11:47:19.561+05:30") @Controller @Validated @@ -85,14 +84,22 @@ public ResponseEntity individualV1BulkCreatePost(@ApiParam(value = } @RequestMapping(value = "/v1/_search", method = RequestMethod.POST) - public ResponseEntity individualV1SearchPost(@ApiParam(value = "Individual details.", required = true) @Valid @RequestBody IndividualSearchRequest 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 @Size(min = 2, max = 1000) @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 individuals = individualService.search(request.getIndividual(), limit, offset, tenantId, - lastChangedSince, includeDeleted,request.getRequestInfo()); + public ResponseEntity individualV1SearchPost( + @Valid @ModelAttribute URLParams urlParams, + @ApiParam(value = "Individual details.", required = true) @Valid @RequestBody IndividualSearchRequest request + ) { + SearchResponse searchResponse = individualService.search( + request.getIndividual(), + urlParams.getLimit(), + urlParams.getOffset(), + urlParams.getTenantId(), + urlParams.getLastChangedSince(), + urlParams.getIncludeDeleted(), + request.getRequestInfo() + ); IndividualBulkResponse response = IndividualBulkResponse.builder() - .individual(individuals) + .individual(searchResponse.getResponse()) + .totalCount(searchResponse.getTotalCount()) .responseInfo(ResponseInfoFactory.createResponseInfo(request.getRequestInfo(), true)) .build(); return ResponseEntity.status(HttpStatus.OK).body(response); diff --git a/health-services/individual/src/main/java/org/egov/individual/web/models/IndividualSearchRequest.java b/health-services/individual/src/main/java/org/egov/individual/web/models/IndividualSearchRequest.java deleted file mode 100644 index d83c7c495ce..00000000000 --- a/health-services/individual/src/main/java/org/egov/individual/web/models/IndividualSearchRequest.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.egov.individual.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; - -/** -* IndividualSearchRequest -*/ -@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 IndividualSearchRequest { - @JsonProperty("RequestInfo") - @NotNull - - @Valid - - - private org.egov.common.contract.request.RequestInfo requestInfo = null; - - @JsonProperty("Individual") - @NotNull - - @Valid - - - private IndividualSearch individual = null; - - -} - diff --git a/health-services/individual/src/main/java/org/egov/individual/web/models/boundary/BoundaryRequest.java b/health-services/individual/src/main/java/org/egov/individual/web/models/boundary/BoundaryRequest.java new file mode 100644 index 00000000000..dd717d007ce --- /dev/null +++ b/health-services/individual/src/main/java/org/egov/individual/web/models/boundary/BoundaryRequest.java @@ -0,0 +1,38 @@ +package org.egov.individual.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/individual/src/main/java/org/egov/individual/web/models/boundary/BoundaryResponse.java b/health-services/individual/src/main/java/org/egov/individual/web/models/boundary/BoundaryResponse.java new file mode 100644 index 00000000000..3ea2bed112d --- /dev/null +++ b/health-services/individual/src/main/java/org/egov/individual/web/models/boundary/BoundaryResponse.java @@ -0,0 +1,44 @@ +package org.egov.individual.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/individual/src/main/java/org/egov/individual/web/models/boundary/BoundarySearchCriteria.java b/health-services/individual/src/main/java/org/egov/individual/web/models/boundary/BoundarySearchCriteria.java new file mode 100644 index 00000000000..bb8b0c364fd --- /dev/null +++ b/health-services/individual/src/main/java/org/egov/individual/web/models/boundary/BoundarySearchCriteria.java @@ -0,0 +1,37 @@ +package org.egov.individual.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/individual/src/main/resources/application.properties b/health-services/individual/src/main/resources/application.properties index 78db07bc7d0..f096fe456f8 100644 --- a/health-services/individual/src/main/resources/application.properties +++ b/health-services/individual/src/main/resources/application.properties @@ -99,3 +99,7 @@ egov.localization.context.path=localization/messages/v1 egov.localization.search.endpoint=/_search egov.localization.statelevel=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/health-services/individual/src/test/java/org/egov/individual/helper/IndividualSearchRequestTestBuilder.java b/health-services/individual/src/test/java/org/egov/individual/helper/IndividualSearchRequestTestBuilder.java index ef9386b7956..850a4cdb2a5 100644 --- a/health-services/individual/src/test/java/org/egov/individual/helper/IndividualSearchRequestTestBuilder.java +++ b/health-services/individual/src/test/java/org/egov/individual/helper/IndividualSearchRequestTestBuilder.java @@ -1,19 +1,19 @@ package org.egov.individual.helper; -import org.egov.common.contract.request.RequestInfo; -import org.egov.common.helper.RequestInfoTestBuilder; -import org.egov.common.models.individual.Gender; -import org.egov.common.models.individual.Identifier; -import org.egov.common.models.individual.Name; -import org.egov.individual.web.models.IndividualSearch; -import org.egov.individual.web.models.IndividualSearchRequest; - import java.time.LocalDate; import java.time.ZoneId; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import org.egov.common.contract.request.RequestInfo; +import org.egov.common.helper.RequestInfoTestBuilder; +import org.egov.common.models.individual.Gender; +import org.egov.common.models.individual.Identifier; +import org.egov.common.models.individual.IndividualSearch; +import org.egov.common.models.individual.IndividualSearchRequest; +import org.egov.common.models.individual.Name; + public class IndividualSearchRequestTestBuilder { private IndividualSearchRequest.IndividualSearchRequestBuilder builder; diff --git a/health-services/individual/src/test/java/org/egov/individual/helper/IndividualSearchTestBuilder.java b/health-services/individual/src/test/java/org/egov/individual/helper/IndividualSearchTestBuilder.java index ed10e84d6c5..ffcc1ee9152 100644 --- a/health-services/individual/src/test/java/org/egov/individual/helper/IndividualSearchTestBuilder.java +++ b/health-services/individual/src/test/java/org/egov/individual/helper/IndividualSearchTestBuilder.java @@ -4,7 +4,7 @@ import org.egov.common.models.individual.Gender; import org.egov.common.models.individual.Identifier; import org.egov.common.models.individual.Name; -import org.egov.individual.web.models.IndividualSearch; +import org.egov.common.models.individual.IndividualSearch; import java.time.LocalDate; import java.time.ZoneId; diff --git a/health-services/individual/src/test/java/org/egov/individual/repository/IndividualRepositoryTest.java b/health-services/individual/src/test/java/org/egov/individual/repository/IndividualRepositoryTest.java index 8167285ff87..1da11ed66a6 100644 --- a/health-services/individual/src/test/java/org/egov/individual/repository/IndividualRepositoryTest.java +++ b/health-services/individual/src/test/java/org/egov/individual/repository/IndividualRepositoryTest.java @@ -9,7 +9,7 @@ import org.egov.individual.repository.rowmapper.AddressRowMapper; import org.egov.individual.repository.rowmapper.IdentifierRowMapper; import org.egov.individual.repository.rowmapper.IndividualRowMapper; -import org.egov.individual.web.models.IndividualSearch; +import org.egov.common.models.individual.IndividualSearch; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -19,6 +19,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.jdbc.core.ResultSetExtractor; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.test.util.ReflectionTestUtils; @@ -69,17 +70,25 @@ void shouldFindByIdFromDbAndReturnAllTheDependentEntitiesAsWellIfPresent() throw Individual individual = IndividualTestBuilder.builder() .withId() .build(); + when(namedParameterJdbcTemplate.query(anyString(), anyMap(), any(IndividualRowMapper.class))) .thenReturn(Collections.singletonList(individual)); + when(namedParameterJdbcTemplate.query(anyString(), anyMap(), any(ResultSetExtractor.class))).thenReturn(0L); + individualRepository.findById(Arrays.asList("some-id"), "id", false); verify(namedParameterJdbcTemplate, times(1)) .query(anyString(), anyMap(), any(IndividualRowMapper.class)); + verify(namedParameterJdbcTemplate, times(1)) .query(anyString(), anyMap(), any(AddressRowMapper.class)); + verify(namedParameterJdbcTemplate, times(1)) .query(anyString(), anyMap(), any(IdentifierRowMapper.class)); + + verify(namedParameterJdbcTemplate, times(1)) + .query(anyString(), anyMap(), any(ResultSetExtractor.class)); } @Test @@ -97,9 +106,12 @@ void shouldFindOtherParamsFromDbAndReturnAllTheDependentEntitiesAsWellIfPresent( Individual individual = IndividualTestBuilder.builder() .withId() .build(); + when(namedParameterJdbcTemplate.query(anyString(), anyMap(), any(IndividualRowMapper.class))) .thenReturn(Collections.singletonList(individual)); + when(namedParameterJdbcTemplate.query(anyString(), anyMap(), any(ResultSetExtractor.class))).thenReturn(0L); + individualRepository.find(individualSearch, 2, 0, "default", null, true); @@ -109,6 +121,9 @@ void shouldFindOtherParamsFromDbAndReturnAllTheDependentEntitiesAsWellIfPresent( .query(anyString(), anyMap(), any(AddressRowMapper.class)); verify(namedParameterJdbcTemplate, times(1)) .query(anyString(), anyMap(), any(IdentifierRowMapper.class)); + verify(namedParameterJdbcTemplate, times(1)) + .query(anyString(), anyMap(), any(ResultSetExtractor.class)); + } @Test diff --git a/health-services/individual/src/test/java/org/egov/individual/service/IndividualServiceSearchTest.java b/health-services/individual/src/test/java/org/egov/individual/service/IndividualServiceSearchTest.java index 9f52892600a..43ec00dd0e3 100644 --- a/health-services/individual/src/test/java/org/egov/individual/service/IndividualServiceSearchTest.java +++ b/health-services/individual/src/test/java/org/egov/individual/service/IndividualServiceSearchTest.java @@ -3,10 +3,13 @@ import org.egov.common.contract.request.RequestInfo; import org.egov.common.data.query.exception.QueryBuilderException; import org.egov.common.helper.RequestInfoTestBuilder; +import org.egov.common.models.individual.IndividualSearch; +import org.egov.common.models.core.SearchResponse; +import org.egov.common.models.individual.Individual; import org.egov.common.service.IdGenService; import org.egov.individual.helper.IndividualSearchTestBuilder; +import org.egov.individual.helper.IndividualTestBuilder; import org.egov.individual.repository.IndividualRepository; -import org.egov.individual.web.models.IndividualSearch; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -14,8 +17,12 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import java.util.Collections; + import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.any; import static org.mockito.Mockito.times; @@ -46,6 +53,11 @@ void shouldSearchOnlyByIdIfOnlyIdIsPresent() throws QueryBuilderException { .build(); RequestInfo requestInfo = RequestInfoTestBuilder.builder().withCompleteRequestInfo().build(); + when(individualRepository.findById(anyList(), anyString(), anyBoolean())) + .thenReturn(SearchResponse.builder().totalCount(1L).response(Collections.singletonList(IndividualTestBuilder.builder() + .withId("some-id") + .build())).build()); + individualService.search(individualSearch, 0, 10, "default", null, false,requestInfo); @@ -60,9 +72,18 @@ void shouldNotThrowExceptionIfArrayIsNull() throws QueryBuilderException { .byNullId() .build(); RequestInfo requestInfo = RequestInfoTestBuilder.builder().withCompleteRequestInfo().build(); + when(encryptionService.encrypt(any(IndividualSearch.class), any(String.class))).thenReturn(individualSearch); + + when(individualRepository.find(any(IndividualSearch.class), anyInt(), anyInt(), anyString(), + any(), anyBoolean())).thenReturn(SearchResponse.builder() + .totalCount(1L) + .response(Collections.singletonList(IndividualTestBuilder.builder() + .withId("some-id") + .build())).build()); + individualService.search(individualSearch, 0, 10, - "default", null, false,requestInfo); + "default", null, false, requestInfo); verify(individualRepository, times(0)).findById(anyList(), eq("id"), anyBoolean()); @@ -76,6 +97,11 @@ void shouldSearchByOnlyClientReferenceIdIfOnlyClientReferenceIdIsPresent() throw .build(); RequestInfo requestInfo = RequestInfoTestBuilder.builder().withCompleteRequestInfo().build(); + when(individualRepository.findById(anyList(), anyString(), anyBoolean())) + .thenReturn(SearchResponse.builder().response(Collections.singletonList(IndividualTestBuilder.builder() + .withId("some-id") + .build())).build()); + individualService.search(individualSearch, 0, 10, "default", null, false,requestInfo); @@ -92,7 +118,12 @@ void shouldNotCallFindByIdIfParametersOtherThanIdArePresent() throws QueryBuilde .build(); RequestInfo requestInfo = RequestInfoTestBuilder.builder().withCompleteRequestInfo().build(); + + when(individualRepository.find(any(IndividualSearch.class), anyInt(), anyInt(), anyString(), any(), anyBoolean())) + .thenReturn(SearchResponse.builder().build()); + when(encryptionService.encrypt(any(IndividualSearch.class), any(String.class))).thenReturn(individualSearch); + individualService.search(individualSearch, 0, 10, "default", null, false,requestInfo); @@ -109,6 +140,12 @@ void shouldCallFindIfParametersOtherThanIdArePresent() throws QueryBuilderExcept .build(); RequestInfo requestInfo = RequestInfoTestBuilder.builder().withCompleteRequestInfo().build(); when(encryptionService.encrypt(any(IndividualSearch.class), any(String.class))).thenReturn(individualSearch); + + when(individualRepository.find(any(IndividualSearch.class), anyInt(), anyInt(), anyString(), + any(), anyBoolean())).thenReturn(SearchResponse.builder().totalCount(1L).response(Collections.singletonList(IndividualTestBuilder.builder() + .withId("some-id") + .build())).build()); + individualService.search(individualSearch, 0, 10, "default", null, false,requestInfo); diff --git a/health-services/individual/src/test/java/org/egov/individual/service/IndividualServiceTest.java b/health-services/individual/src/test/java/org/egov/individual/service/IndividualServiceTest.java index 231aa15f8ae..cc2a2c55ca8 100644 --- a/health-services/individual/src/test/java/org/egov/individual/service/IndividualServiceTest.java +++ b/health-services/individual/src/test/java/org/egov/individual/service/IndividualServiceTest.java @@ -38,7 +38,10 @@ import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class IndividualServiceTest { diff --git a/health-services/individual/src/test/java/org/egov/individual/service/IndividualServiceUpdateTest.java b/health-services/individual/src/test/java/org/egov/individual/service/IndividualServiceUpdateTest.java index fa4d39f7c3b..7bb2c142e30 100644 --- a/health-services/individual/src/test/java/org/egov/individual/service/IndividualServiceUpdateTest.java +++ b/health-services/individual/src/test/java/org/egov/individual/service/IndividualServiceUpdateTest.java @@ -1,6 +1,7 @@ package org.egov.individual.service; import org.egov.common.helper.RequestInfoTestBuilder; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.individual.Identifier; import org.egov.common.models.individual.Individual; import org.egov.common.models.individual.IndividualBulkRequest; @@ -175,7 +176,10 @@ void shouldCheckRowVersionsIfEntitiesAreValid() { .build()); - when(individualRepository.findById(anyList(),eq("id"),eq(false))).thenReturn(individualsInDb); + when(individualRepository.findById(anyList(),eq("id"),eq(false))).thenReturn(SearchResponse.builder() + .totalCount(Long.valueOf(individualsInDb.size())) + .response(individualsInDb) + .build()); when(encryptionService.encrypt(any(IndividualBulkRequest.class), anyList(), any(String.class), anyBoolean())).thenReturn(Collections.singletonList(requestIndividual)); @@ -246,7 +250,10 @@ void shouldSaveTheUpdatedEntities() { .withAuditDetails() .build()); - when(individualRepository.findById(anyList(),eq("id"),eq(false))).thenReturn(individualsInDb); + when(individualRepository.findById(anyList(),eq("id"),eq(false))).thenReturn(SearchResponse.builder() + .totalCount(Long.valueOf(individualsInDb.size())) + .response(individualsInDb) + .build()); when(encryptionService.encrypt(any(IndividualBulkRequest.class), anyList(), any(String.class), anyBoolean())).thenReturn(Collections.singletonList(requestIndividual)); List result = individualService.update(request); diff --git a/health-services/individual/src/test/java/org/egov/individual/validator/NonExistentEntityValidatorTest.java b/health-services/individual/src/test/java/org/egov/individual/validator/NonExistentEntityValidatorTest.java index c405c4da68d..fe54f1e585a 100644 --- a/health-services/individual/src/test/java/org/egov/individual/validator/NonExistentEntityValidatorTest.java +++ b/health-services/individual/src/test/java/org/egov/individual/validator/NonExistentEntityValidatorTest.java @@ -2,6 +2,7 @@ import lombok.extern.slf4j.Slf4j; import org.egov.common.models.Error; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.individual.Address; import org.egov.common.models.individual.AddressType; import org.egov.common.models.individual.Identifier; @@ -20,7 +21,6 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -65,7 +65,10 @@ void shouldNotGiveErrorWhenEntityExists() { IndividualBulkRequest individualBulkRequest = IndividualBulkRequestTestBuilder.builder().withIndividuals(individual).build(); List existingIndividuals = new ArrayList<>(); existingIndividuals.add(individual); - lenient().when(individualRepository.findById(anyList(), anyString(), eq(false))).thenReturn(existingIndividuals); + lenient().when(individualRepository.findById(anyList(), anyString(), eq(false))).thenReturn(SearchResponse.builder() + .totalCount(Long.valueOf(existingIndividuals.size())) + .response(existingIndividuals) + .build()); assertTrue(nonExistentEntityValidator.validate(individualBulkRequest).isEmpty()); } @@ -77,7 +80,7 @@ void shouldGiveErrorWhenEntityDoesNotExist() { .withId("some-id") .build()) .build(); - when(individualRepository.findById(anyList(), anyString(), anyBoolean())).thenReturn(Collections.emptyList()); + when(individualRepository.findById(anyList(), anyString(), anyBoolean())).thenReturn(SearchResponse.builder().build()); Map> errorDetailsMap = new HashMap<>(); errorDetailsMap = nonExistentEntityValidator.validate(individualBulkRequest); List errorList = errorDetailsMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList()); diff --git a/health-services/individual/src/test/java/org/egov/individual/validator/RowVersionValidatorTest.java b/health-services/individual/src/test/java/org/egov/individual/validator/RowVersionValidatorTest.java index 3f02a431ba8..93eba62128a 100644 --- a/health-services/individual/src/test/java/org/egov/individual/validator/RowVersionValidatorTest.java +++ b/health-services/individual/src/test/java/org/egov/individual/validator/RowVersionValidatorTest.java @@ -2,6 +2,7 @@ import lombok.extern.slf4j.Slf4j; import org.egov.common.models.Error; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.individual.Address; import org.egov.common.models.individual.AddressType; import org.egov.common.models.individual.Identifier; @@ -64,7 +65,10 @@ void shouldNotGiveErrorWhenRowVersionMatches() { IndividualBulkRequest individualBulkRequest = IndividualBulkRequestTestBuilder.builder().withIndividuals(individual).build(); List existingIndividuals = new ArrayList<>(); existingIndividuals.add(individual); - lenient().when(individualRepository.findById(anyList(), anyString(), eq(false))).thenReturn(existingIndividuals); + lenient().when(individualRepository.findById(anyList(), anyString(), eq(false))).thenReturn(SearchResponse.builder() + .totalCount(Long.valueOf(existingIndividuals.size())) + .response(existingIndividuals) + .build()); assertTrue(rowVersionValidator.validate(individualBulkRequest).isEmpty()); } @@ -78,9 +82,9 @@ void shouldGiveErrorWhenRowVersionDoesNotMatch() { .build(); individualBulkRequest.getIndividuals().get(0).setRowVersion(2); when(individualRepository.findById(anyList(), anyString(), anyBoolean())) - .thenReturn(Collections.singletonList(IndividualTestBuilder.builder() + .thenReturn(SearchResponse.builder().totalCount(1L).response(Collections.singletonList(IndividualTestBuilder.builder() .withId("some-id") - .build())); + .build())).build()); Map> errorDetailsMap = new HashMap<>(); errorDetailsMap = rowVersionValidator.validate(individualBulkRequest); List errorList = errorDetailsMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList()); diff --git a/health-services/individual/src/test/java/org/egov/individual/web/controllers/IndividualApiControllerTest.java b/health-services/individual/src/test/java/org/egov/individual/web/controllers/IndividualApiControllerTest.java index d25f5270531..b9b559f6d0c 100644 --- a/health-services/individual/src/test/java/org/egov/individual/web/controllers/IndividualApiControllerTest.java +++ b/health-services/individual/src/test/java/org/egov/individual/web/controllers/IndividualApiControllerTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.egov.common.contract.request.RequestInfo; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.individual.Individual; import org.egov.common.models.individual.IndividualBulkRequest; import org.egov.common.models.individual.IndividualBulkResponse; @@ -15,8 +16,8 @@ import org.egov.individual.helper.IndividualSearchRequestTestBuilder; import org.egov.individual.helper.IndividualTestBuilder; import org.egov.individual.service.IndividualService; -import org.egov.individual.web.models.IndividualSearch; -import org.egov.individual.web.models.IndividualSearchRequest; +import org.egov.common.models.individual.IndividualSearch; +import org.egov.common.models.individual.IndividualSearchRequest; import org.egov.tracer.model.ErrorRes; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -163,7 +164,7 @@ void shouldSend200OkIfSearchIsSuccessfulAndResultsAreNotEmpty() throws Exception any(String.class), any(Long.class), any(Boolean.class), - any(RequestInfo.class))).thenReturn(Collections.singletonList(responseIndividual)); + any(RequestInfo.class))).thenReturn(SearchResponse.builder().response(Collections.singletonList(responseIndividual)).build()); MvcResult result = mockMvc.perform(post("/v1/_search?limit=10&offset=100&tenantId=default&lastChangedSince=1234322&includeDeleted=false") .contentType(MediaType diff --git a/health-services/libraries/health-services-common/Dockerfile b/health-services/libraries/health-services-common/Dockerfile index cd50dd4120d..80abf117900 100644 --- a/health-services/libraries/health-services-common/Dockerfile +++ b/health-services/libraries/health-services-common/Dockerfile @@ -1,8 +1,10 @@ -FROM egovio/alpine-maven-builder-jdk-8:1-master-NA-6036091e AS build +FROM egovio/amazoncorretto:17-alpine3.19 AS build ARG WORK_DIR ARG nexusUsername ARG nexusPassword WORKDIR /app +# Install Maven +RUN apk add --no-cache maven # copy the project files COPY ${WORK_DIR}/pom.xml ./pom.xml COPY ${WORK_DIR}/settings.xml ./settings.xml diff --git a/health-services/libraries/health-services-common/pom.xml b/health-services/libraries/health-services-common/pom.xml index bb50d4a90d6..6eaa45c5acc 100644 --- a/health-services/libraries/health-services-common/pom.xml +++ b/health-services/libraries/health-services-common/pom.xml @@ -8,19 +8,20 @@ health-services-common jar health-services-common - 1.0.12-SNAPSHOT + 1.0.16-SNAPSHOT Shared classes among services org.springframework.boot spring-boot-starter-parent - 2.2.6.RELEASE + 3.2.2 - 8 - 8 + 17 + ${java.version} + ${java.version} UTF-8 @@ -52,26 +53,34 @@ spring-boot-starter-test test + + junit + junit + 4.13.2 + test + com.h2database h2 [2.1.212,) test + + jakarta.validation + jakarta.validation-api + 3.0.2 + compile + org.projectlombok lombok true + 1.18.22 com.fasterxml.jackson.datatype jackson-datatype-jsr310 - - org.projectlombok - lombok - true - org.springframework.boot spring-boot-starter-jdbc @@ -84,7 +93,7 @@ org.egov.services tracer - 2.1.4-SNAPSHOT + 2.9.0-SNAPSHOT org.springframework.boot @@ -100,6 +109,20 @@ redis.clients jedis + + + + + + org.hibernate.validator + hibernate-validator + + + org.egov.common + health-services-models + 1.0.20-SNAPSHOT + compile + @@ -107,6 +130,17 @@ org.apache.maven.plugins maven-site-plugin 3.7.1 + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.1.2 + + --add-opens java.base/java.util=ALL-UNNAMED + org.apache.maven.plugins diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/AddressDummyTest.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/AddressDummyTest.java deleted file mode 100644 index e16fec2687b..00000000000 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/AddressDummyTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.egov.common; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class AddressDummyTest { - - @JsonProperty("addressId") - private String addressId; - - @JsonProperty("addressText") - private String addressText; -} diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/mapper/GenericRowMapper.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/mapper/GenericRowMapper.java deleted file mode 100644 index 0d834d127e2..00000000000 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/mapper/GenericRowMapper.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.egov.common.data.mapper; - -import org.egov.common.utils.ObjectUtils; -import org.springframework.beans.BeanUtils; -import org.springframework.jdbc.core.RowMapper; -import org.springframework.jdbc.support.JdbcUtils; - -import java.lang.reflect.Field; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.SQLException; -import java.util.HashMap; -import java.util.Map; - -/** - * GenericRowMapper is an implementation of RowMapper. It is used for mapping ResultSet from sql query to List

- * GenericRowMapper throws SQLException if there is an error related to ResultSet, db or query.

- * GenericRowMapper throws RuntimeException whenever there is an error while converting resultset to object.

- *

- *

- * Requirements to use GenericRowMapper

- * * Column name and member variable name must be similar. For example, columnName "price" will be mapped to member variable named "price"

- * * Column type and member variable type must be compatible. For example, columnType "int" should be mapped to numeric data type, if you try map "int" to string, etc. IllegalArgumentException will be thrown.

- * * Default Constructor needs to be present for the object. Default Constructor is a constructor with no arguments.

- *

- *

- * Example:

- * Table Employee(id int, name varchar(50), salary int)

- * class Emp{

- * private int id;

- * private int someId;

- * private String name;

- * int salary;

- * }

- *

- *

- *Notice: someId will not be mapped because it does not match with any column name from employee table; - *

- *

- *

- * Usage:

- * List emps = jdbcQueryTemplate.query("select * from Employee", new GenericRowMapper(Emp.class)) - */ - - -public class GenericRowMapper implements RowMapper { - private Class mappedClass; - - public GenericRowMapper(Class mappedClass) { - this.mappedClass = mappedClass; - } - - private Object mapRow(Class clazz, Map row) throws IllegalAccessException, IllegalArgumentException { - Object parentObject = BeanUtils.instantiateClass(clazz); - Field[] fields = parentObject.getClass().getDeclaredFields(); - for (Field f : fields) { - f.setAccessible(true); - if (!f.getType().isPrimitive() && !ObjectUtils.isWrapper(f)) { - Object nestedObject = mapRow(f.getType(), row); - f.set(parentObject, nestedObject); - }else{ - Object value = row.get(f.getName()); - f.set(parentObject, value); - } - } - return parentObject; - } - - private Map getMap(ResultSet rs) throws SQLException, ClassNotFoundException { - ResultSetMetaData metaData = rs.getMetaData(); - int columnCount = metaData.getColumnCount(); - - Map row = new HashMap(columnCount); - - for (int index = 1; index <= columnCount; index++) { - String column = JdbcUtils.lookupColumnName(metaData, index); - Object value = JdbcUtils.getResultSetValue(rs, index, Class.forName(metaData.getColumnClassName(index))); - row.put(column, value); - } - return row; - } - - @Override - public T mapRow(ResultSet rs, int rowNum) throws SQLException{ - T instance; - try { - Map row = getMap(rs); - instance = (T) mapRow(this.mappedClass, row); - } catch (SQLException e) { - throw e; - } catch (Exception e){ - throw new RuntimeException(e.getMessage()); - } - - return instance; - } -} diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/annotations/Exclude.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/annotations/Exclude.java index b7df66c8ccd..e5c3d79b7a2 100644 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/annotations/Exclude.java +++ b/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/annotations/Exclude.java @@ -7,5 +7,7 @@ @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/libraries/health-services-common/src/main/java/org/egov/common/data/query/annotations/Table.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/annotations/Table.java index 61dbd2d5d53..5f23e34e17a 100644 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/annotations/Table.java +++ b/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/annotations/Table.java @@ -7,6 +7,9 @@ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) +// It is used to specify the table name associated with a class. +// When you annotate a class with @Table, it indicates that the class is mapped to a table in the database. +// Used in GenericQueryBuilder public @interface Table { String name() default ""; } diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/annotations/UpdateBy.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/annotations/UpdateBy.java index e1ae3c7dfc7..9a7c9869bde 100644 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/annotations/UpdateBy.java +++ b/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/annotations/UpdateBy.java @@ -7,5 +7,7 @@ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) +// This annotation is used to mark specific fields in a class that should be specially considered during update operations +// Used in GenericQueryBuilder public @interface UpdateBy { } diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/builder/GenericQueryBuilder.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/builder/GenericQueryBuilder.java index b6086351e9d..73682275fe8 100644 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/builder/GenericQueryBuilder.java +++ b/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/builder/GenericQueryBuilder.java @@ -28,18 +28,38 @@ static String updateQueryTemplate(String tableName){ return String.format("UPDATE %s", tableName); } - static String generateClause(String clauseName, String seperator, List queryParameters){ + /** + * Generates a clause for a SQL query. + * + * @param clauseName the name of the clause (e.g., "WHERE", "AND", "OR") + * @param separator the separator between query parameters (e.g., "=", "LIKE") + * @param queryParameters the list of query parameters to be included in the clause + * @return the generated clause as a string + */ + static String generateClause(String clauseName, String separator, List queryParameters) { + // Initialize a StringBuilder to construct the clause StringBuilder clauseBuilder = new StringBuilder(); + + // If there are no query parameters, return an empty string if (queryParameters.isEmpty()) { - return " WHERE 1=1 "; + return " "; } + + // Append the clause name to the clauseBuilder clauseBuilder.append(String.format(" %s ", clauseName)); + + // Append the first query parameter to the clauseBuilder clauseBuilder.append(String.format(queryParameters.get(0))); + + // Append the remaining query parameters to the clauseBuilder with the specified separator IntStream.range(1, queryParameters.size()).forEach(i -> - clauseBuilder.append(String.format(" %s %s", seperator ,queryParameters.get(i)))); + clauseBuilder.append(String.format(" %s %s", separator, queryParameters.get(i)))); + + // Convert the clauseBuilder to a string and return it return clauseBuilder.toString(); } + static StringBuilder generateQuery(String queryTemplate, List setClauseFields, List whereClauseFields){ StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(queryTemplate); @@ -55,41 +75,71 @@ static StringBuilder generateQuery(String queryTemplate, List whereClaus return stringBuilder; } + /** + * Retrieves fields of an object based on a condition and constructs where clauses for a query. + * + * @param object the object for which fields are to be retrieved + * @param checkCondition the condition to check for each field + * @param paramsMap a map to store parameter values for the query + * @return a list of where clauses based on the fields and condition + */ static List getFieldsWithCondition(Object object, QueryFieldChecker checkCondition, Map paramsMap) { + // List to store where clauses List whereClauses = new ArrayList<>(); + + // Iterate through all declared fields of the object Arrays.stream(object.getClass().getDeclaredFields()).forEach(field -> { + // Check if the field is of type LocalDate or enum if (field.getType().equals(LocalDate.class) || field.getType().isEnum()) { - // do nothing + // Skip processing for LocalDate and enum fields + // No condition applied } else { + // Make the field accessible for manipulation field.setAccessible(true); try { + // Check if the field meets the condition and is not annotated with exclude if (!field.getType().isPrimitive() && checkCondition.check(field, object) && QueryFieldChecker.isNotAnnotatedWithExclude.check(field, object)) { + // If the field is a wrapper object if (ObjectUtils.isWrapper(field)) { + // Retrieve field name String fieldName = field.getName(); + // Add parameter to paramsMap paramsMap.put(fieldName, field.get(object)); + // Add where clause to list whereClauses.add(String.format("%s=:%s", fieldName, fieldName)); - } else if (field.getType().isAssignableFrom(ArrayList.class) + } + // If the field is an ArrayList of Strings + else if (field.getType().isAssignableFrom(ArrayList.class) && field.getGenericType() instanceof ParameterizedType && ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0].equals(String.class)) { + // Cast field value to ArrayList ArrayList arrayList = (ArrayList) field.get(object); + // Retrieve field name String fieldName = field.getName(); + // Check if the ArrayList is not null or empty if (arrayList != null && !arrayList.isEmpty()) { + // Add IN clause to list whereClauses.add(String.format("%s IN (:%s)", fieldName, fieldName)); + // Add parameter to paramsMap paramsMap.put(fieldName, arrayList); } } else { + // If the field is not a wrapper object or ArrayList, recursively process nested objects Object objectAtField = field.get(object); if (objectAtField != null) { + // Recursively call the method to retrieve fields from nested object whereClauses.addAll(getFieldsWithCondition(objectAtField, checkCondition, paramsMap)); } } } } catch (IllegalAccessException e) { + // Throw a runtime exception if there's an issue accessing the field throw new RuntimeException(e); } } }); return whereClauses; } + } diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/builder/SelectQueryBuilder.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/builder/SelectQueryBuilder.java index de274691e6e..3db008197d4 100644 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/builder/SelectQueryBuilder.java +++ b/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/query/builder/SelectQueryBuilder.java @@ -1,5 +1,6 @@ package org.egov.common.data.query.builder; +import org.apache.commons.lang3.StringUtils; import org.egov.common.data.query.exception.QueryBuilderException; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -20,9 +21,19 @@ public Map getParamsMap(){ @Override public String build(Object object) throws QueryBuilderException { + String tableName = null; + try { + tableName = GenericQueryBuilder.getTableName(object.getClass()); + } catch (Exception exception) { + throw new QueryBuilderException(exception.getMessage()); + } + + return build(object, tableName); + } + + public String build(Object object, String tableName) throws QueryBuilderException { StringBuilder queryStringBuilder = null; try { - String tableName = GenericQueryBuilder.getTableName(object.getClass()); List whereClauses = GenericQueryBuilder.getFieldsWithCondition(object, QueryFieldChecker.isNotNull, paramsMap); queryStringBuilder = GenericQueryBuilder.generateQuery(GenericQueryBuilder.selectQueryTemplate(tableName), whereClauses); } catch (Exception exception) { diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/repository/GenericRepository.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/repository/GenericRepository.java index 347fc4966a4..1c3f1f898dc 100644 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/repository/GenericRepository.java +++ b/health-services/libraries/health-services-common/src/main/java/org/egov/common/data/repository/GenericRepository.java @@ -26,6 +26,11 @@ import static org.egov.common.utils.CommonUtils.getMethod; import static org.egov.common.utils.CommonUtils.getObjClass; +/** + * Generic Repository Class for common data operations. + * + * @param The type of entity this repository deals with. + */ @Slf4j public abstract class GenericRepository { @@ -56,10 +61,23 @@ protected GenericRepository(Producer producer, NamedParameterJdbcTemplate namedP tableName.ifPresent(tb -> this.tableName = tb); } + /** + * Finds entities by their IDs. + * + * @param ids The list of IDs to search for. + * @return A list of entities found by the given IDs. + */ public List findById(List ids) { return findById(ids, false); } + /** + * Finds entities by their IDs with an option to include deleted entities. + * + * @param ids The list of IDs to search for. + * @param includeDeleted Flag to include deleted entities in the search result. + * @return A list of entities found by the given IDs. + */ protected List findInCache(List ids) { ArrayList objFound = new ArrayList<>(); Collection collection = ids.stream().filter(Objects::nonNull) @@ -81,10 +99,27 @@ protected List findInCache(List ids) { return objFound; } + /** + * Finds entities by their IDs with an option to include deleted entities, + * using the default column name "id" for ID search. + * + * @param ids The list of IDs to search for. + * @param includeDeleted Flag to include deleted entities in the search result. + * @return A list of entities found by the given IDs. + */ public List findById(List ids, Boolean includeDeleted) { + // Delegates to the main findById method with the default column name "id" return findById(ids, includeDeleted, "id"); } + /** + * Finds entities by their IDs with options to include deleted entities and specify a column name. + * + * @param ids The list of IDs to search for. + * @param includeDeleted Flag to include deleted entities in the search result. + * @param columnName The name of the column to search IDs in. + * @return A list of entities found by the given IDs. + */ public List findById(List ids, Boolean includeDeleted, String columnName) { List objFound = findInCache(ids); @@ -115,6 +150,13 @@ public List findById(List ids, Boolean includeDeleted, String columnN return objFound; } + /** + * Saves entities to Kafka and caches them. + * + * @param objects The list of entities to save. + * @param topic The Kafka topic to push the entities to. + * @return The list of saved entities. + */ public List save(List objects, String topic) { producer.push(topic, objects); log.info("Pushed to kafka"); @@ -123,6 +165,14 @@ public List save(List objects, String topic) { return objects; } + /** + * Saves entities to Kafka, caches them with specified cache key. + * + * @param objects The list of entities to save. + * @param topic The Kafka topic to push the entities to. + * @param cacheKey The cache key to use for caching the entities. + * @return The list of saved entities. + */ public List save(List objects, String topic, String cacheKey) { producer.push(topic, objects); log.info("Pushed to kafka"); @@ -131,6 +181,7 @@ public List save(List objects, String topic, String cacheKey) { return objects; } + // Cache objects by key protected void cacheByKey(List objects, String fieldName) { try{ Method getIdMethod = getIdMethod(objects, fieldName); @@ -154,6 +205,11 @@ protected void cacheByKey(List objects, String fieldName) { } } + /** + * Puts objects in cache. + * + * @param objects The list of objects to put in cache. + */ public void putInCache(List objects) { if(objects == null || objects.isEmpty()) { return; @@ -163,6 +219,12 @@ public void putInCache(List objects) { // cacheByKey(objects, "id"); } + /** + * Puts objects in cache with specified cache key. + * + * @param objects The list of objects to put in cache. + * @param key The cache key to use for caching the objects. + */ public void putInCache(List objects, String key) { if(objects == null || objects.isEmpty()) { return; @@ -171,15 +233,27 @@ public void putInCache(List objects, String key) { cacheByKey(objects, key); } + /** + * Finds entities based on search criteria. + * + * @param searchObject The object containing search criteria. + * @param limit The maximum number of entities to return. + * @param offset The offset for pagination. + * @param tenantId The tenant ID to filter entities. + * @param lastChangedSince The timestamp for last modified entities. + * @param includeDeleted Flag to include deleted entities in the search result. + * @return A list of entities found based on the search criteria. + * @throws QueryBuilderException If an error occurs while building the query. + */ public List find(Object searchObject, - Integer limit, - Integer offset, - String tenantId, - Long lastChangedSince, - Boolean includeDeleted) throws QueryBuilderException { - String query = selectQueryBuilder.build(searchObject); + Integer limit, + Integer offset, + String tenantId, + Long lastChangedSince, + Boolean includeDeleted) throws QueryBuilderException { + String query = selectQueryBuilder.build(searchObject, tableName); query += " AND tenantId=:tenantId "; - if (query.contains(tableName + " AND")) { + if (query.contains(tableName + " AND")) { query = query.replace(tableName + " AND", tableName + " WHERE"); } if (Boolean.FALSE.equals(includeDeleted)) { @@ -198,6 +272,13 @@ public List find(Object searchObject, return namedParameterJdbcTemplate.query(query, paramsMap, rowMapper); } + /** + * Validates IDs against existing entities. + * + * @param idsToValidate The list of IDs to validate. + * @param columnName The name of the column containing IDs. + * @return A list of valid IDs. + */ public List validateIds(List idsToValidate, String columnName){ List validIds = findById(idsToValidate, false, columnName); if (validIds.isEmpty()) { diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/error/handler/ErrorHandler.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/error/handler/ErrorHandler.java index ec82e2065c1..ffd00e62a76 100644 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/error/handler/ErrorHandler.java +++ b/health-services/libraries/health-services-common/src/main/java/org/egov/common/error/handler/ErrorHandler.java @@ -4,7 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; @Component public class ErrorHandler { diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/http/client/ServiceRequestClient.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/http/client/ServiceRequestClient.java index 22d2b64c296..6a4fcab2409 100644 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/http/client/ServiceRequestClient.java +++ b/health-services/libraries/health-services-common/src/main/java/org/egov/common/http/client/ServiceRequestClient.java @@ -1,6 +1,5 @@ package org.egov.common.http.client; - import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import lombok.extern.slf4j.Slf4j; @@ -11,6 +10,10 @@ import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; +/** + * Client for making service requests via HTTP. + * This class provides methods to fetch results from a service using HTTP POST requests. + */ @Repository @Slf4j public class ServiceRequestClient { @@ -19,27 +22,39 @@ public class ServiceRequestClient { private final RestTemplate restTemplate; - + // Constructor injection of ObjectMapper and RestTemplate @Autowired public ServiceRequestClient(@Qualifier("objectMapper") ObjectMapper objectMapper, RestTemplate restTemplate) { this.objectMapper = objectMapper; this.restTemplate = restTemplate; } - - public T fetchResult(StringBuilder uri, Object request, Class - clazz) { + /** + * Fetches result from a service using HTTP POST. + * + * @param uri The URI to send the request to. + * @param request The request object to send. + * @param clazz The class of the response object. + * @param The type of the response object. + * @return The response object received from the service. + * @throws CustomException If an error occurs during the service request. + */ + public T fetchResult(StringBuilder uri, Object request, Class clazz) { + // Configure the ObjectMapper to ignore empty beans during serialization objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); T response; try { + // Perform HTTP POST request and receive the response response = restTemplate.postForObject(uri.toString(), request, clazz); } catch (HttpClientErrorException e) { + // Handle HTTP client errors throw new CustomException("HTTP_CLIENT_ERROR", String.format("%s - %s", e.getMessage(), e.getResponseBodyAsString())); - }catch (Exception exception) { + } catch (Exception exception) { + // Handle other exceptions throw new CustomException("SERVICE_REQUEST_CLIENT_ERROR", exception.getMessage()); } return response; } -} \ No newline at end of file +} diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/models/user/CreateUserRequest.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/models/user/CreateUserRequest.java index db4196aec11..ebcc79c9259 100644 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/models/user/CreateUserRequest.java +++ b/health-services/libraries/health-services-common/src/main/java/org/egov/common/models/user/CreateUserRequest.java @@ -5,8 +5,8 @@ import lombok.NoArgsConstructor; import org.egov.common.contract.request.RequestInfo; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; @AllArgsConstructor @Getter diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/models/user/User.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/models/user/User.java index 95a8618aab2..46e1495f5d1 100644 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/models/user/User.java +++ b/health-services/libraries/health-services-common/src/main/java/org/egov/common/models/user/User.java @@ -10,8 +10,8 @@ import org.hibernate.validator.constraints.Email; import org.springframework.util.CollectionUtils; -import javax.validation.constraints.Pattern; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.Collections; import java.util.Date; diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/models/user/UserRequest.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/models/user/UserRequest.java index e194df585e2..75aa1bfb17d 100644 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/models/user/UserRequest.java +++ b/health-services/libraries/health-services-common/src/main/java/org/egov/common/models/user/UserRequest.java @@ -1,7 +1,14 @@ package org.egov.common.models.user; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; + import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -9,14 +16,6 @@ import lombok.Setter; import lombok.ToString; import org.hibernate.validator.constraints.Email; -import org.hibernate.validator.constraints.SafeHtml; - -import javax.validation.constraints.Pattern; -import javax.validation.constraints.Size; -import java.util.Date; -import java.util.HashSet; -import java.util.Set; -import java.util.stream.Collectors; @Setter @Getter @@ -25,14 +24,19 @@ @AllArgsConstructor @ToString public class UserRequest { +/** + * FIXME + * to be removed or replace with some alternative as the //@SafeHtml is no longer present + * with modern version of hibernate validator supported by springboot version 3.2.2 + */ private Long id; - @SafeHtml +// //@SafeHtml @Size(max = 64) private String userName; - @SafeHtml +// //@SafeHtml @Size(max = 5) private String salutation; @@ -54,33 +58,33 @@ public class UserRequest { @Size(max = 128) private String emailId; - @SafeHtml + //@SafeHtml @Size(max = 50) private String altContactNumber; - @SafeHtml + //@SafeHtml @Size(max = 10) private String pan; - @SafeHtml + //@SafeHtml @Size(max = 20) private String aadhaarNumber; - @SafeHtml + //@SafeHtml @Size(max = 300) private String permanentAddress; - @SafeHtml + //@SafeHtml @Pattern(regexp = UserServiceConstants.PATTERN_CITY) @Size(max = 50) private String permanentCity; - @SafeHtml + //@SafeHtml @Pattern(regexp = UserServiceConstants.PATTERN_PINCODE) @Size(max = 10) private String permanentPinCode; - @SafeHtml + //@SafeHtml @Size(max = 300) private String correspondenceAddress; @@ -93,7 +97,7 @@ public class UserRequest { private String correspondencePinCode; private Boolean active; - @SafeHtml + //@SafeHtml @Size(max = 16) private String locale; @@ -106,19 +110,19 @@ public class UserRequest { private String fatherOrHusbandName; private GuardianRelation relationship; - @SafeHtml + //@SafeHtml @Size(max = 36) private String signature; - @SafeHtml + //@SafeHtml @Size(max = 32) private String bloodGroup; - @SafeHtml + //@SafeHtml @Size(max = 36) private String photo; - @SafeHtml + //@SafeHtml @Size(max = 300) private String identificationMark; private Long createdBy; @@ -126,7 +130,7 @@ public class UserRequest { @Size(max = 64) private String password; - @SafeHtml + //@SafeHtml private String otpReference; private Long lastModifiedBy; @@ -136,7 +140,7 @@ public class UserRequest { private Set roles; - @SafeHtml + //@SafeHtml @Size(max = 36) private String uuid; diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/service/MdmsService.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/service/MdmsService.java index 10208611a30..b946a6380d4 100644 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/service/MdmsService.java +++ b/health-services/libraries/health-services-common/src/main/java/org/egov/common/service/MdmsService.java @@ -11,7 +11,7 @@ @Slf4j @Service -@ConditionalOnExpression("!'${egov.mdms.integration.enabled}'.isEmpty() && ${egov.mdms.integration.enabled:false} && !'${egov.mdms.host}'.isEmpty() && !'${egov.mdms.master.name}'.isEmpty() && !'${egov.mdms.search.endpoint}'.isEmpty()") +@ConditionalOnExpression("!'${egov.mdms.integration.enabled}'.isEmpty() && ${egov.mdms.integration.enabled:false} && !'${egov.mdms.host}'.isEmpty() && !'${egov.mdms.search.endpoint}'.isEmpty()") public class MdmsService { private final ServiceRequestClient restRepo; diff --git a/health-services/libraries/health-services-common/src/main/java/org/egov/common/utils/CommonUtils.java b/health-services/libraries/health-services-common/src/main/java/org/egov/common/utils/CommonUtils.java index 2ab18e03354..927a05044ca 100644 --- a/health-services/libraries/health-services-common/src/main/java/org/egov/common/utils/CommonUtils.java +++ b/health-services/libraries/health-services-common/src/main/java/org/egov/common/utils/CommonUtils.java @@ -1,23 +1,5 @@ package org.egov.common.utils; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import digit.models.coremodels.AuditDetails; -import lombok.extern.slf4j.Slf4j; -import org.egov.common.contract.request.RequestInfo; -import org.egov.common.ds.Tuple; -import org.egov.common.error.handler.ErrorHandler; -import org.egov.common.models.ApiDetails; -import org.egov.common.models.Error; -import org.egov.common.models.ErrorDetails; -import org.egov.common.validator.Validator; -import org.egov.tracer.model.CustomException; -import org.egov.tracer.model.ErrorDetail; -import org.egov.tracer.model.ErrorEntity; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.util.ReflectionUtils; - import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; @@ -39,6 +21,26 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import digit.models.coremodels.AuditDetails; +import lombok.extern.slf4j.Slf4j; +import org.egov.common.contract.request.RequestInfo; +import org.egov.common.ds.Tuple; +import org.egov.common.error.handler.ErrorHandler; +import org.egov.common.models.ApiDetails; +import org.egov.common.models.Error; +import org.egov.common.models.ErrorDetails; +import org.egov.common.models.core.URLParams; +import org.egov.common.validator.Validator; +import org.egov.tracer.model.CustomException; +import org.egov.tracer.model.ErrorDetail; +import org.egov.tracer.model.ErrorEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.util.ReflectionUtils; + import static org.egov.common.utils.ValidatorUtils.getErrorForNullId; @Slf4j @@ -56,6 +58,8 @@ private CommonUtils() { } + //TODO To be removed as it is only used by Product service which is now depricated + @Deprecated public static boolean isForUpdate(Object obj) { Method getApiOperationMethod = getMethod(GET_API_OPERATION, obj.getClass()); Object apiOperation = ReflectionUtils.invokeMethod(getApiOperationMethod, obj); @@ -66,6 +70,8 @@ public static boolean isForUpdate(Object obj) { return "UPDATE".equals(ReflectionUtils.invokeMethod(nameMethod, apiOperation)); } + //TODO To be removed as it is only used by Product service which is now depricated + @Deprecated public static boolean isForDelete(Object obj) { Method getApiOperationMethod = getMethod(GET_API_OPERATION, obj.getClass()); Object apiOperation = ReflectionUtils.invokeMethod(getApiOperationMethod, obj); @@ -76,6 +82,8 @@ public static boolean isForDelete(Object obj) { return "DELETE".equals(ReflectionUtils.invokeMethod(nameMethod, apiOperation)); } + //TODO To be removed as it is only used by Product service which is now depricated + @Deprecated public static boolean isForCreate(Object obj) { Method getApiOperationMethod = getMethod(GET_API_OPERATION, obj.getClass()); Object apiOperation = ReflectionUtils.invokeMethod(getApiOperationMethod, obj); @@ -102,6 +110,8 @@ public static List getDifference(List list, List subList) { return newList; } + //TODO To be removed as it is only used by Product service which is now depricated + @Deprecated public static void validateIds(Set idsToValidate, UnaryOperator> validator) { List idsToValidateList = new ArrayList<>(idsToValidate); List validIds = validator.apply(idsToValidateList); @@ -112,6 +122,13 @@ public static void validateIds(Set idsToValidate, UnaryOperator> } } + /** + * Retrieves audit details for creating an entity. + * This method generates audit details including creation and last modified timestamps. + * + * @param requestInfo The request information containing user details. + * @return The audit details for create operation. + */ public static AuditDetails getAuditDetailsForCreate(RequestInfo requestInfo) { log.info("Creating audit details for create api"); Long time = System.currentTimeMillis(); @@ -119,7 +136,8 @@ public static AuditDetails getAuditDetailsForCreate(RequestInfo requestInfo) { .createdBy(requestInfo.getUserInfo().getUuid()) .createdTime(time) .lastModifiedBy(requestInfo.getUserInfo().getUuid()) - .lastModifiedTime(time).build(); + .lastModifiedTime(time) + .build(); } /** @@ -142,39 +160,111 @@ public static AuditDetails getAuditDetailsForUpdate(AuditDetails existingAuditDe } } + /** + * Checks if the search is performed by ID only. + * @param obj The object to check. + * @return True if the search is by ID only, false otherwise. + */ public static boolean isSearchByIdOnly(Object obj) { return isSearchByIdOnly(obj, "id"); } + /** + * Checks if the search is performed only by the specified field. + * + * @param obj The object to perform the search on. + * @param fieldName The name of the field to search. + * @return true if the search is performed only by the specified field, otherwise false. + */ public static boolean isSearchByIdOnly(Object obj, String fieldName) { + // Get the class of the object Class objClass = obj.getClass(); + // Capitalize the first letter of the field name String propertyName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); - Method setIdMethod = getMethod("set"+propertyName, objClass); - Method getIdMethod = getMethod("get"+propertyName, objClass); + // Get the method to set the field + Method setFieldMethod = getMethod("set" + propertyName, objClass); + // Get the method to get the field value + Method getFieldMethod = getMethod("get" + propertyName, objClass); + // Create a new instance of the object Object finalObject = null; try { finalObject = objClass.newInstance(); } catch (InstantiationException | IllegalAccessException e) { + // Throw a runtime exception if instantiation fails throw new RuntimeException(e); } - Object id = ReflectionUtils.invokeMethod(getIdMethod, obj); - ReflectionUtils.invokeMethod(setIdMethod, finalObject, id); + // Get the ID of the object + Object id = ReflectionUtils.invokeMethod(getFieldMethod, obj); + // If ID is null, return false if (id == null) { return false; } - String actual = obj.toString(); - String expected = finalObject.toString(); - return actual.equals(expected); + // Set the ID to the final object + ReflectionUtils.invokeMethod(setFieldMethod, finalObject, id); + + // If the object is an instance of URLParams, set common properties + if (obj instanceof URLParams) { + URLParams urlParamsObj = ((URLParams) obj); + URLParams finalUrlParamsObj = ((URLParams) finalObject); + finalUrlParamsObj.setIncludeDeleted(urlParamsObj.getIncludeDeleted()); + finalUrlParamsObj.setTenantId(urlParamsObj.getTenantId()); + finalUrlParamsObj.setOffset(urlParamsObj.getOffset()); + finalUrlParamsObj.setLimit(urlParamsObj.getLimit()); + finalUrlParamsObj.setLastChangedSince(urlParamsObj.getLastChangedSince()); + } + + // compare both objects + return areObjectsEqual(obj, finalObject); } + public static boolean areObjectsEqual(Object obj1, Object obj2) { + if (obj1 == null || obj2 == null) { + return false; + } + + // Get the class of the objects + Class objClass = obj1.getClass(); + + // Iterate through all fields in the class, including parent fields + StringBuilder obj1Fields = new StringBuilder(); + StringBuilder obj2Fields = new StringBuilder(); + + while(objClass.getSuperclass() != null) { + for (Field field : objClass.getDeclaredFields()) { + field.setAccessible(true); // Ensure private fields are accessible + + try { + // Get the value of the field for each object + Object value1 = field.get(obj1); + Object value2 = field.get(obj2); + + // Append the field name and value to the string representation + obj1Fields.append(field.getName()).append(":").append(value1).append(","); + obj2Fields.append(field.getName()).append(":").append(value2).append(","); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + objClass = objClass.getSuperclass(); + } + + // Compare the string representations of the objects + return obj1Fields.toString().equals(obj2Fields.toString()); + } + + + //TODO To be removed as it is only used by Product service which is now depricated + @Deprecated public static void checkRowVersion(Map idToObjMap, List objList) { Class objClass = getObjClass(objList); checkRowVersion(idToObjMap, objList, getMethod("getId", objClass)); } + //TODO To be removed as it is only used by Product service which is now depricated + @Deprecated public static void checkRowVersion(Map idToObjMap, List objList, Method idMethod) { Class objClass = getObjClass(objList); Method rowVersionMethod = getMethod("getRowVersion", objClass); @@ -189,10 +279,21 @@ public static void checkRowVersion(Map idToObjMap, List objLis } } + /** + * Retrieves entities from a list with mismatched row versions compared to a map of IDs to objects. + * @param idToObjMap A map of IDs to objects. + * @param objList The list of objects to check. + * @param idMethod The method to retrieve the ID of an object. + * @param The type of objects in the list. + * @return A list of entities with mismatched row versions. + */ public static List getEntitiesWithMismatchedRowVersion(Map idToObjMap, List objList, Method idMethod) { + // Get the class of objects in the list Class objClass = getObjClass(objList); + // Get the method to retrieve the row version Method rowVersionMethod = getMethod("getRowVersion", objClass); + // Filter the object list to include only those with mismatched row versions return objList.stream() .filter(obj -> !Objects.equals(ReflectionUtils.invokeMethod(rowVersionMethod, obj), ReflectionUtils.invokeMethod(rowVersionMethod, @@ -201,10 +302,20 @@ public static List getEntitiesWithMismatchedRowVersion(Map idT .collect(Collectors.toList()); } + /** + * Retrieves the tenant ID from a list of objects. + * @param objList The list of objects from which to retrieve the tenant ID. + * @param The type of objects in the list. + * @return The tenant ID. + */ public static String getTenantId(List objList) { + // Retrieve any object from the list Object obj = objList.stream().findAny().get(); + // Get the method to retrieve the tenant ID Method getTenantIdMethod = getMethod("getTenantId", obj.getClass()); + // Invoke the method to retrieve the tenant ID String tenantId = (String) ReflectionUtils.invokeMethod(getTenantIdMethod, obj); + // Log the retrieved tenant ID log.info("tenantId is {}", tenantId); return tenantId; } @@ -236,6 +347,7 @@ public static void enrichForCreate(List objList, List idList, Req * @param updateRowVersion denoting whether to update rowVersion or not * @param is any type that has an id field, auditDetails field, rowVersion field and isDeleted field with setters and getters */ + //TODO COMPARE the size and throw error when objList and idList are not equal public static void enrichForCreate(List objList, List idList, RequestInfo requestInfo, boolean updateRowVersion) { AuditDetails auditDetails = getAuditDetailsForCreate(requestInfo); @@ -256,149 +368,279 @@ public static void enrichForCreate(List objList, List idList, Req }); } + /** + * Retrieves the ID method from a list of objects, prioritizing "id" and "clientReferenceId" fields. + * @param objList The list of objects from which to retrieve the ID method. + * @param The type of objects in the list. + * @return The ID method. + */ public static Method getIdMethod(List objList) { return getIdMethod(objList, "id", "clientReferenceId"); } + /** + * Retrieves the ID method from a list of objects based on a specified ID field name. + * @param objList The list of objects from which to retrieve the ID method. + * @param idFieldName The name of the ID field. + * @param The type of objects in the list. + * @return The ID method. + */ public static Method getIdMethod(List objList, String idFieldName) { - String idMethodName = "get" + idFieldName.substring(0, 1).toUpperCase() - + idFieldName.substring(1); + // Construct the method name based on the ID field name + String idMethodName = "get" + idFieldName.substring(0, 1).toUpperCase() + idFieldName.substring(1); + // Get the ID method using the constructed method name return getMethod(idMethodName, getObjClass(objList)); } + /** + * Retrieves the ID method from a list of objects based on specified ID and client reference ID field names. + * @param objList The list of objects from which to retrieve the ID method. + * @param idField The name of the ID field. + * @param clientReferenceIdField The name of the client reference ID field. + * @param The type of objects in the list. + * @return The ID method. + */ public static Method getIdMethod(List objList, String idField, String clientReferenceIdField) { - String idMethodName = "get" + idField.substring(0, 1).toUpperCase() - + idField.substring(1); - String clientReferenceIdMethodName = "get" + clientReferenceIdField.substring(0, 1).toUpperCase() - + clientReferenceIdField.substring(1); - try{ + // Construct the method names based on the specified field names + String idMethodName = "get" + idField.substring(0, 1).toUpperCase() + idField.substring(1); + String clientReferenceIdMethodName = "get" + clientReferenceIdField.substring(0, 1).toUpperCase() + clientReferenceIdField.substring(1); + try { + // Attempt to retrieve the ID method Method getId = getMethod(idMethodName, getObjClass(objList)); + // Invoke the ID method on an object from the list to check if it returns a non-null value Object value = ReflectionUtils.invokeMethod(getId, objList.stream().findAny().get()); + // If the value is not null, return the ID method if (value != null) { return getId; } - } catch (CustomException e){ + } catch (CustomException e) { + // Log and handle any custom exceptions log.error(e.getMessage()); } - + // If the ID method does not return a non-null value, return the client reference ID method return getMethod(clientReferenceIdMethodName, getObjClass(objList)); } + + /** + * Enriches the objects in a list with IDs from a corresponding list of IDs. + * @param objList The list of objects to enrich with IDs. + * @param idList The list of IDs to use for enrichment. + * @param The type of objects in the list. + */ public static void enrichId(List objList, List idList) { + // Get the class of objects in the list Class objClass = getObjClass(objList); + // Get the method to set the ID Method setIdMethod = getMethod("setId", objClass); + // Iterate over the indices of the object list IntStream.range(0, objList.size()) .forEach(i -> { + // Get the object at the current index final Object obj = objList.get(i); + // Invoke the method to set the ID on the object using the corresponding ID from the ID list ReflectionUtils.invokeMethod(setIdMethod, obj, idList.get(i)); }); } + /** + * Enriches objects for update based on a map of IDs to objects and a request object. + * @param idToObjMap A map of IDs to objects. + * @param request The request object. + * @param The type of objects in the map. + */ public static void enrichForUpdate(Map idToObjMap, Object request) { + // Get the class of objects in the map Class objClass = getObjClass(Arrays.asList(idToObjMap.values().toArray())); + // Get the class of the request object Class requestObjClass = request.getClass(); + // Get methods related to row version, audit details, and request information Method getRowVersionMethod = getMethod("getRowVersion", objClass); Method setRowVersionMethod = getMethod("setRowVersion", objClass); Method setAuditDetailsMethod = getMethod("setAuditDetails", objClass); Method getAuditDetailsMethod = getMethod("getAuditDetails", objClass); - Method getRequestInfoMethod = getMethod("getRequestInfo", requestObjClass); + // Iterate over the keys (IDs) in the map idToObjMap.keySet().forEach(i -> { + // Get the object corresponding to the current ID Object obj = idToObjMap.get(i); + // Retrieve row version and update it Integer rowVersion = (Integer) ReflectionUtils.invokeMethod(getRowVersionMethod, obj); ReflectionUtils.invokeMethod(setRowVersionMethod, obj, rowVersion + 1); - RequestInfo requestInfo = (RequestInfo) ReflectionUtils - .invokeMethod(getRequestInfoMethod, request); + // Retrieve request information + RequestInfo requestInfo = (RequestInfo) ReflectionUtils.invokeMethod(getRequestInfoMethod, request); + // Retrieve existing audit details and update them AuditDetails existingAuditDetails = (AuditDetails) ReflectionUtils.invokeMethod(getAuditDetailsMethod, obj); AuditDetails auditDetailsForUpdate = getAuditDetailsForUpdate(existingAuditDetails, requestInfo.getUserInfo().getUuid()); ReflectionUtils.invokeMethod(setAuditDetailsMethod, obj, auditDetailsForUpdate); }); } - public static void enrichForUpdate(Map idToObjMap, List existingObjList, Object request) { - Class objClass = getObjClass(existingObjList); - enrichForUpdate(idToObjMap, existingObjList, request, getMethod("getId", objClass)); - } - + /** + * Enriches objects for update based on a map of IDs to objects, a list of existing objects, a request object, and an ID method. + * @param idToObjMap A map of IDs to objects. + * @param existingObjList The list of existing objects. + * @param request The request object. + * @param idMethod The method to retrieve the ID. + * @param The type of objects in the list. + */ public static void enrichForUpdate(Map idToObjMap, List existingObjList, Object request, Method idMethod) { + // Get the class of objects in the list Class objClass = getObjClass(existingObjList); + // Get the class of the request object Class requestObjClass = request.getClass(); + // Get methods related to deletion, row version, audit details, and request information Method setIsDeletedMethod = getMethod("setIsDeleted", objClass); Method getRowVersionMethod = getMethod("getRowVersion", objClass); Method setRowVersionMethod = getMethod("setRowVersion", objClass); Method getAuditDetailsMethod = getMethod("getAuditDetails", objClass); Method setAuditDetailsMethod = getMethod("setAuditDetails", objClass); Method getRequestInfoMethod = getMethod("getRequestInfo", requestObjClass); + // Iterate over the indices of the existing object list IntStream.range(0, existingObjList.size()).forEach(i -> { - Object obj = idToObjMap.get(ReflectionUtils.invokeMethod(idMethod, - existingObjList.get(i))); + // Get the object corresponding to the current index + Object obj = idToObjMap.get(ReflectionUtils.invokeMethod(idMethod, existingObjList.get(i))); try { + // Get the API operation method and API operation name Method getApiOperationMethod = getMethod(GET_API_OPERATION, requestObjClass); Object apiOperation = ReflectionUtils.invokeMethod(getApiOperationMethod, request); Method nameMethod = CommonUtils.getMethod("name", Enum.class); + // If the API operation is DELETE, set the object's "isDeleted" flag to true if ("DELETE".equals(ReflectionUtils.invokeMethod(nameMethod, apiOperation))) { ReflectionUtils.invokeMethod(setIsDeletedMethod, obj, true); } } catch (Exception exception) { - // Do nothing remove later + // Do nothing; remove later } - + // Retrieve row version and update it Integer rowVersion = (Integer) ReflectionUtils.invokeMethod(getRowVersionMethod, obj); ReflectionUtils.invokeMethod(setRowVersionMethod, obj, rowVersion + 1); - RequestInfo requestInfo = (RequestInfo) ReflectionUtils - .invokeMethod(getRequestInfoMethod, request); - AuditDetails existingAuditDetails = (AuditDetails) ReflectionUtils - .invokeMethod(getAuditDetailsMethod, existingObjList.get(i)); - AuditDetails auditDetailsForUpdate = getAuditDetailsForUpdate(existingAuditDetails, - requestInfo.getUserInfo().getUuid()); + // Retrieve request information + RequestInfo requestInfo = (RequestInfo) ReflectionUtils.invokeMethod(getRequestInfoMethod, request); + // Retrieve existing audit details and update them + AuditDetails existingAuditDetails = (AuditDetails) ReflectionUtils.invokeMethod(getAuditDetailsMethod, existingObjList.get(i)); + AuditDetails auditDetailsForUpdate = getAuditDetailsForUpdate(existingAuditDetails, requestInfo.getUserInfo().getUuid()); ReflectionUtils.invokeMethod(setAuditDetailsMethod, obj, auditDetailsForUpdate); }); } + /** + * Enriches objects for update based on a map of IDs to objects, a list of existing objects, and a request object. + * + * @param idToObjMap A map of IDs to objects. + * @param existingObjList The list of existing objects. + * @param request The request object. + * @param The type of objects in the list. + */ + public static void enrichForUpdate(Map idToObjMap, List existingObjList, Object request) { + Class objClass = getObjClass(existingObjList); + Method getIdMethod = getMethod("getId", objClass); + + enrichForUpdate(idToObjMap, existingObjList, request, getIdMethod); + } + + + /** + * Creates a map of IDs to objects using the default ID method. + * @param objList The list of objects from which to create the map. + * @param The type of objects in the list. + * @return A map of IDs to objects. + */ public static Map getIdToObjMap(List objList) { + // Get the class of objects in the list Class objClass = getObjClass(objList); - return getIdToObjMap(objList, getMethod("getId", objClass)); + // Get the default ID method + Method idMethod = getMethod("getId", objClass); + // Delegate to the overloaded method to create the map + return getIdToObjMap(objList, idMethod); } + /** + * Creates a map of IDs to objects using the specified ID method. + * @param objList The list of objects from which to create the map. + * @param idMethod The method to retrieve the ID from an object. + * @param The type of objects in the list. + * @return A map of IDs to objects. + */ public static Map getIdToObjMap(List objList, Method idMethod) { - return objList.stream().collect(Collectors.toMap(obj -> (String) ReflectionUtils - .invokeMethod(idMethod, obj), obj -> obj, (obj1, obj2) -> obj2)); + // Collect the objects into a map using the specified ID method + return objList.stream().collect(Collectors.toMap( + obj -> (String) ReflectionUtils.invokeMethod(idMethod, obj), + obj -> obj, + (obj1, obj2) -> obj2 + )); } + + /** + * Validates entities by comparing the number of entities in the request map with those in the database list. + * @param idToObjInRequestMap A map of IDs to objects in the request. + * @param objInDbList The list of objects in the database. + * @param The type of objects in the lists. + */ public static void validateEntities(Map idToObjInRequestMap, List objInDbList) { + // Check if the number of entities in the request map exceeds those in the database list if (idToObjInRequestMap.size() > objInDbList.size()) { + // Get the list of IDs for objects in the database List idsForObjInDb = getIdList(objInDbList); + // Identify the IDs for invalid objects in the request map List idsForInvalidObj = idToObjInRequestMap.keySet().stream() .filter(id -> !idsForObjInDb.contains(id)) .collect(Collectors.toList()); + // Log and throw an exception for the invalid entities log.error("Invalid entities {}", idsForInvalidObj); throw new CustomException("INVALID_ENTITY", idsForInvalidObj.toString()); } } - public static void validateEntities(Map idToObjInRequestMap, List objInDbList, - Method idMethod) { + /** + * Validates entities by comparing the number of entities in the request map with those in the database list, + * using a specified ID retrieval method. + * @param idToObjInRequestMap A map of IDs to objects in the request. + * @param objInDbList The list of objects in the database. + * @param idMethod The method to retrieve the ID from an object. + * @param The type of objects in the lists. + */ + public static void validateEntities(Map idToObjInRequestMap, List objInDbList, Method idMethod) { + // Check if the number of entities in the request map exceeds those in the database list if (idToObjInRequestMap.size() > objInDbList.size()) { + // Get the list of IDs for objects in the database using the specified ID retrieval method List idsForObjInDb = getIdList(objInDbList, idMethod); + // Identify the IDs for invalid objects in the request map List idsForInvalidObj = idToObjInRequestMap.keySet().stream() .filter(id -> !idsForObjInDb.contains(id)) .collect(Collectors.toList()); + // Log and throw an exception for the invalid entities log.error("Invalid entities {}", idsForInvalidObj); throw new CustomException("INVALID_ENTITY", idsForInvalidObj.toString()); } } + + /** + * Checks for non-existent entities in the request map based on the ID method, comparing them with entities in the database list. + * @param idToObjInRequestMap A map of IDs to objects in the request. + * @param objInDbList The list of objects in the database. + * @param idMethod The method to retrieve the ID from an object. + * @param The type of objects in the lists. + * @return A list of entities from the request map that do not exist in the database. + */ public static List checkNonExistentEntities(Map idToObjInRequestMap, List objInDbList, Method idMethod) { + // Check if the number of entities in the request map exceeds those in the database list if (idToObjInRequestMap.size() > objInDbList.size()) { + // Get the list of IDs for objects in the database using the specified ID retrieval method List idsForObjInDb = getIdList(objInDbList, idMethod); + // Filter out entities from the request map that do not exist in the database list return idToObjInRequestMap.entrySet().stream() - .filter(e -> !idsForObjInDb.contains(e.getKey())).map(Map.Entry::getValue) - .collect(Collectors.toList()); + .filter(e -> !idsForObjInDb.contains(e.getKey())) // Filter non-existent entities + .map(Map.Entry::getValue) // Map to the corresponding object + .collect(Collectors.toList()); // Collect into a list } - return Collections.emptyList(); + return Collections.emptyList(); // Return an empty list if no non-existent entities are found } + public static List getIdList(List objList) { if (objList == null || objList.isEmpty()) { return Collections.emptyList(); @@ -500,24 +742,41 @@ public static List collectFromList(List objList, Function clazz, String fieldName) { + Class parentClass = clazz; + while (parentClass != null) { + try { + return parentClass.getDeclaredField(fieldName); + } catch (NoSuchFieldException e) { + // Field not found in this class, proceed to the parent class + parentClass = parentClass.getSuperclass(); + } + } + // Field not found in the class hierarchy + return null; + } + public static String getIdFieldName(Method method) { if (method != null) { return method.getName().contains("Reference") ? "clientReferenceId" : "id"; @@ -862,16 +1121,16 @@ public static void populateErrorDetails(T payload, Error error, } private static Method findMethod(String methodName, Class clazz) { - return Arrays.stream(ReflectionUtils.getDeclaredMethods(clazz)) + return Arrays.stream(ReflectionUtils.getAllDeclaredMethods(clazz)) .filter(m -> m.getName().equals(methodName)) .findFirst().orElseThrow(() -> new CustomException("INVALID_OBJECT_OR_METHOD", "Invalid object or method")); } /** - * Checks if the value matches the regex pattern - * @param value - * @param regexPattern - * @return + * Checks if the value matches the regex pattern. + * @param value The value to be checked. + * @param regexPattern The regex pattern to match against. + * @return true if the value matches the pattern, false otherwise. */ public static boolean isValidPattern(String value, String regexPattern) { @@ -880,4 +1139,21 @@ public static boolean isValidPattern(String value, String regexPattern) { return matcher.matches(); } + /** + * Construct a Common Table Expression that returns total count if there is any otherwise return 0L + * @param query + * @param paramsMap + * @param namedParameterJdbcTemplate + * @return + */ + public static Long constructTotalCountCTEAndReturnResult(String query, Map paramsMap, final NamedParameterJdbcTemplate namedParameterJdbcTemplate) { + String cteQuery = "WITH result_cte AS ("+query+"), totalCount_cte AS (SELECT COUNT(*) AS totalRows FROM result_cte) select * from totalCount_cte"; + return namedParameterJdbcTemplate.query(cteQuery, paramsMap, resultSet -> { + if(resultSet.next()) + return resultSet.getLong("totalRows"); + else + return 0L; + }); + } + } diff --git a/health-services/libraries/health-services-common/src/test/java/org/egov/common/data/mapper/GenericRowMapperTest.java b/health-services/libraries/health-services-common/src/test/java/org/egov/common/data/mapper/GenericRowMapperTest.java deleted file mode 100644 index 6234a445c6d..00000000000 --- a/health-services/libraries/health-services-common/src/test/java/org/egov/common/data/mapper/GenericRowMapperTest.java +++ /dev/null @@ -1,127 +0,0 @@ -package org.egov.common.data.mapper; - -import lombok.Getter; -import lombok.Setter; -import org.egov.common.data.query.annotations.Table; -import org.egov.common.data.query.builder.SelectQueryBuilder; -import org.egov.common.data.query.exception.QueryBuilderException; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; - -import java.sql.SQLException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -class GenericRowMapperTest { - - - EmbeddedDatabase db; - NamedParameterJdbcTemplate namedParameterJdbcTemplate; - @BeforeEach - public void setUp(){ - db = new EmbeddedDatabaseBuilder().setName("testdb;DATABASE_TO_UPPER=false") - .setType(EmbeddedDatabaseType.H2).addScript("schema.sql").build(); - namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(db); - } - @Test - @DisplayName("should map query to simple object") - void shouldMapQueryResulToSimpleObject() throws SQLException { - - List employeeList = namedParameterJdbcTemplate.query("SELECT * from employee", new GenericRowMapper(Employee.class)); - assertEquals(employeeList.get(0).getId().intValue(), 1); - assertEquals(employeeList.get(0).getName(), "JON"); - } - - @Test - @DisplayName("should map query to nested object") - void shouldMapQueryResulToNestedObject(){ - List employeeList = namedParameterJdbcTemplate.query("SELECT * from employee", new GenericRowMapper(NestedEmployee.class)); - assertEquals(employeeList.get(0).getAmount().getCurrency().getCurrency(), null); - assertEquals(employeeList.get(0).getAmount().getPrice(), 1500, 0); - assertEquals(employeeList.get(1).getAmount().getCurrency().getCurrency(), "INR"); - } - - @Test - @DisplayName("should map query to nested object with prepared sql query") - void shouldMapPreparedQueryResulToNestedObject(){ - String query = "SELECT * from employee where currency=:currency"; - Map queryMap = new HashMap(); - queryMap.put("currency", "INR"); - List employeeList = namedParameterJdbcTemplate.query(query, queryMap, new GenericRowMapper(NestedEmployee.class)); - assertEquals(employeeList.get(0).getId(), 2); - assertEquals(employeeList.get(0).getAmount().getPrice(), 1000); - assertEquals(employeeList.get(0).getAmount().getCurrency().getCurrency(), "INR"); - } - - @Test - @DisplayName("should throw an exception if datatypes between query result and object are incompatible") - void shouldThrowExceptionWhenDataTypeDoNotMatch(){ - assertThrows(RuntimeException.class, () -> namedParameterJdbcTemplate.query("SELECT * from employee", new GenericRowMapper(DataTypeMisMatch.class))); - } - - @Test - @DisplayName("should throw an exception if no default constructor is found") - void shouldThrowExceptionWhenNoDefaultConstructorIsFound(){ - assertThrows(RuntimeException.class, () -> namedParameterJdbcTemplate.query("SELECT * from employee", new GenericRowMapper(NoDefaultConstructor.class))); - } - - @Test - @DisplayName("should map query to simple object") - void shouldMapSelectQueryResulToSimpleObjectWithQueryBuilder() throws SQLException, QueryBuilderException { - Employee e = new Employee(); - e.setId(1); - - SelectQueryBuilder selectQueryBuilderqueryBuilder = new SelectQueryBuilder(); - List employeeList = namedParameterJdbcTemplate.query(selectQueryBuilderqueryBuilder.build(e), selectQueryBuilderqueryBuilder.getParamsMap(), new GenericRowMapper(Employee.class)); - - assertEquals(employeeList.get(0).getId().intValue(), 1); - assertEquals(employeeList.get(0).getName(), "JON"); - } -} - - -@Getter -@Setter -@Table(name = "employee") -class Employee{ - private Integer id; - private String name; -} - -@Getter -class NestedEmployee{ - private int id; - private String name; - private Amount amount; -} -@Getter -class Amount{ - private int price; - private Currency currency; -} -@Getter -class Currency{ - private String currency; -} -@Getter -class DataTypeMisMatch{ - private String price; -} - -@Getter -class NoDefaultConstructor{ - private int price; - public NoDefaultConstructor(int price){ - this.price = price; - } -} - diff --git a/health-services/libraries/health-services-common/src/test/java/org/egov/common/data/query/GenericQueryBuilderTest.java b/health-services/libraries/health-services-common/src/test/java/org/egov/common/data/query/GenericQueryBuilderTest.java index f194c115fd9..88fa60c9dfd 100644 --- a/health-services/libraries/health-services-common/src/test/java/org/egov/common/data/query/GenericQueryBuilderTest.java +++ b/health-services/libraries/health-services-common/src/test/java/org/egov/common/data/query/GenericQueryBuilderTest.java @@ -88,7 +88,7 @@ void shouldBuildSelectQueryForAnEmptyArrayListOfString() throws QueryBuilderExce DummyData data = DummyData.builder() .dummyStringList(strings) .build(); - String expectedQuery = "SELECT * FROM dummyData WHERE 1=1 "; + String expectedQuery = "SELECT * FROM dummyData "; SelectQueryBuilder queryBuilder = new SelectQueryBuilder(); String actualQuery = queryBuilder.build(data); @@ -102,7 +102,7 @@ void shouldHandleNullArrayListOfStringWhileBuildingSelectQuery() throws QueryBui DummyData data = DummyData.builder() .dummyStringList(null) .build(); - String expectedQuery = "SELECT * FROM dummyData WHERE 1=1 "; + String expectedQuery = "SELECT * FROM dummyData "; SelectQueryBuilder queryBuilder = new SelectQueryBuilder(); String actualQuery = queryBuilder.build(data); @@ -135,7 +135,7 @@ void shouldNotUsePrimitiveDataTypesWhileBuildingSelectingQuery() throws QueryBui void shouldNotUseWhereClauseWhenPropertiesAreSetToNullSelectQuery() throws QueryBuilderException { DummyData data = DummyData.builder() .build(); - String expectedQuery = "SELECT * FROM dummyData WHERE 1=1 "; + String expectedQuery = "SELECT * FROM dummyData "; SelectQueryBuilder queryBuilder = new SelectQueryBuilder(); String actualQuery = queryBuilder.build(data); diff --git a/health-services/libraries/health-services-common/src/test/java/org/egov/common/data/repository/GenericRepositoryFindTest.java b/health-services/libraries/health-services-common/src/test/java/org/egov/common/data/repository/GenericRepositoryFindTest.java index ae0a4537126..ff44953f806 100644 --- a/health-services/libraries/health-services-common/src/test/java/org/egov/common/data/repository/GenericRepositoryFindTest.java +++ b/health-services/libraries/health-services-common/src/test/java/org/egov/common/data/repository/GenericRepositoryFindTest.java @@ -106,7 +106,7 @@ void shouldReturnObjectsFromDBForSearchRequest() throws QueryBuilderException { List deleted = result.stream().filter(someObject -> someObject.getIsDeleted() == Boolean.TRUE) .collect(Collectors.toList()); result.removeAll(deleted); - when(selectQueryBuilder.build(any(Object.class))) + when(selectQueryBuilder.build(any(Object.class), anyString())) .thenReturn("Select * from some_table where id='some-id' and isdeleted=false"); when(namedParameterJdbcTemplate.query(any(String.class), any(Map.class), any(SomeRowMapper.class))) .thenReturn(result); @@ -120,7 +120,7 @@ void shouldReturnObjectsFromDBForSearchRequest() throws QueryBuilderException { @Test @DisplayName("get products from db which are deleted") void shouldReturnObjectsFromDBForSearchRequestWithDeletedIncluded() throws QueryBuilderException { - when(selectQueryBuilder.build(any(Object.class))) + when(selectQueryBuilder.build(any(Object.class), anyString())) .thenReturn("Select * from some_table where id='some-id' and otherfield='other-field'"); when(namedParameterJdbcTemplate.query(any(String.class), any(Map.class), any(SomeRowMapper.class))) .thenReturn(someObjects); diff --git a/health-services/libraries/health-services-common/src/test/java/org/egov/common/utils/CommonUtilsTest.java b/health-services/libraries/health-services-common/src/test/java/org/egov/common/utils/CommonUtilsTest.java index 50151260f29..b50d359d969 100644 --- a/health-services/libraries/health-services-common/src/test/java/org/egov/common/utils/CommonUtilsTest.java +++ b/health-services/libraries/health-services-common/src/test/java/org/egov/common/utils/CommonUtilsTest.java @@ -38,13 +38,12 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.function.Predicate; -import java.util.function.UnaryOperator; +import static org.egov.common.utils.CommonUtils.getMethod; +import static org.egov.common.utils.CommonUtils.getObjClass; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -152,30 +151,30 @@ void shouldGetTheDifferenceOfListsWhenBothTheListsHaveSameNumberOfItems() { assertEquals(0, CommonUtils.getDifference(idList, otherIdList).size()); } - @Test - @DisplayName("should validate the ids as per the given validator") - void shouldValidateTheIdsAsPerTheGivenValidator() { - Set idSet = new HashSet<>(); - idSet.add("some-id"); - idSet.add("other-id"); - UnaryOperator> validator = UnaryOperator.identity(); - - assertDoesNotThrow(() -> CommonUtils.validateIds(idSet, validator)); - } - - @Test - @DisplayName("should throw exception in case an invalid id is found") - void shouldThrowExceptionInCaseAnInvalidIdIsFound() { - Set idSet = new HashSet<>(); - idSet.add("some-id"); - idSet.add("other-id"); - UnaryOperator> validator = (idList) -> { - idList.remove(0); - return idList; - }; - - assertDoesNotThrow(() -> CommonUtils.validateIds(idSet, validator)); - } +// @Test +// @DisplayName("should validate the ids as per the given validator") +// void shouldValidateTheIdsAsPerTheGivenValidator() { +// Set idSet = new HashSet<>(); +// idSet.add("some-id"); +// idSet.add("other-id"); +// UnaryOperator> validator = UnaryOperator.identity(); +// +// assertDoesNotThrow(() -> CommonUtils.validateIds(idSet, validator)); +// } +// +// @Test +// @DisplayName("should throw exception in case an invalid id is found") +// void shouldThrowExceptionInCaseAnInvalidIdIsFound() { +// Set idSet = new HashSet<>(); +// idSet.add("some-id"); +// idSet.add("other-id"); +// UnaryOperator> validator = (idList) -> { +// idList.remove(0); +// return idList; +// }; +// +// assertDoesNotThrow(() -> CommonUtils.validateIds(idSet, validator)); +// } @Test @DisplayName("should get audit details for create") @@ -303,7 +302,7 @@ void shouldReturnRequestObjectWithMismatchedRowVersion() { objList.add(otherObject); objList.add(otherInvalidObject); - Method idMethod = CommonUtils.getMethod("getId", SomeObject.class); + Method idMethod = getMethod("getId", SomeObject.class); assertEquals("some-other-id", CommonUtils.getEntitiesWithMismatchedRowVersion(idToObjMap, objList, idMethod).get(0).getId()); @@ -595,8 +594,7 @@ void shouldSupplySpecifiedNumberOfUuids() { void shouldGetIdFieldNameFromMethod() { SomeObjectWithClientRefId someObject = SomeObjectWithClientRefId.builder() .clientReferenceId("some-client-reference-id").build(); - assertEquals("clientReferenceId", CommonUtils.getIdFieldName(CommonUtils - .getMethod("getClientReferenceId", someObject.getClass()))); + assertEquals("clientReferenceId", CommonUtils.getIdFieldName(getMethod("getClientReferenceId", someObject.getClass()))); } @Test diff --git a/health-services/libraries/health-services-models/Dockerfile b/health-services/libraries/health-services-models/Dockerfile index cd50dd4120d..80abf117900 100644 --- a/health-services/libraries/health-services-models/Dockerfile +++ b/health-services/libraries/health-services-models/Dockerfile @@ -1,8 +1,10 @@ -FROM egovio/alpine-maven-builder-jdk-8:1-master-NA-6036091e AS build +FROM egovio/amazoncorretto:17-alpine3.19 AS build ARG WORK_DIR ARG nexusUsername ARG nexusPassword WORKDIR /app +# Install Maven +RUN apk add --no-cache maven # copy the project files COPY ${WORK_DIR}/pom.xml ./pom.xml COPY ${WORK_DIR}/settings.xml ./settings.xml diff --git a/health-services/libraries/health-services-models/pom.xml b/health-services/libraries/health-services-models/pom.xml index 1deedd6a15c..ccbf98bc824 100644 --- a/health-services/libraries/health-services-models/pom.xml +++ b/health-services/libraries/health-services-models/pom.xml @@ -5,10 +5,11 @@ 4.0.0 org.egov.common health-services-models - 1.0.19-dev3-SNAPSHOT + 1.0.20-SNAPSHOT - 8 - 8 + 17 + ${java.version} + ${java.version} UTF-8 @@ -31,7 +32,25 @@ org.egov.services tracer - 2.1.4-SNAPSHOT + 2.9.0-SNAPSHOT + + + jakarta.validation + jakarta.validation-api + 3.0.2 + compile + + + org.hibernate.validator + hibernate-validator + 8.0.1.Final + compile + + + io.swagger + swagger-annotations + 1.5.18 + compile @@ -48,30 +67,6 @@ - - - - org.apache.maven.plugins - maven-site-plugin - 3.7.1 - - - org.apache.maven.plugins - maven-deploy-plugin - 2.8.2 - - - default-deploy - deploy - - deploy - - - - - - - repo.egovernments.org diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/AdditionalFields.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/AdditionalFields.java new file mode 100644 index 00000000000..4d42ce72395 --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/AdditionalFields.java @@ -0,0 +1,51 @@ +package org.egov.common.models.core; + +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.validation.annotation.Validated; + +/** + * AdditionalFields + */ +@Validated + + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +@JsonIgnoreProperties(ignoreUnknown = true) +public class AdditionalFields { + @JsonProperty("schema") + @Size(min = 2, max = 64) + private String schema = null; + + @JsonProperty("version") + @Min(1) + private Integer version = null; + + @JsonProperty("fields") + @Valid + private List fields = null; + + + public AdditionalFields addFieldsItem(Field fieldsItem) { + if (this.fields == null) { + this.fields = new ArrayList<>(); + } + this.fields.add(fieldsItem); + return this; + } + +} + diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Boundary.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Boundary.java new file mode 100644 index 00000000000..f3632bb819b --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Boundary.java @@ -0,0 +1,44 @@ +package org.egov.common.models.core; + +import jakarta.validation.Valid; +import jakarta.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.tracer.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/libraries/health-services-models/src/main/java/org/egov/common/models/core/EgovModel.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/EgovModel.java new file mode 100644 index 00000000000..d125458f9af --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/EgovModel.java @@ -0,0 +1,57 @@ +package org.egov.common.models.core; + + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import digit.models.coremodels.AuditDetails; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@SuperBuilder +@JsonIgnoreProperties(ignoreUnknown = true) +public class EgovModel { + + @JsonProperty("id") + @Size(min = 2, max = 64) + protected String id; + + @JsonProperty("tenantId") + @NotNull + @Size(min = 2, max = 1000) + protected String tenantId; + + @JsonProperty("status") + protected String status; + + @JsonProperty("source") + protected String source; //TODO what are the various sources and needs comments + + @JsonProperty("rowVersion") + protected Integer rowVersion; + + @JsonProperty("applicationId") //needs comments + protected String applicationId; + + @JsonProperty("hasErrors") + @Builder.Default + protected Boolean hasErrors = Boolean.FALSE; //TODO is this health specific or will this become general. + + @JsonProperty("additionalFields") + @Valid + protected AdditionalFields additionalFields; + + @JsonProperty("auditDetails") + @Valid + protected AuditDetails auditDetails; + +} diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/EgovOfflineModel.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/EgovOfflineModel.java new file mode 100644 index 00000000000..e816f6cd3ce --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/EgovOfflineModel.java @@ -0,0 +1,27 @@ +package org.egov.common.models.core; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.Size; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import digit.models.coremodels.AuditDetails; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@SuperBuilder +@JsonIgnoreProperties(ignoreUnknown = true) +public class EgovOfflineModel extends EgovModel { + @JsonProperty("clientReferenceId") + @Size(min = 2, max = 64) + protected String clientReferenceId; + + @JsonProperty("clientAuditDetails") + @Valid + protected AuditDetails clientAuditDetails; +} diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/EgovOfflineSearchModel.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/EgovOfflineSearchModel.java new file mode 100644 index 00000000000..9f74f4956b4 --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/EgovOfflineSearchModel.java @@ -0,0 +1,20 @@ +package org.egov.common.models.core; + +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/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/EgovSearchModel.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/EgovSearchModel.java new file mode 100644 index 00000000000..ab0113965d3 --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/EgovSearchModel.java @@ -0,0 +1,22 @@ +package org.egov.common.models.core; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.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/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Exclude.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Exclude.java new file mode 100644 index 00000000000..48b882c13aa --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Exclude.java @@ -0,0 +1,13 @@ +package org.egov.common.models.core; + +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/libraries/health-services-models/src/main/java/org/egov/common/models/core/Field.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Field.java new file mode 100644 index 00000000000..4b24913d764 --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Field.java @@ -0,0 +1,37 @@ +package org.egov.common.models.core; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.validation.annotation.Validated; + +/** + * Field + */ +@Validated + + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +@JsonIgnoreProperties(ignoreUnknown = true) +public class Field { + @JsonProperty("key") + @NotNull + @Size(min = 2, max = 64) + private String key = null; + + @JsonProperty("value") + @NotNull + @Size(min = 1, max = 10000) + private String value = null; + + +} + diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/ProjectSearchURLParams.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/ProjectSearchURLParams.java new file mode 100644 index 00000000000..92fdce4ef8d --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/ProjectSearchURLParams.java @@ -0,0 +1,47 @@ +package org.egov.common.models.core; + +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; + +/** + * Model class representing common search criteria for API search operations. + * @author kanishq-egov + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@SuperBuilder +@JsonIgnoreProperties(ignoreUnknown = true) +public class ProjectSearchURLParams extends URLParams { + /** + * Used in project search API to specify if response should include project elements + * that are in the preceding hierarchy of matched projects. + */ + @JsonProperty("includeAncestors") + private Boolean includeAncestors; + + /** + * Used in project search API to specify if response should include project elements + * that are in the following hierarchy of matched projects. + */ + @JsonProperty("includeDescendants") + private Boolean includeDescendants; + + /** + * Used in project search API to limit the search results to only those projects whose creation + * date is after the specified 'createdFrom' date. + */ + @JsonProperty("createdFrom") + private Long createdFrom; + + /** + * Used in project search API to limit the search results to only those projects whose creation + * date is before the specified 'createdTo' date. + */ + @JsonProperty("createdTo") + private Long createdTo; +} diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Role.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Role.java index d5c0da52bc1..a7f99255ca7 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Role.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Role.java @@ -11,6 +11,7 @@ @NoArgsConstructor @Builder @JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated public class Role { private static final String CITIZEN = "CITIZEN"; private String name; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/SearchResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/SearchResponse.java new file mode 100644 index 00000000000..f688b53e08a --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/SearchResponse.java @@ -0,0 +1,38 @@ +package org.egov.common.models.core; + +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModel; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.validation.annotation.Validated; + +@ApiModel(description = "Representation of SearchResponse.") +@Validated + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class SearchResponse { + + @JsonProperty("TotalCount") + @Getter(AccessLevel.NONE) + private Long totalCount; + + @JsonProperty("Response") + @Builder.Default + private List response = new ArrayList<>(); + + public Long getTotalCount() { + if(totalCount == null) + totalCount = (long) response.size(); + return totalCount; + } +} \ No newline at end of file diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Table.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Table.java new file mode 100644 index 00000000000..8531b0b51b4 --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/Table.java @@ -0,0 +1,15 @@ +package org.egov.common.models.core; + +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.TYPE) +// It is used to specify the table name associated with a class. +// When you annotate a class with @Table, it indicates that the class is mapped to a table in the database. +// Used in GenericQueryBuilder +public @interface Table { + String name() default ""; +} diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/URLParams.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/URLParams.java new file mode 100644 index 00000000000..272705efd8e --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/URLParams.java @@ -0,0 +1,86 @@ +package org.egov.common.models.core; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +//TODO should we move all this to body model or should we keep this in url? same with search common models +/** + * Model class representing common search criteria for API search operations. + * @author kanishq-egov + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@SuperBuilder +@JsonIgnoreProperties(ignoreUnknown = true) +public class URLParams { + + /** + * The maximum number of records to be returned in the response. + */ + @NotNull + @Min(0) + @Max(1000) + @JsonProperty("limit") + private Integer limit; + + /** + * The offset from which records should be returned in the response. + */ + @NotNull + @Min(0) + @JsonProperty("offset") + private Integer offset; + + /** + * The unique identifier for the tenant. + */ + @NotNull + @JsonProperty("tenantId") + private String tenantId; + + /** + * The epoch time representing point in time since last modification happened in the table. + * Results from this parameter should include both newly created objects and modified objects from this time. + * This criterion aids polling clients to synchronize changes since their last synchronization with the platform. + */ + @JsonProperty("lastChangedSince") + private Long lastChangedSince; + + /** + * Flag indicating whether soft deleted records should be included in search results. + * This flag is used in search APIs to specify if deleted records should be included. + */ + @JsonProperty("includeDeleted") + private Boolean includeDeleted; + + /** + * Sets the URL parameters from the given URLParams object. + * This method allows updating the current URLParams instance with values from another instance. + * + * @param urlParams the URL parameters to set + */ + public void setURLParams(URLParams urlParams) { + // Update limit if provided in the input URLParams + if (urlParams.getLimit() != null) this.limit = urlParams.getLimit(); + + // Update offset if provided in the input URLParams + if (urlParams.getOffset() != null) this.offset = urlParams.getOffset(); + + // Update tenantId if provided in the input URLParams + if (urlParams.getTenantId() != null) this.tenantId = urlParams.getTenantId(); + + // Update lastChangedSince if provided in the input URLParams + if (urlParams.getLastChangedSince() != null) this.lastChangedSince = urlParams.getLastChangedSince(); + + // Update includeDeleted if provided in the input URLParams + if (urlParams.getIncludeDeleted() != null) this.includeDeleted = urlParams.getIncludeDeleted(); + } + +} diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/UpdateBy.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/UpdateBy.java new file mode 100644 index 00000000000..a07a0964a89 --- /dev/null +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/core/UpdateBy.java @@ -0,0 +1,13 @@ +package org.egov.common.models.core; + +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 specific fields in a class that should be specially considered during update operations +// Used in GenericQueryBuilder +public @interface UpdateBy { +} diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/AdditionalFields.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/AdditionalFields.java index 306fd76b745..3ea950184ae 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/AdditionalFields.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/AdditionalFields.java @@ -8,9 +8,9 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.Min; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -18,13 +18,14 @@ * AdditionalFields */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30") + @Data @NoArgsConstructor @AllArgsConstructor @Builder @JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated public class AdditionalFields { @JsonProperty("schema") @Size(min = 2, max = 64) diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Address.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Address.java index b0b69f16b1d..3f6469257f9 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Address.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Address.java @@ -2,30 +2,30 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.annotations.ApiModel; +import jakarta.validation.Valid; +import jakarta.validation.constraints.DecimalMax; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.egov.common.models.core.Boundary; 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; - /** * Representation of a address. Individual APIs may choose to extend from this using allOf if more details needed to be added in their case. */ -@ApiModel(description = "Representation of a address. Individual APIs may choose to extend from this using allOf if more details needed to be added in their case. ") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30") + @Data @NoArgsConstructor @AllArgsConstructor @Builder @JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated +//TODO should move to common public class Address { @JsonProperty("id") @Size(min = 2, max = 64) diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/AddressType.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/AddressType.java index 44b904ce16d..9c4931a7005 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/AddressType.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/AddressType.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonValue; @JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated public enum AddressType { PERMANENT("PERMANENT"), diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Boundary.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Boundary.java deleted file mode 100644 index da9c7cd36af..00000000000 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Boundary.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.egov.common.models.facility; - -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; -import java.util.ArrayList; -import java.util.List; - -/** - * Boundary - */ -@Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30") - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -@JsonIgnoreProperties(ignoreUnknown = true) -public class Boundary { - @JsonProperty("code") - @NotNull - private String code = null; - - @JsonProperty("name") - private String name = null; - - @JsonProperty("label") - private String label = null; - - @JsonProperty("latitude") - private String latitude = null; - - @JsonProperty("longitude") - private String longitude = null; - - @JsonProperty("children") - @Valid - private List children = null; - - @JsonProperty("materializedPath") - private String materializedPath = null; - - - public Boundary addChildrenItem(Boundary childrenItem) { - if (this.children == null) { - this.children = new ArrayList<>(); - } - this.children.add(childrenItem); - return this; - } - -} - diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Facility.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Facility.java index 338afe924b0..3c4d8ba3bf9 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Facility.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Facility.java @@ -8,35 +8,25 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineModel; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; /** * Facility */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class Facility { - @JsonProperty("id") - @Size(min = 2, max = 64) - private String id = null; - - @JsonProperty("clientReferenceId") - @Size(min = 2, max = 64) - private String clientReferenceId = null; - - @JsonProperty("tenantId") - @NotNull - @Size(min = 2, max = 1000) - private String tenantId = null; +public class Facility extends EgovOfflineModel { @JsonProperty("isPermanent") private Boolean isPermanent = true; @@ -55,22 +45,10 @@ public class Facility { @Valid private Address address = null; - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields = null; - + //TODO remove this @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; - @JsonProperty("rowVersion") - private Integer rowVersion = null; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails = null; - - @JsonIgnore - private Boolean hasErrors = Boolean.FALSE; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityBulkRequest.java index fe151f99b78..36c96818a5b 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityBulkRequest.java @@ -8,9 +8,9 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ * FacilityBulkRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityBulkResponse.java index 518d8a0bda7..d58d67eba90 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityBulkResponse.java @@ -8,8 +8,8 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -17,7 +17,7 @@ * FacilityResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityRequest.java index 84991acd405..be7a61eb30d 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityRequest.java @@ -8,14 +8,14 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * FacilityRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityResponse.java index f4ee54685dd..d0642700db3 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilityResponse.java @@ -8,14 +8,14 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * FacilityResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilitySearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilitySearch.java index 902b590142b..22f6e9d7a2a 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilitySearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilitySearch.java @@ -3,32 +3,24 @@ 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 lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineSearchModel; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import java.util.List; - /** * FacilitySearch */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class FacilitySearch { - @JsonProperty("id") - @Valid - private List id = null; - - @JsonProperty("clientReferenceId") - private List clientReferenceId = null; +public class FacilitySearch extends EgovOfflineSearchModel { @JsonProperty("isPermanent") private Boolean isPermanent = null; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilitySearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilitySearchRequest.java index 02aa94572b7..6a6924bea67 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilitySearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/FacilitySearchRequest.java @@ -8,20 +8,21 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * FacilitySearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30") + @Data @NoArgsConstructor @AllArgsConstructor @Builder @JsonIgnoreProperties(ignoreUnknown = true) +//TODO should we extend model request info wrapper public class FacilitySearchRequest { @JsonProperty("RequestInfo") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Field.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Field.java index 78218ccbf63..6fea19acbe4 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Field.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/Field.java @@ -1,10 +1,9 @@ package org.egov.common.models.facility; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -15,7 +14,7 @@ * Field */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/TenantRole.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/TenantRole.java index b506a8022a3..d706a86fcff 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/TenantRole.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/TenantRole.java @@ -9,8 +9,8 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -19,13 +19,14 @@ */ @ApiModel(description = "User role carries the tenant related role information for the user. A user can have multiple roles per tenant based on the need of the tenant. A user may also have multiple roles for multiple tenants.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30") + @Data @NoArgsConstructor @AllArgsConstructor @Builder @JsonIgnoreProperties(ignoreUnknown = true) +//TODO compare with services common public class TenantRole { @JsonProperty("tenantId") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/UserInfo.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/UserInfo.java index 9f815c89caa..a534fb37cfb 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/UserInfo.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/facility/UserInfo.java @@ -9,8 +9,8 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -19,13 +19,14 @@ */ @ApiModel(description = "This is acting ID token of the authenticated user on the server. Any value provided by the clients will be ignored and actual user based on authtoken will be used on the server.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-21T14:37:54.683+05:30") + @Data @NoArgsConstructor @AllArgsConstructor @Builder @JsonIgnoreProperties(ignoreUnknown = true) +//TODO should be imported from common model library public class UserInfo { @JsonProperty("tenantId") @NotNull diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/AdditionalFields.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/AdditionalFields.java index 34017c09cb6..c38b8ef5b97 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/AdditionalFields.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/AdditionalFields.java @@ -8,9 +8,9 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.Min; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -18,13 +18,14 @@ * AdditionalFields */ @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) +@Deprecated public class AdditionalFields { @JsonProperty("schema") diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Address.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Address.java index e173fb7cf96..d6578c2808a 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Address.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Address.java @@ -2,31 +2,30 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.annotations.ApiModel; +import jakarta.validation.Valid; +import jakarta.validation.constraints.DecimalMax; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.egov.common.models.core.Boundary; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.DecimalMax; -import javax.validation.constraints.DecimalMin; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - /** * Representation of a address. Individual APIs may choose to extend from this using allOf if more details needed to be added in their case. */ - @ApiModel(description = "Representation of a address. Individual APIs may choose to extend from this using allOf if more details needed to be added in their case. ") @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) +@Deprecated public class Address { @JsonProperty("id") diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/AddressType.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/AddressType.java index 0a8ca8bffa4..93b2a83b51e 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/AddressType.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/AddressType.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonValue; @JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated public enum AddressType { PERMANENT("PERMANENT"), diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Boundary.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Boundary.java deleted file mode 100644 index cdf33544995..00000000000 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Boundary.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.egov.common.models.household; - -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.constraints.NotNull; - -/** -* Boundary -*/ -@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 Boundary { - - @JsonProperty("code") - @NotNull - private String code = null; - - @JsonProperty("name") - private String name = null; - - @JsonProperty("label") - private String label = null; - - @JsonProperty("latitude") - private String latitude = null; - - @JsonProperty("longitude") - private String longitude = null; - -// @JsonProperty("children") -// -// @Valid -// -// -// private List children = null; - - @JsonProperty("materializedPath") - private String materializedPath = null; - - -// public Boundary addChildrenItem(Boundary childrenItem) { -// if (this.children == null) { -// this.children = new ArrayList<>(); -// } -// this.children.add(childrenItem); -// return this; -// } - -} - diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Field.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Field.java index bb53d162286..c948934f9c9 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Field.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Field.java @@ -1,7 +1,7 @@ package org.egov.common.models.household; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; @@ -15,7 +15,7 @@ * Field */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Household.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Household.java index 56cdaeef0a4..2452054c4f8 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Household.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/Household.java @@ -1,47 +1,29 @@ package org.egov.common.models.household; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import digit.models.coremodels.AuditDetails; -import io.swagger.annotations.ApiModel; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; import org.hibernate.validator.constraints.Range; +import org.egov.common.models.core.EgovOfflineModel; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - /** * 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) -public class Household { - - @JsonProperty("id") - @Size(min = 2, max = 64) - private String id = null; - - @JsonProperty("tenantId") - @NotNull - @Size(min = 2, max = 1000) - private String tenantId = null; - - @JsonProperty("clientReferenceId") - @Size(min = 2, max = 64) - private String clientReferenceId = null; +@SuperBuilder +@JsonIgnoreProperties(ignoreUnknown = true) +public class Household extends EgovOfflineModel { @JsonProperty("memberCount") @NotNull @@ -52,25 +34,9 @@ public class Household { @Valid private Address address = null; - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields = null; - + //TODO remove @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; - @JsonProperty("rowVersion") - private Integer rowVersion = null; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails = null; - - @JsonProperty("clientAuditDetails") - @Valid - private AuditDetails clientAuditDetails = null; - - @JsonIgnore - private Boolean hasErrors = Boolean.FALSE; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdBulkRequest.java index a32ca4cc532..cf1b86cc6d2 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdBulkRequest.java @@ -9,9 +9,9 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ * HouseholdRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdBulkResponse.java index 8336aad33be..3646ac55627 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdBulkResponse.java @@ -9,8 +9,8 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ * HouseholdResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMember.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMember.java index 6febe6009f3..c7e016e117d 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMember.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMember.java @@ -9,29 +9,27 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineModel; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; /** * A representation of a household member (already registered as an individual) */ @ApiModel(description = "A representation of a household member (already registered as an individual)") @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 HouseholdMember{ - - @JsonProperty("id") - @Size(min = 2, max = 64) - private String id = null; +@SuperBuilder +@JsonIgnoreProperties(ignoreUnknown = true) +public class HouseholdMember extends EgovOfflineModel { @JsonProperty("householdId") @Size(min = 2, max = 64) @@ -41,11 +39,6 @@ public class HouseholdMember{ @Size(min = 2, max = 64) private String householdClientReferenceId = null; - @JsonProperty("clientReferenceId") - @Size(min = 2, max = 64) - @NotNull - private String clientReferenceId = null; - @JsonProperty("individualId") @Size(min = 2, max = 64) private String individualId = null; @@ -57,30 +50,9 @@ public class HouseholdMember{ @JsonProperty("isHeadOfHousehold") private Boolean isHeadOfHousehold = false; - @JsonProperty("tenantId") - @Size(min = 2, max = 1000) - @NotNull - private String tenantId = null; - - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields = null; - + //TODO remove @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; - @JsonProperty("rowVersion") - private Integer rowVersion = null; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails = null; - - @JsonProperty("clientAuditDetails") - @Valid - private AuditDetails clientAuditDetails = null; - - @JsonIgnore - private Boolean hasErrors = Boolean.FALSE; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberBulkRequest.java index 192ccefd97c..9e45a1f496c 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberBulkRequest.java @@ -8,9 +8,9 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ * HouseholdMemberRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberBulkResponse.java index 4b89d6c0919..529336e2052 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberBulkResponse.java @@ -8,8 +8,8 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -17,7 +17,7 @@ * HouseholdMemberResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30") + @Data @NoArgsConstructor @@ -30,6 +30,11 @@ public class HouseholdMemberBulkResponse { @Valid private org.egov.common.contract.response.ResponseInfo responseInfo = null; + @JsonProperty("TotalCount") + @Valid + @Builder.Default + private Long totalCount = 0L; + @JsonProperty("HouseholdMembers") @Valid private List householdMembers = null; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberRequest.java index 13721826587..afe2b3a35a2 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberRequest.java @@ -8,14 +8,14 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * HouseholdMemberRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberResponse.java index 559326a3a62..4439b053fa2 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberResponse.java @@ -8,14 +8,14 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * HouseholdMemberResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberSearch.java index 513f3f5a5c8..d435704b4f6 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberSearch.java @@ -1,33 +1,33 @@ package org.egov.common.models.household; +import java.util.List; + 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 lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineSearchModel; 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) -public class HouseholdMemberSearch { +@SuperBuilder +@JsonIgnoreProperties(ignoreUnknown = true) +public class HouseholdMemberSearch extends EgovOfflineSearchModel { - @JsonProperty("id") - private List id = null; + @JsonProperty("clientReferenceId") + private List clientReferenceId = null; @JsonProperty("householdId") private List householdId = null; @@ -38,18 +38,11 @@ public class HouseholdMemberSearch { @JsonProperty("individualId") private List individualId = null; - @JsonProperty("clientReferenceId") - private List clientReferenceId = null; - @JsonProperty("individualClientReferenceId") private List individualClientReferenceId = null; @JsonProperty("isHeadOfHousehold") private Boolean isHeadOfHousehold = null; - @JsonProperty("tenantId") - @Valid - private String tenantId = null; - } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberSearchRequest.java index 1d5d0d66bc7..1827c58c249 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdMemberSearchRequest.java @@ -8,14 +8,14 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * HouseholdMemberSearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdRequest.java index cbd6cc2da5a..2f97fff1203 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdRequest.java @@ -9,14 +9,14 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * HouseholdRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdResponse.java index f184e37bf27..8659cc34bbf 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdResponse.java @@ -9,14 +9,14 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * HouseholdResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdSearch.java index 6e31a74c882..4ff5ccec51e 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdSearch.java @@ -1,39 +1,48 @@ package org.egov.common.models.household; -import java.util.List; - -import org.springframework.validation.annotation.Validated; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; - -import io.swagger.annotations.ApiModel; +import jakarta.validation.constraints.DecimalMax; +import jakarta.validation.constraints.DecimalMin; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineSearchModel; +import org.egov.common.models.core.Exclude; +import org.springframework.validation.annotation.Validated; /** * 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) -public class HouseholdSearch { - - @JsonProperty("id") - private List id = null; - - @JsonProperty("clientReferenceId") - private List clientReferenceId = null; - +@SuperBuilder +@JsonIgnoreProperties(ignoreUnknown = true) +public class HouseholdSearch extends EgovOfflineSearchModel { @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/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdSearchRequest.java index 1d81812a352..57e5377b5ca 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/HouseholdSearchRequest.java @@ -9,14 +9,14 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * HouseholdSearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/TenantRole.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/TenantRole.java index 5b863c7e25f..9a37607d2ca 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/TenantRole.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/TenantRole.java @@ -9,8 +9,8 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ */ @ApiModel(description = "User role carries the tenant related role information for the user. A user can have multiple roles per tenant based on the need of the tenant. A user may also have multiple roles for multiple tenants.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/UserInfo.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/UserInfo.java index b6afe741c3d..648f7640cbe 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/UserInfo.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/household/UserInfo.java @@ -9,8 +9,8 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ */ @ApiModel(description = "This is acting ID token of the authenticated user on the server. Any value provided by the clients will be ignored and actual user based on authtoken will be used on the server.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-21T13:41:16.379+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/AdditionalFields.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/AdditionalFields.java index a16758cdf9b..2546f7f417e 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/AdditionalFields.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/AdditionalFields.java @@ -8,9 +8,9 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.Min; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -18,13 +18,14 @@ * AdditionalFields */ @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) +@Deprecated public class AdditionalFields { @JsonProperty("schema") diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Address.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Address.java index 80070ce7cc4..4367ad3057d 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Address.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Address.java @@ -8,25 +8,27 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.egov.common.models.core.Boundary; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.DecimalMax; -import javax.validation.constraints.DecimalMin; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.DecimalMax; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; /** * Representation of a address. Individual APIs may choose to extend from this using allOf if more details needed to be added in their case. */ @ApiModel(description = "Representation of a address. Individual APIs may choose to extend from this using allOf if more details needed to be added in their case. ") @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) +@JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated public class Address { @JsonProperty("id") diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/AddressType.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/AddressType.java index cfbdd36f0e2..d4b8d0b5b00 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/AddressType.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/AddressType.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonValue; @JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated public enum AddressType { PERMANENT("PERMANENT"), diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Boundary.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Boundary.java deleted file mode 100644 index 2e7185ea6ce..00000000000 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Boundary.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.egov.common.models.individual; - -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; -import java.util.ArrayList; -import java.util.List; - -/** -* Boundary -*/ -@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 Boundary { - @JsonProperty("code") - @NotNull - - - - private String code = null; - - @JsonProperty("name") - - - - private String name = null; - - @JsonProperty("label") - - - - private String label = null; - - @JsonProperty("latitude") - - - - private String latitude = null; - - @JsonProperty("longitude") - - - - private String longitude = null; - - @JsonProperty("children") - - @Valid - - - private List children = null; - - @JsonProperty("materializedPath") - - - - private String materializedPath = null; - - - public Boundary addChildrenItem(Boundary childrenItem) { - if (this.children == null) { - this.children = new ArrayList<>(); - } - this.children.add(childrenItem); - return this; - } - -} - diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Field.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Field.java index b189fbe154e..c6b33f09776 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Field.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Field.java @@ -1,7 +1,7 @@ package org.egov.common.models.individual; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; @@ -15,7 +15,7 @@ * Field */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-27T11:47:19.561+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Identifier.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Identifier.java index 9bb88701d75..213a67a9446 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Identifier.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Identifier.java @@ -9,15 +9,15 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; /** * Identifier */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-27T11:47:19.561+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Individual.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Individual.java index 3bcaf631a4b..e045ff1fea5 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Individual.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Individual.java @@ -10,11 +10,13 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineModel; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -24,32 +26,19 @@ */ @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 +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class Individual { - - @JsonProperty("id") - @Size(min = 2, max = 64) - private String id = null; +public class Individual extends EgovOfflineModel { @JsonProperty("individualId") @Size(min = 2, max = 64) private String individualId = null; - @JsonProperty("tenantId") - @NotNull - @Size(min = 2, max = 1000) - private String tenantId = null; - - @JsonProperty("clientReferenceId") - @Size(min = 2, max = 64) - private String clientReferenceId = null; - @JsonProperty("userId") private String userId = null; @@ -113,27 +102,10 @@ public class Individual { @JsonProperty("photo") private String photo = null; - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields = null; - + //TODO remove @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; - @JsonProperty("rowVersion") - private Integer rowVersion = null; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails = null; - - @JsonProperty("clientAuditDetails") - @Valid - private AuditDetails clientAuditDetails = null; - - @JsonIgnore - private Boolean hasErrors = Boolean.FALSE; - @JsonProperty("isSystemUser") private Boolean isSystemUser = Boolean.FALSE; @@ -143,7 +115,6 @@ public class Individual { @JsonProperty("userDetails") private UserDetails userDetails; - public Individual addAddressItem(Address addressItem) { if (this.address == null) { this.address = new ArrayList<>(); diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualBulkRequest.java index 6ec2f502a46..4810780d4e7 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualBulkRequest.java @@ -9,9 +9,9 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ * IndividualRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-27T11:47:19.561+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualBulkResponse.java index a9952743df9..5a185cbaf8d 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualBulkResponse.java @@ -9,8 +9,8 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ * IndividualResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-27T11:47:19.561+05:30") + @Data @NoArgsConstructor @@ -32,6 +32,11 @@ public class IndividualBulkResponse { @Valid private ResponseInfo responseInfo = null; + @JsonProperty("TotalCount") + @Valid + @Builder.Default + private Long totalCount = 0L; + @JsonProperty("Individual") @Valid private List individual = null; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualDeleteRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualDeleteRequest.java index 834d1e7f6bf..67c05cc7744 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualDeleteRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualDeleteRequest.java @@ -8,8 +8,8 @@ import lombok.NoArgsConstructor; import org.egov.common.contract.request.RequestInfo; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.List; @Data diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualRequest.java index 2e8857e0176..c8b7927e036 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualRequest.java @@ -9,14 +9,14 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * IndividualRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-27T11:47:19.561+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualResponse.java index 146f0e3b809..e782b4af9a8 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualResponse.java @@ -9,14 +9,14 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * IndividualResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-27T11:47:19.561+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualSearch.java index b2a1f2ed633..397b015d49e 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualSearch.java @@ -1,43 +1,39 @@ package org.egov.common.models.individual; +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 jakarta.validation.Valid; +import jakarta.validation.constraints.DecimalMax; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineSearchModel; +import org.egov.common.models.core.Exclude; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -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.") +@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; @@ -87,5 +83,26 @@ public class IndividualSearch { @JsonProperty("userUuid") @Size(min = 1) private List userUuid; + + @Exclude + @JsonProperty("latitude") + @DecimalMin("-90") + @DecimalMax("90") + private Double latitude; + + @Exclude + @JsonProperty("longitude") + @DecimalMin("-180") + @DecimalMax("180") + private Double longitude; + + /* + * @value unit of measurement in Kilometer + * */ + @Exclude + @JsonProperty("searchRadius") + @DecimalMin("0") + private Double searchRadius; + } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualSearchRequest.java index d01730b19e6..a5c3e9cdeaa 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/IndividualSearchRequest.java @@ -8,14 +8,14 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * IndividualSearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-27T11:47:19.561+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Name.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Name.java index 2739d9963e7..7a75ea01913 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Name.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Name.java @@ -8,13 +8,13 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.Size; /** * Name */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-27T11:47:19.561+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Skill.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Skill.java index ec0ac588977..58b905a8522 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Skill.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/Skill.java @@ -9,15 +9,15 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; /** * Identifier */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-27T11:47:19.561+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/UserDetails.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/UserDetails.java index e524ab8389e..ea435d9fac9 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/UserDetails.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/individual/UserDetails.java @@ -9,8 +9,8 @@ import lombok.NoArgsConstructor; import org.egov.common.models.core.Role; -import javax.validation.Valid; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Size; import java.util.List; @Data diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/AdditionalFields.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/AdditionalFields.java index 948d8bb5c2c..87d1cd3ea63 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/AdditionalFields.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/AdditionalFields.java @@ -8,9 +8,9 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.Min; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -18,13 +18,14 @@ * AdditionalFields */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor @AllArgsConstructor @Builder @JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated public class AdditionalFields { @JsonProperty("schema") diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Address.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Address.java index ac40eaa04e8..dfefe72564d 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Address.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Address.java @@ -3,29 +3,30 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.annotations.ApiModel; +import jakarta.validation.Valid; +import jakarta.validation.constraints.DecimalMax; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.egov.common.models.core.Boundary; 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; - /** * Representation of a address. Individual APIs may choose to extend from this using allOf if more details needed to be added in their case. */ @ApiModel(description = "Representation of a address. Individual APIs may choose to extend from this using allOf if more details needed to be added in their case. ") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor @AllArgsConstructor @Builder - @JsonIgnoreProperties(ignoreUnknown = true) +@JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated public class Address { @JsonProperty("id") diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Boundary.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Boundary.java deleted file mode 100644 index 6cfb2b5c352..00000000000 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Boundary.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.egov.common.models.product; - -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; -import java.util.ArrayList; -import java.util.List; - -/** -* Boundary -*/ -@Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -@JsonIgnoreProperties(ignoreUnknown = true) -public class Boundary { - @JsonProperty("code") - @NotNull - - - - private String code = null; - - @JsonProperty("name") - @NotNull - - - - private String name = null; - - @JsonProperty("label") - - - - private String label = null; - - @JsonProperty("latitude") - - - - private String latitude = null; - - @JsonProperty("longitude") - - - - private String longitude = null; - - @JsonProperty("children") - - @Valid - - - private List children = null; - - @JsonProperty("materializedPath") - - - - private String materializedPath = null; - - - public Boundary addChildrenItem(Boundary childrenItem) { - if (this.children == null) { - this.children = new ArrayList<>(); - } - this.children.add(childrenItem); - return this; - } - -} - diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Field.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Field.java index 828a1cad303..f27a52cf429 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Field.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Field.java @@ -1,7 +1,7 @@ package org.egov.common.models.product; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; @@ -15,7 +15,7 @@ * Field */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Product.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Product.java index 32b9ace7565..afa12e20be2 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Product.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/Product.java @@ -7,32 +7,27 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovModel; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; /** * Product */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class Product { - - @JsonProperty("id") - private String id = null; +public class Product extends EgovModel { - @JsonProperty("tenantId") - @NotNull - @Size(min=2,max=1000) - private String tenantId = null; @JsonProperty("type") @NotNull @@ -48,19 +43,9 @@ public class Product { @Size(min = 0, max = 1000) private String manufacturer = null; - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields = null; - + //TODO remove @JsonProperty("isDeleted") private Boolean isDeleted = null; - @JsonProperty("rowVersion") - private Integer rowVersion = null; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails = null; - } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductRequest.java index 3811feae8ea..5b209a65ff9 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductRequest.java @@ -9,9 +9,9 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ * ProductRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductResponse.java index 9d89ecc7763..52865f39251 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductResponse.java @@ -9,8 +9,8 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ * ProductResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductSearch.java index 9f653cec91e..5b4907bb571 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductSearch.java @@ -1,30 +1,28 @@ package org.egov.common.models.product; +import java.util.List; + 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 lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovSearchModel; import org.springframework.validation.annotation.Validated; -import java.util.List; - /** * ProductSearch */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class ProductSearch { - - @JsonProperty("id") - private List id = null; +public class ProductSearch extends EgovSearchModel { @JsonProperty("type") private String type = null; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductSearchRequest.java index 62cb48ceaab..1f32dad0bf8 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductSearchRequest.java @@ -9,14 +9,14 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * ProductSearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariant.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariant.java index 02004d7ce43..6f7e34e6b5e 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariant.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariant.java @@ -1,83 +1,47 @@ package org.egov.common.models.product; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; + import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import digit.models.coremodels.AuditDetails; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovModel; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - /** * ProductVariant */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class ProductVariant { - @JsonProperty("id") - - - private String id = null; - - @JsonProperty("tenantId") - @NotNull - @Size(min=2,max=1000) - private String tenantId = null; +public class ProductVariant extends EgovModel { @JsonProperty("productId") @NotNull - - @Size(min = 2, max = 64) - private String productId = null; @JsonProperty("sku") - - @Size(min = 0, max = 1000) - private String sku = null; @JsonProperty("variation") @NotNull - - @Size(min = 0, max = 1000) - private String variation = null; - @JsonProperty("additionalFields") - - @Valid - - - private AdditionalFields additionalFields = null; - + //TODO remove @JsonProperty("isDeleted") - - private Boolean isDeleted = null; - @JsonProperty("rowVersion") - - - private Integer rowVersion = null; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails = null; - } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantRequest.java index 9f7bd7074aa..e9d815128a9 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantRequest.java @@ -9,9 +9,9 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ * ProductVariantRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantResponse.java index ef76bbb54ce..5584a534753 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantResponse.java @@ -9,8 +9,8 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ * ProductVariantResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantSearch.java index 93f0bd14408..1f024529025 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantSearch.java @@ -1,31 +1,29 @@ package org.egov.common.models.product; import java.util.List; -import javax.validation.constraints.Size; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovSearchModel; import org.springframework.validation.annotation.Validated; /** * ProductVariantSearch */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class ProductVariantSearch { - - @JsonProperty("id") - private List id = null; +public class ProductVariantSearch extends EgovSearchModel { @JsonProperty("productId") private List productId = null; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantSearchRequest.java index 6485447ea11..880b52f0d1a 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProductVariantSearchRequest.java @@ -9,14 +9,14 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * ProductVariantSearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProjectProductVariant.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProjectProductVariant.java index eca7aff656b..3970c1927d2 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProjectProductVariant.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/ProjectProductVariant.java @@ -8,13 +8,13 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; /** * ProjectProductVariant */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/TenantRole.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/TenantRole.java index 3af69e1d41d..2b2ed233edc 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/TenantRole.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/TenantRole.java @@ -10,8 +10,8 @@ import org.egov.common.contract.request.Role; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -20,7 +20,7 @@ */ @ApiModel(description = "User role carries the tenant related role information for the user. A user can have multiple roles per tenant based on the need of the tenant. A user may also have multiple roles for multiple tenants.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/UserInfo.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/UserInfo.java index 7101032ff40..5c89828c693 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/UserInfo.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/product/UserInfo.java @@ -10,8 +10,8 @@ import org.egov.common.contract.request.Role; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -20,7 +20,7 @@ */ @ApiModel(description = "This is acting ID token of the authenticated user on the server. Any value provided by the clients will be ignored and actual user based on authtoken will be used on the server.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T16:45:24.641+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/AdditionalFields.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/AdditionalFields.java index 5ffbd00271a..819eb9def0c 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/AdditionalFields.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/AdditionalFields.java @@ -8,9 +8,9 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.Min; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -18,13 +18,14 @@ * AdditionalFields */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor @AllArgsConstructor @Builder @JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated public class AdditionalFields { @JsonProperty("schema") diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Address.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Address.java index ce37429fe51..332c652ac33 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Address.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Address.java @@ -7,20 +7,21 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.egov.common.models.core.Boundary; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.DecimalMax; -import javax.validation.constraints.DecimalMin; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.DecimalMax; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; /** * Representation of a address. Individual APIs may choose to extend from this using allOf if more details needed to be added in their case. */ @ApiModel(description = "Representation of a address. Individual APIs may choose to extend from this using allOf if more details needed to be added in their case. ") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryBulkRequest.java index 87bfe0c5802..a6167611a94 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryBulkRequest.java @@ -9,9 +9,9 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ * BeneficiaryRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryBulkResponse.java index 343a1b78c6b..06c6081b71b 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryBulkResponse.java @@ -9,16 +9,16 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; /** -* BeneficiaryResponse -*/ + * BeneficiaryResponse + */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor @@ -26,29 +26,29 @@ @Builder @JsonIgnoreProperties(ignoreUnknown = true) public class BeneficiaryBulkResponse { - @JsonProperty("ResponseInfo") - @NotNull - - @Valid - + @JsonProperty("ResponseInfo") + @NotNull + @Valid private ResponseInfo responseInfo = null; - @JsonProperty("ProjectBeneficiaries") - - @Valid - + @JsonProperty("TotalCount") + @Valid + @Builder.Default + private Long totalCount = 0L; + @JsonProperty("ProjectBeneficiaries") + @Valid private List projectBeneficiaries = null; - public BeneficiaryBulkResponse addProjectBeneficiaryItem(ProjectBeneficiary projectBeneficiaryItem) { - if (this.projectBeneficiaries == null) { + public BeneficiaryBulkResponse addProjectBeneficiaryItem(ProjectBeneficiary projectBeneficiaryItem) { + if (this.projectBeneficiaries == null) { this.projectBeneficiaries = new ArrayList<>(); - } + } this.projectBeneficiaries.add(projectBeneficiaryItem); return this; - } + } } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryRequest.java index aa04c2692a1..cb1e4462721 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryRequest.java @@ -9,14 +9,14 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * BeneficiaryRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryResponse.java index 31e11433ff3..0b95acf2dc8 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiaryResponse.java @@ -9,14 +9,14 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * BeneficiaryResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiarySearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiarySearchRequest.java index 5de41e04615..9ca9e718d78 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiarySearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/BeneficiarySearchRequest.java @@ -9,14 +9,14 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * BeneficiarySearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Boundary.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Boundary.java deleted file mode 100644 index a7db5d3bb41..00000000000 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Boundary.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.egov.common.models.project; - -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.constraints.NotNull; - -/** -* Boundary -*/ -@Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -@JsonIgnoreProperties(ignoreUnknown = true) -public class Boundary { - - @JsonProperty("code") - @NotNull - private String code = null; - - @JsonProperty("name") - private String name = null; - - @JsonProperty("label") - private String label = null; - - @JsonProperty("latitude") - private String latitude = null; - - @JsonProperty("longitude") - private String longitude = null; - -// @JsonProperty("children") -// @Valid -// private List children = null; - - @JsonProperty("materializedPath") - private String materializedPath = null; - -// public Boundary addChildrenItem(Boundary childrenItem) { -// if (this.children == null) { -// this.children = new ArrayList<>(); -// } -// this.children.add(childrenItem); -// return this; -// } - -} - diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Document.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Document.java index 225eb8fde60..1eb86b7c89f 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Document.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Document.java @@ -11,16 +11,16 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; /** * A Object holds the basic data for a Trade License */ @ApiModel(description = "A Object holds the basic data for a Trade License") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Field.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Field.java index c4f47fe7a7e..58360cdaf8e 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Field.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Field.java @@ -1,7 +1,7 @@ package org.egov.common.models.project; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; @@ -15,7 +15,7 @@ * Field */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Project.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Project.java index 13378ff0805..586ff410489 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Project.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Project.java @@ -11,7 +11,7 @@ import lombok.Setter; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; +import jakarta.validation.Valid; import java.util.ArrayList; import java.util.List; @@ -20,7 +20,7 @@ */ @ApiModel(description = "The purpose of this object to define the Project for a geography and period") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-08T16:20:57.141+05:30") + @Getter @Setter diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java index c5aa07e4f49..6c899a34765 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiary.java @@ -9,33 +9,28 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineModel; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; /** * A representation of the registration of an entity to a Project. */ @ApiModel(description = "A representation of the registration of an entity to a Project.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder - @JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectBeneficiary { - @JsonProperty("id") - private String id = null; - - @JsonProperty("tenantId") - @NotNull - @Size(min=2,max=64) - private String tenantId = null; +@SuperBuilder +@JsonIgnoreProperties(ignoreUnknown = true) +public class ProjectBeneficiary extends EgovOfflineModel { @JsonProperty("projectId") @NotNull @@ -49,36 +44,17 @@ public class ProjectBeneficiary { @JsonProperty("dateOfRegistration") @Min(value = 0, message = "Date must be greater than or equal to 0") private Long dateOfRegistration = null; - - @JsonProperty("clientReferenceId") - @Size(min=2,max=64) - private String clientReferenceId = null; - + /* + * This is the client reference id of the beneficiary type entity (i.e. household, individual) + * */ @JsonProperty("beneficiaryClientReferenceId") @Size(min=2,max=64) private String beneficiaryClientReferenceId = null; - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields = null; - + //TODO remove this @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; - @JsonProperty("rowVersion") - private Integer rowVersion = null; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails = null; - - @JsonProperty("clientAuditDetails") - @Valid - private AuditDetails clientAuditDetails = null; - - @JsonIgnore - private Boolean hasErrors = Boolean.FALSE; - @JsonProperty("tag") private String tag; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiarySearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiarySearch.java index f5e33bccb19..993180f902b 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiarySearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectBeneficiarySearch.java @@ -1,37 +1,28 @@ package org.egov.common.models.project; import java.util.List; -import javax.validation.constraints.Size; 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 lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineSearchModel; import org.springframework.validation.annotation.Validated; /** * Search model for project beneficiary. */ - @ApiModel(description = "Search model for project beneficiary.") +@ApiModel(description = "Search model for project beneficiary.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - @Data @NoArgsConstructor @AllArgsConstructor -@Builder - @JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectBeneficiarySearch { - - @JsonProperty("id") - private List id = null; - - @JsonProperty("tenantId") - @Size(min=2,max=1000) - private String tenantId = null; +@SuperBuilder +@JsonIgnoreProperties(ignoreUnknown = true) +public class ProjectBeneficiarySearch extends EgovOfflineSearchModel { @JsonProperty("projectId") private List projectId = null; @@ -39,9 +30,6 @@ public class ProjectBeneficiarySearch { @JsonProperty("beneficiaryId") private List beneficiaryId = null; - @JsonProperty("clientReferenceId") - private List clientReferenceId = null; - @JsonProperty("dateOfRegistration") private Long dateOfRegistration = null; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacility.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacility.java index a8081091e62..60c61e9ddee 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacility.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacility.java @@ -1,41 +1,28 @@ package org.egov.common.models.project; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import digit.models.coremodels.AuditDetails; import io.swagger.annotations.ApiModel; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovModel; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - /** * This object defines the mapping of a facility to a project. */ @ApiModel(description = "This object defines the mapping of a facility to a project.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectFacility { - @JsonProperty("id") - @Size(min = 2, max = 64) - private String id = null; - - @JsonProperty("tenantId") - @NotNull - @Size(min = 2, max = 1000) - private String tenantId = null; +public class ProjectFacility extends EgovModel { @JsonProperty("facilityId") @NotNull @@ -47,21 +34,9 @@ public class ProjectFacility { @Size(min=2,max=64) private String projectId = null; + //TODO remove @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; - @JsonProperty("rowVersion") - private Integer rowVersion = null; - - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields = null; - - @JsonIgnore - private Boolean hasErrors = Boolean.FALSE; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails = null; } \ No newline at end of file diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityBulkRequest.java index 049c0bb3dbb..cd1af9dfcb0 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityBulkRequest.java @@ -10,9 +10,9 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -20,7 +20,7 @@ * ProjectStaffRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityBulkResponse.java index 89218817564..d2481b16298 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityBulkResponse.java @@ -8,8 +8,8 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -17,7 +17,7 @@ * ProjectFacilityResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityRequest.java index df428449143..a985decccef 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityRequest.java @@ -9,14 +9,14 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * ProjectFacilityRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityResponse.java index 40167cfed75..ce862b669c6 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilityResponse.java @@ -8,14 +8,14 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * ProjectFacilityResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-14T20:57:07.075+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilitySearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilitySearch.java index 5f86ad8f19f..adac9f7438d 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilitySearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilitySearch.java @@ -1,35 +1,28 @@ package org.egov.common.models.project; +import java.util.List; + 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 lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovSearchModel; import org.springframework.validation.annotation.Validated; -import java.util.List; - /** * This object defines the mapping of a facility to a project. */ - @ApiModel(description = "This object defines the mapping of a facility to a project.") +@ApiModel(description = "This object defines the mapping of a facility to a project.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - @Data @NoArgsConstructor @AllArgsConstructor -@Builder - @JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectFacilitySearch { - - @JsonProperty("id") - private List id = null; - - @JsonProperty("tenantId") - private String tenantId = null; +@SuperBuilder +@JsonIgnoreProperties(ignoreUnknown = true) +public class ProjectFacilitySearch extends EgovSearchModel { @JsonProperty("facilityId") private List facilityId = null; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilitySearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilitySearchRequest.java index 244d1c8e5d8..290d8c02805 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilitySearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectFacilitySearchRequest.java @@ -2,6 +2,8 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -9,15 +11,10 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; - /** * ProjectFacilitySearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - @Data @NoArgsConstructor @AllArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectProductVariant.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectProductVariant.java index dcbb34004ce..e8841ba5de9 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectProductVariant.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectProductVariant.java @@ -8,13 +8,13 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; /** * ProjectProductVariant */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectRequest.java index 5fb245440f2..fd09b6b635b 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectRequest.java @@ -9,9 +9,9 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ * ProjectRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResource.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResource.java index d3740b5facb..64001b9e278 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResource.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResource.java @@ -9,33 +9,27 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovModel; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; /** * This object defines the mapping of a resource to a project. */ @ApiModel(description = "This object defines the mapping of a resource to a project.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder - @JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectResource { - @JsonProperty("id") - @Size(min=2, max = 64) - private String id = null; - - @JsonProperty("tenantId") - @NotNull - @Size(min=2, max = 1000) - private String tenantId = null; +@SuperBuilder +@JsonIgnoreProperties(ignoreUnknown = true) +public class ProjectResource extends EgovModel { @JsonProperty("projectId") @NotNull @@ -46,24 +40,15 @@ public class ProjectResource { @NotNull private ProjectProductVariant resource = null; + //TODO remove @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; - @JsonProperty("rowVersion") - private Integer rowVersion = null; - @JsonProperty("startDate") private Long startDate = null; @JsonProperty("endDate") private Long endDate = null; - @JsonIgnore - private Boolean hasErrors = Boolean.FALSE; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails = null; - } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceBulkRequest.java index 00eb95e299d..26b6c095232 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceBulkRequest.java @@ -9,9 +9,9 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ * ProjectResourceRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceBulkResponse.java index 1f121c9db84..e04eb6abd1b 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceBulkResponse.java @@ -9,8 +9,8 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ * ProjectResourceResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceRequest.java index c161b22e4e8..d3387b1af96 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceRequest.java @@ -9,14 +9,14 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * ProjectResourceRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceResponse.java index 9e60ed020ed..cc9a7e5c635 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceResponse.java @@ -9,14 +9,14 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * ProjectResourceResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceSearch.java index d145f7d507b..0178325789b 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceSearch.java @@ -6,9 +6,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.annotations.ApiModel; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovSearchModel; import org.springframework.validation.annotation.Validated; /** @@ -16,17 +17,12 @@ */ @ApiModel(description = "This object defines the mapping of a resource to a project.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - @Data @NoArgsConstructor @AllArgsConstructor -@Builder - @JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectResourceSearch { - - @JsonProperty("id") - private List id = null; +@SuperBuilder +@JsonIgnoreProperties(ignoreUnknown = true) +public class ProjectResourceSearch extends EgovSearchModel { @JsonProperty("projectId") private List projectId = null; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceSearchRequest.java index ead04f4f24f..0ad5d439e2f 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResourceSearchRequest.java @@ -2,21 +2,18 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.Valid; +import jakarta.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; - /** * ProjectResourceSearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - @Data @NoArgsConstructor @AllArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResponse.java index 21ac8dbe285..54872c4d5a4 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectResponse.java @@ -9,8 +9,8 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ * ProjectResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectSearch.java index 15d753cc998..7bb2834bc5f 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectSearch.java @@ -2,62 +2,159 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovSearchModel; +import org.egov.common.models.core.ProjectSearchURLParams; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.Size; - /** -* ProjectSearch -*/ + * ProjectSearch - Model class for searching projects. + * This class includes various fields that can be used to filter projects based on specific criteria. + * It extends EgovSearchModel to inherit common search-related properties. + */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectSearch { - - @JsonProperty("id") - private String id = null; - - @JsonProperty("tenantId") - private String tenantId = null; +public class ProjectSearch extends EgovSearchModel { + /** + * The start date of the project. + * This field can be used to filter projects that start from a specific date. + */ @JsonProperty("startDate") - private Long startDate = null; + private Long startDate; + /** + * The end date of the project. + * This field can be used to filter projects that end by a specific date. + */ @JsonProperty("endDate") - private Long endDate = null; + private Long endDate; + /** + * Indicates if the project has tasks enabled. + * Default value is FALSE. + */ @JsonProperty("isTaskEnabled") - private Boolean isTaskEnabled = false; + private Boolean isTaskEnabled = Boolean.FALSE; + /** + * The parent project ID. + * This field can be used to filter sub-projects of a specific parent project. + * It should be between 2 and 64 characters in length. + */ @JsonProperty("parent") - @Size(min=2,max=64) - private String parent = null; + @Size(min = 2, max = 64) + private String parent; + /** + * The ID of the project type. + * This field can be used to filter projects of a specific type. + */ @JsonProperty("projectTypeId") - private String projectTypeId = null; + private String projectTypeId; + /** + * The ID of the sub-project type. + * This field can be used to filter projects of a specific sub-type. + */ @JsonProperty("subProjectTypeId") - private String subProjectTypeId = null; + private String subProjectTypeId; + /** + * The department associated with the project. + * This field can be used to filter projects of a specific department. + * It should be between 2 and 64 characters in length. + */ @JsonProperty("department") - @Size(min=2,max=64) - private String department = null; - + @Size(min = 2, max = 64) + private String department; + + /** + * The reference ID of the project. + * This field can be used to filter projects by their reference ID. + * It should be between 2 and 100 characters in length. + */ @JsonProperty("referenceId") - @Size(min=2,max=100) - private String referenceId = null; + @Size(min = 2, max = 100) + private String referenceId; + /** + * The boundary code associated with the project. + * This field can be used to filter projects within a specific boundary. + */ @JsonProperty("boundaryCode") - private String boundaryCode = null; - -} - + private String boundaryCode; + + /** + * Used in project search API to specify if response should include project elements + * that are in the preceding hierarchy of matched projects. + */ + @JsonProperty("includeAncestors") + private Boolean includeAncestors; + + /** + * Used in project search API to specify if response should include project elements + * that are in the following hierarchy of matched projects. + */ + @JsonProperty("includeDescendants") + private Boolean includeDescendants; + + /** + * Used in project search API to limit the search results to only those projects whose creation + * date is after the specified 'createdFrom' date. + */ + @JsonProperty("createdFrom") + private Long createdFrom; + + /** + * Used in project search API to limit the search results to only those projects whose creation + * date is before the specified 'createdTo' date. + */ + @JsonProperty("createdTo") + private Long createdTo; + + /** + * The name of the project. + * This field can be used to filter projects by their name. + */ + @JsonProperty("name") + private String name; + + /** + * Sets the URL parameters from the given ProjectSearchURLParams object to this ProjectSearch object. + * This method allows for easy transfer of search parameters from URL to the search model. + * + * @param urlParams The ProjectSearchURLParams object containing the URL parameters. + */ + public void setURLParams(ProjectSearchURLParams urlParams) { + // Call the superclass method to set common URL parameters + + // If the URL parameter includeAncestors is not null, set it to the current object's includeAncestors field + if (urlParams.getIncludeAncestors() != null) { + includeAncestors = urlParams.getIncludeAncestors(); + } + + // If the URL parameter includeDescendants is not null, set it to the current object's includeDescendants field + if (urlParams.getIncludeDescendants() != null) { + includeDescendants = urlParams.getIncludeDescendants(); + } + + // If the URL parameter createdFrom is not null, set it to the current object's createdFrom field + if (urlParams.getCreatedFrom() != null) { + createdFrom = urlParams.getCreatedFrom(); + } + + // If the URL parameter createdTo is not null, set it to the current object's createdTo field + if (urlParams.getCreatedTo() != null) { + createdTo = urlParams.getCreatedTo(); + } + } +} \ No newline at end of file diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectSearchRequest.java index 5b92236e106..3dc85137b83 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectSearchRequest.java @@ -2,22 +2,20 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; 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.ProjectSearchURLParams; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; - /** * ProjectSearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - @Data @NoArgsConstructor @AllArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaff.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaff.java index 18d20c408a4..78ecda1fa80 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaff.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaff.java @@ -1,9 +1,11 @@ package org.egov.common.models.project; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovModel; import org.springframework.validation.annotation.Validated; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -22,23 +24,14 @@ */ @ApiModel(description = "This object defines the mapping of a system staff user to a project for a certain period.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectStaff { - - @JsonProperty("id") - @Size(min=2,max=64) - private String id = null; - - @JsonProperty("tenantId") - @NotNull - @Size(min=2,max=1000) - private String tenantId = null; +public class ProjectStaff extends EgovModel { @JsonProperty("userId") @NotNull @@ -60,22 +53,9 @@ public class ProjectStaff { @Size(min=2,max=64) private String channel = null; + //TODO remove @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; - @JsonProperty("rowVersion") - private Integer rowVersion = null; - - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields = null; - - @JsonIgnore - private Boolean hasErrors = Boolean.FALSE; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails = null; - } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffBulkRequest.java index c23cc976799..c13dc8fcc4b 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffBulkRequest.java @@ -9,9 +9,9 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ * ProjectStaffRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffBulkResponse.java index 5c36dd3f503..d73daee5c73 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffBulkResponse.java @@ -9,8 +9,8 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ * ProjectStaffResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffRequest.java index 9c0501849e0..ec7042c5ee0 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffRequest.java @@ -9,14 +9,14 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * ProjectStaffRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffResponse.java index c9c91fc59e5..49403f8dd95 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffResponse.java @@ -9,14 +9,14 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * ProjectStaffResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffSearch.java index ea3e9739fa6..7e8cb5ca5ba 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffSearch.java @@ -1,15 +1,15 @@ package org.egov.common.models.project; import java.util.List; -import javax.validation.constraints.Size; 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 lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovSearchModel; import org.springframework.validation.annotation.Validated; /** @@ -17,22 +17,12 @@ */ @ApiModel(description = "This object defines the mapping of a system staff user to a project for a certain period.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectStaffSearch { - - - @JsonProperty("id") - private List id = null; - - @JsonProperty("tenantId") - @Size(min = 2, max = 1000) - private String tenantId = null; +public class ProjectStaffSearch extends EgovSearchModel { @JsonProperty("staffId") private List staffId = null; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffSearchRequest.java index f0e67e8bf1f..f43a480aea1 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectStaffSearchRequest.java @@ -2,6 +2,8 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -9,15 +11,10 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; - /** * ProjectStaffSearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - @Data @NoArgsConstructor @AllArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectType.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectType.java index 6aa4942f0a7..b428843e9d3 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectType.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/ProjectType.java @@ -10,8 +10,8 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -20,7 +20,7 @@ */ @ApiModel(description = "This is the master data to capture the metadata of Project") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Role.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Role.java index c1ba8ffa791..fa2e4fee092 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Role.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Role.java @@ -9,15 +9,15 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; /** * minimal representation of the Roles in the system to be carried along in UserInfo with RequestInfo meta data. Actual authorization service to extend this to have more role related attributes */ @ApiModel(description = "minimal representation of the Roles in the system to be carried along in UserInfo with RequestInfo meta data. Actual authorization service to extend this to have more role related attributes ") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Target.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Target.java index e7595853367..5fe7f7dbf7e 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Target.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Target.java @@ -15,7 +15,7 @@ * Target */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Getter @Setter diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Task.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Task.java index 01002770204..eddbeb82f0f 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Task.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/Task.java @@ -8,11 +8,13 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineModel; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -20,25 +22,13 @@ * Task */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class Task { - - @JsonProperty("id") - private String id = null; - - @JsonProperty("tenantId") - @NotNull - private String tenantId = null; - - @JsonProperty("clientReferenceId") - @Size(min = 2, max = 64) - private String clientReferenceId = null; +public class Task extends EgovOfflineModel { @JsonProperty("projectId") @NotNull @@ -80,30 +70,13 @@ public class Task { @Valid private Address address = null; - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields = null; - + //TODO remove this @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; - @JsonProperty("rowVersion") - private Integer rowVersion = null; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails = null; - - @JsonProperty("clientAuditDetails") - @Valid - private AuditDetails clientAuditDetails = null; - @JsonProperty("status") private String status = null; - @JsonIgnore - private Boolean hasErrors = Boolean.FALSE; - public Task addResourcesItem(TaskResource resourcesItem) { this.resources.add(resourcesItem); return this; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskBulkRequest.java index 48685771d06..87b257e312c 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskBulkRequest.java @@ -9,9 +9,9 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ * TaskRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskBulkResponse.java index cdea71cb42b..c0bbfb8e5f5 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskBulkResponse.java @@ -9,8 +9,8 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ * TaskResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor @@ -32,6 +32,11 @@ public class TaskBulkResponse { @Valid private ResponseInfo responseInfo = null; + @JsonProperty("TotalCount") + @Valid + @Builder.Default + private Long totalCount = 0L; + @JsonProperty("Tasks") @NotNull @Valid diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskRequest.java index 13fd346d79a..a1d61ed85c1 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskRequest.java @@ -9,14 +9,14 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * TaskRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResource.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResource.java index 986275799d2..382bd5e34ac 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResource.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResource.java @@ -9,15 +9,15 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; /** * TaskResource */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResourceRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResourceRequest.java index b2b59d96d3c..8baedb1acfa 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResourceRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResourceRequest.java @@ -9,9 +9,9 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ * TaskRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResourceResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResourceResponse.java index 62300dd10ae..4d8c13db362 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResourceResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResourceResponse.java @@ -9,8 +9,8 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ * TaskResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResponse.java index 0c4ce1b9ea4..64274a157ea 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskResponse.java @@ -9,14 +9,14 @@ import org.egov.common.contract.response.ResponseInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * TaskResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskSearch.java index 3392293a142..df1857a33f6 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskSearch.java @@ -1,31 +1,28 @@ package org.egov.common.models.project; +import java.util.List; + 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 lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineSearchModel; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.Size; -import java.util.List; - /** * TaskSearch */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class TaskSearch { - - @JsonProperty("id") - private List id = null; +public class TaskSearch extends EgovOfflineSearchModel { @JsonProperty("projectId") private List projectId = null; @@ -33,9 +30,6 @@ public class TaskSearch { @JsonProperty("projectBeneficiaryId") private List projectBeneficiaryId = null; - @JsonProperty("clientReferenceId") - private List clientReferenceId = null; - @JsonProperty("projectBeneficiaryClientReferenceId") private List projectBeneficiaryClientReferenceId = null; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskSearchRequest.java index 6d1184da16f..dea1ee10e02 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TaskSearchRequest.java @@ -9,14 +9,14 @@ import org.egov.common.contract.request.RequestInfo; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * TaskSearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TenantRole.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TenantRole.java index dbd04dc9343..1feb9f2518f 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TenantRole.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/TenantRole.java @@ -9,8 +9,8 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ */ @ApiModel(description = "User role carries the tenant related role information for the user. A user can have multiple roles per tenant based on the need of the tenant. A user may also have multiple roles for multiple tenants.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/UserInfo.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/UserInfo.java index b67c149836a..57afb18c30f 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/UserInfo.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/project/UserInfo.java @@ -9,8 +9,8 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ */ @ApiModel(description = "This is acting ID token of the authenticated user on the server. Any value provided by the clients will be ignored and actual user based on authtoken will be used on the server.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/Referral.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/Referral.java index 30722b6b055..9cdc553bb92 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/Referral.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/Referral.java @@ -7,27 +7,21 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineModel; import org.egov.common.models.project.AdditionalFields; import org.egov.common.models.referralmanagement.sideeffect.SideEffect; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.List; @Data @NoArgsConstructor @AllArgsConstructor -@Builder -public class Referral { - - @JsonProperty("id") - @Size(min = 2, max = 64) - private String id; - - @JsonProperty("clientReferenceId") - @Size(min = 2, max = 64) - private String clientReferenceId; +@SuperBuilder +public class Referral extends EgovOfflineModel { @JsonProperty("projectBeneficiaryId") @Size(min = 2, max = 64) @@ -53,35 +47,14 @@ public class Referral { @Size(min=1) private List reasons; - @JsonProperty("sideEffect") - private SideEffect sideEffect; - @JsonProperty("referralCode") + @Size(max=100) private String referralCode; - @JsonProperty("tenantId") - @NotNull - @Size(min=2, max = 1000) - private String tenantId; + @JsonProperty("sideEffect") + private SideEffect sideEffect; @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; - @JsonProperty("rowVersion") - private Integer rowVersion; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails; - - @JsonProperty("clientAuditDetails") - @Valid - private AuditDetails clientAuditDetails; - - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields; - - @JsonIgnore - private Boolean hasErrors = Boolean.FALSE; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java index e8daf9a446b..43beca385c8 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkRequest.java @@ -7,9 +7,9 @@ import lombok.NoArgsConstructor; import org.egov.common.contract.request.RequestInfo; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; import java.util.Objects; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java index 8fd04588e0b..7dfa73883aa 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralBulkResponse.java @@ -7,8 +7,8 @@ import lombok.NoArgsConstructor; import org.egov.common.contract.response.ResponseInfo; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -23,6 +23,11 @@ public class ReferralBulkResponse { @Valid private ResponseInfo responseInfo; + @JsonProperty("TotalCount") + @Valid + @Builder.Default + private Long totalCount = 0L; + @JsonProperty("Referrals") @NotNull @Valid diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java index 7f359fc6e92..c21a6e2a3a5 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralRequest.java @@ -7,8 +7,8 @@ import lombok.NoArgsConstructor; import org.egov.common.contract.request.RequestInfo; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java index fa0f7ba0786..3cf99fc9073 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralResponse.java @@ -7,8 +7,8 @@ import lombok.NoArgsConstructor; import org.egov.common.contract.response.ResponseInfo; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java index de01f288289..9c3ef87889e 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearch.java @@ -1,23 +1,19 @@ package org.egov.common.models.referralmanagement; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; - -import java.util.List; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineSearchModel; @Data @NoArgsConstructor @AllArgsConstructor -@Builder -public class ReferralSearch { - @JsonProperty("id") - private List id; - - @JsonProperty("clientReferenceId") - private List clientReferenceId; +@SuperBuilder +public class ReferralSearch extends EgovOfflineSearchModel { @JsonProperty("projectBeneficiaryId") private List projectBeneficiaryId; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java index 8884292d19c..e872c6f1df0 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/ReferralSearchRequest.java @@ -7,8 +7,8 @@ import lombok.NoArgsConstructor; import org.egov.common.contract.request.RequestInfo; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java index 6548e7c5025..71816f7849f 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/beneficiarydownsync/DownsyncCriteria.java @@ -1,6 +1,6 @@ package org.egov.common.models.referralmanagement.beneficiarydownsync; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferral.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferral.java index 330b437df95..2c68467c843 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferral.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferral.java @@ -1,8 +1,8 @@ package org.egov.common.models.referralmanagement.hfreferral; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; @@ -11,26 +11,15 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineModel; import org.egov.common.models.project.AdditionalFields; @Data @NoArgsConstructor @AllArgsConstructor -@Builder -public class HFReferral { - - @JsonProperty("id") - @Size(min = 2, max = 64) - private String id; - - @JsonProperty("clientReferenceId") - @Size(min = 2, max = 64) - private String clientReferenceId; - - @JsonProperty("tenantId") - @NotNull - @Size(min=2, max = 1000) - private String tenantId; +@SuperBuilder +public class HFReferral extends EgovOfflineModel { @JsonProperty("projectId") @Size(min = 2, max = 64) @@ -61,24 +50,8 @@ public class HFReferral { @Size(max=100) private String nationalLevelId; + //TODO remove this @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; - @JsonProperty("rowVersion") - private Integer rowVersion; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails; - - @JsonProperty("clientAuditDetails") - @Valid - private AuditDetails clientAuditDetails; - - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields; - - @JsonIgnore - private Boolean hasErrors = Boolean.FALSE; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralBulkRequest.java index 358cb03135c..bd9080b6c80 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralBulkRequest.java @@ -3,9 +3,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralBulkResponse.java index a0f1c04b090..a561ef4f8a4 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralBulkResponse.java @@ -3,8 +3,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralRequest.java index 3adc90053b6..1c305c56341 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralRequest.java @@ -1,7 +1,7 @@ package org.egov.common.models.referralmanagement.hfreferral; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralResponse.java index 24471207656..97821467ac9 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralResponse.java @@ -1,7 +1,7 @@ package org.egov.common.models.referralmanagement.hfreferral; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralSearch.java index 02dbfdf899a..26d56c565ad 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralSearch.java @@ -2,25 +2,18 @@ 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 lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineSearchModel; @Data @NoArgsConstructor @AllArgsConstructor -@Builder -public class HFReferralSearch { - @JsonProperty("id") - private List id; - - @JsonProperty("clientReferenceId") - private List clientReferenceId; +@SuperBuilder +public class HFReferralSearch extends EgovOfflineSearchModel { @JsonProperty("facilityId") private List facilityId; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralSearchRequest.java index 4784f9fbdad..1692ca692d5 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/hfreferral/HFReferralSearchRequest.java @@ -1,7 +1,7 @@ package org.egov.common.models.referralmanagement.hfreferral; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java index f91a733c8b3..f9f3041aeb5 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffect.java @@ -7,26 +7,20 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineModel; import org.egov.common.models.project.AdditionalFields; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.List; @Data @NoArgsConstructor @AllArgsConstructor -@Builder -public class SideEffect { - - @JsonProperty("id") - @Size(min = 2, max = 64) - private String id; - - @JsonProperty("clientReferenceId") - @Size(min = 2, max = 64) - private String clientReferenceId; +@SuperBuilder +public class SideEffect extends EgovOfflineModel { @JsonProperty("taskId") @Size(min = 2, max = 64) @@ -50,29 +44,8 @@ public class SideEffect { @Size(min=1) private List symptoms; - @JsonProperty("tenantId") - @NotNull - @Size(min=2, max = 1000) - private String tenantId; - + //TODO remove this @JsonProperty("isDeleted") private Boolean isDeleted = Boolean.FALSE; - @JsonProperty("rowVersion") - private Integer rowVersion; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails; - - @JsonProperty("clientAuditDetails") - @Valid - private AuditDetails clientAuditDetails; - - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields; - - @JsonIgnore - private Boolean hasErrors = Boolean.FALSE; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java index 7b5cb98ebfc..fed08c092de 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkRequest.java @@ -7,9 +7,9 @@ import lombok.NoArgsConstructor; import org.egov.common.contract.request.RequestInfo; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; import java.util.Objects; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java index 64b8a8d2989..d22245c5a79 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectBulkResponse.java @@ -7,8 +7,8 @@ import lombok.NoArgsConstructor; import org.egov.common.contract.response.ResponseInfo; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -24,6 +24,11 @@ public class SideEffectBulkResponse { @Valid private ResponseInfo responseInfo; + @JsonProperty("TotalCount") + @Valid + @Builder.Default + private Long totalCount = 0L; + @JsonProperty("SideEffects") @NotNull @Valid diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java index 96f020e09e6..893e9efb526 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectRequest.java @@ -7,8 +7,8 @@ import lombok.NoArgsConstructor; import org.egov.common.contract.request.RequestInfo; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java index 0ca3e42b228..8dbc9a0a89c 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectResponse.java @@ -7,8 +7,8 @@ import lombok.NoArgsConstructor; import org.egov.common.contract.response.ResponseInfo; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java index 7bde8cfb76c..4a37ded59b3 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearch.java @@ -1,23 +1,19 @@ package org.egov.common.models.referralmanagement.sideeffect; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; - -import java.util.List; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineSearchModel; @Data @NoArgsConstructor @AllArgsConstructor -@Builder -public class SideEffectSearch { - @JsonProperty("id") - private List id; - - @JsonProperty("clientReferenceId") - private List clientReferenceId; +@SuperBuilder +public class SideEffectSearch extends EgovOfflineSearchModel { @JsonProperty("taskId") private List taskId; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java index f9549e207a8..a5248c5d6e7 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/referralmanagement/sideeffect/SideEffectSearchRequest.java @@ -7,8 +7,8 @@ import lombok.NoArgsConstructor; import org.egov.common.contract.request.RequestInfo; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/AdditionalFields.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/AdditionalFields.java index 9c94c91ea95..ef65681acc2 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/AdditionalFields.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/AdditionalFields.java @@ -8,9 +8,9 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.Min; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -18,14 +18,14 @@ * AdditionalFields */ @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) - +@Deprecated public class AdditionalFields { @JsonProperty("schema") diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Address.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Address.java index d5ae3b61517..3a08cad9abc 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Address.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Address.java @@ -3,30 +3,31 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.annotations.ApiModel; +import jakarta.validation.Valid; +import jakarta.validation.constraints.DecimalMax; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.egov.common.models.core.Boundary; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.DecimalMax; -import javax.validation.constraints.DecimalMin; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - /** * Representation of a address. Individual APIs may choose to extend from this using allOf if more details needed to be added in their case. */ @ApiModel(description = "Representation of a address. Individual APIs may choose to extend from this using allOf if more details needed to be added in their case. ") @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) +@Deprecated public class Address { @JsonProperty("id") @Size(min = 2, max = 64) diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/AddressType.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/AddressType.java index 1ca1084f080..b39fcffd32d 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/AddressType.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/AddressType.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonValue; @JsonIgnoreProperties(ignoreUnknown = true) +@Deprecated public enum AddressType { PERMANENT("PERMANENT"), diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Boundary.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Boundary.java deleted file mode 100644 index 16bc59bfa05..00000000000 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Boundary.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.egov.common.models.stock; - -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; -import java.util.ArrayList; -import java.util.List; - -/** -* Boundary -*/ -@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 Boundary { - @JsonProperty("code") - @NotNull - - - - private String code = null; - - @JsonProperty("name") - - - - private String name = null; - - @JsonProperty("label") - - - - private String label = null; - - @JsonProperty("latitude") - - - - private String latitude = null; - - @JsonProperty("longitude") - - - - private String longitude = null; - - @JsonProperty("children") - - @Valid - - - private List children = null; - - @JsonProperty("materializedPath") - - - - private String materializedPath = null; - - - public Boundary addChildrenItem(Boundary childrenItem) { - if (this.children == null) { - this.children = new ArrayList<>(); - } - this.children.add(childrenItem); - return this; - } - -} - diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Field.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Field.java index 4994957dd27..f040c0d8a28 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Field.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Field.java @@ -1,7 +1,7 @@ package org.egov.common.models.stock; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; @@ -15,7 +15,7 @@ * Field */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Stock.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Stock.java index c53164b370c..1ec63f96c54 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Stock.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/Stock.java @@ -1,10 +1,10 @@ package org.egov.common.models.stock; -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 jakarta.validation.Valid; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -15,33 +15,22 @@ import lombok.Builder.Default; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineModel; import org.springframework.validation.annotation.Validated; /** * Stock */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class Stock { - - @JsonProperty("id") - @Size(min=2, max=64) - private String id; - - @JsonProperty("clientReferenceId") - @Size(min=2, max=64) - private String clientReferenceId; - - @JsonProperty("tenantId") - @NotNull - @Size(min=2, max=1000) - private String tenantId; +public class Stock extends EgovOfflineModel { /* product fields */ @JsonProperty("productVariantId") @@ -98,30 +87,13 @@ public class Stock { @Size(min = 2, max = 200) private String wayBillNumber; - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields; - + //TODO remove this @JsonProperty("isDeleted") @Default private Boolean isDeleted = Boolean.FALSE; - @JsonProperty("rowVersion") - private Integer rowVersion; - - @JsonIgnore - @Default - private Boolean hasErrors = Boolean.FALSE; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails; - @JsonProperty("dateOfEntry") private Long dateOfEntry; - @JsonProperty("clientAuditDetails") - @Valid - private AuditDetails clientAuditDetails; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockBulkRequest.java index 7b42fbb4f27..696a7b9e41e 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockBulkRequest.java @@ -8,9 +8,9 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ * StockRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockBulkResponse.java index c1057a595c4..cea7c46b8e5 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockBulkResponse.java @@ -8,8 +8,8 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -17,7 +17,7 @@ * StockResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliation.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliation.java index 7e3ac004d0f..b8fc052ce68 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliation.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliation.java @@ -8,36 +8,26 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineModel; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; /** * StockReconciliation */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class StockReconciliation { - @JsonProperty("id") - @Size(min=2, max=64) - private String id = null; - - @JsonProperty("clientReferenceId") - @Size(min=2, max=64) - private String clientReferenceId = null; - - @JsonProperty("tenantId") - @NotNull - @Size(min=2, max=1000) - private String tenantId = null; +public class StockReconciliation extends EgovOfflineModel { @JsonProperty("facilityId") @NotNull @@ -68,25 +58,9 @@ public class StockReconciliation { @JsonProperty("dateOfReconciliation") private Long dateOfReconciliation = null; - @JsonProperty("additionalFields") - @Valid - private AdditionalFields additionalFields = null; - + //TODO remove this @JsonProperty("isDeleted") private Boolean isDeleted = null; - @JsonProperty("rowVersion") - private Integer rowVersion = null; - - @JsonIgnore - private Boolean hasErrors = Boolean.FALSE; - - @JsonProperty("auditDetails") - @Valid - private AuditDetails auditDetails = null; - - @JsonProperty("clientAuditDetails") - @Valid - private AuditDetails clientAuditDetails = null; } diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationBulkRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationBulkRequest.java index 169f0f86944..b9f01d68f98 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationBulkRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationBulkRequest.java @@ -8,9 +8,9 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ * StockReconciliationRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationBulkResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationBulkResponse.java index ccc34392562..caea2ead604 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationBulkResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationBulkResponse.java @@ -8,8 +8,8 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -17,7 +17,7 @@ * StockReconciliationResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationRequest.java index d5794fad6ca..58845227bf2 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationRequest.java @@ -8,14 +8,14 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * StockReconciliationRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationResponse.java index f05d79ef8db..409223db9ca 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationResponse.java @@ -8,14 +8,14 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * StockReconciliationResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationSearch.java index d6774d60c72..64dd63ac5b9 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationSearch.java @@ -1,34 +1,28 @@ package org.egov.common.models.stock; import java.util.List; -import javax.validation.Valid; 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 lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineSearchModel; import org.springframework.validation.annotation.Validated; /** * StockReconciliationSearch */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class StockReconciliationSearch { - @JsonProperty("id") - @Valid - private List id = null; - - @JsonProperty("clientReferenceId") - private List clientReferenceId = null; +public class StockReconciliationSearch extends EgovOfflineSearchModel { @JsonProperty("facilityId") private List facilityId = null; diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationSearchRequest.java index 66d89a4efbd..6b307ce2d11 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockReconciliationSearchRequest.java @@ -8,14 +8,14 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * StockReconciliationSearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockRequest.java index 8e2e6b1d9fa..10b7f7fde07 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockRequest.java @@ -8,14 +8,14 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * StockRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockResponse.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockResponse.java index ef0504b3098..1cea9fc0185 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockResponse.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockResponse.java @@ -8,14 +8,14 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * StockResponse */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockSearch.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockSearch.java index 44466d32ea4..5e03a4daaf1 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockSearch.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockSearch.java @@ -1,35 +1,30 @@ package org.egov.common.models.stock; import java.util.List; -import javax.validation.Valid; -import javax.validation.constraints.Size; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.egov.common.models.core.EgovOfflineSearchModel; import org.springframework.validation.annotation.Validated; /** * StockSearch */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @JsonIgnoreProperties(ignoreUnknown = true) -public class StockSearch { - - @JsonProperty("id") - private List id = null; - - @JsonProperty("clientReferenceId") - private List clientReferenceId = null; +public class StockSearch extends EgovOfflineSearchModel { @JsonProperty("facilityId") @Size(min=2, max=64) diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockSearchRequest.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockSearchRequest.java index 3a072809362..9f73cb1e00e 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockSearchRequest.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/StockSearchRequest.java @@ -8,14 +8,14 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * StockSearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/TenantRole.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/TenantRole.java index e95bbfa9560..261bcb9d725 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/TenantRole.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/TenantRole.java @@ -9,8 +9,8 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ */ @ApiModel(description = "User role carries the tenant related role information for the user. A user can have multiple roles per tenant based on the need of the tenant. A user may also have multiple roles for multiple tenants.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/UserInfo.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/UserInfo.java index 2b8b0fb9b52..85edeeef0aa 100644 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/UserInfo.java +++ b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/stock/UserInfo.java @@ -9,8 +9,8 @@ import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ */ @ApiModel(description = "This is acting ID token of the authenticated user on the server. Any value provided by the clients will be ignored and actual user based on authtoken will be used on the server.") @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2023-02-08T11:49:06.320+05:30") + @Data @NoArgsConstructor diff --git a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/transformer/upstream/Boundary.java b/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/transformer/upstream/Boundary.java deleted file mode 100644 index cf23efe5f82..00000000000 --- a/health-services/libraries/health-services-models/src/main/java/org/egov/common/models/transformer/upstream/Boundary.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.egov.common.models.transformer.upstream; - -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; -import java.util.ArrayList; -import java.util.List; - -/** -* Boundary -*/ -@Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -@JsonIgnoreProperties(ignoreUnknown = true) -public class Boundary { - - @JsonProperty("code") - @NotNull - private String code = null; - - @JsonProperty("name") - private String name = null; - - @JsonProperty("label") - private String label = null; - - @JsonProperty("latitude") - private String latitude = null; - - @JsonProperty("longitude") - private String longitude = null; - - @JsonProperty("children") - @Valid - private List children = null; - - @JsonProperty("materializedPath") - private String materializedPath = null; - - public Boundary addChildrenItem(Boundary childrenItem) { - if (this.children == null) { - this.children = new ArrayList<>(); - } - this.children.add(childrenItem); - return this; - } - -} - diff --git a/health-services/product/pom.xml b/health-services/product/pom.xml index c5e342f04d3..ceaddfe4f4b 100644 --- a/health-services/product/pom.xml +++ b/health-services/product/pom.xml @@ -75,12 +75,12 @@ org.egov.common health-services-common - 1.0.7-SNAPSHOT + 1.0.16-SNAPSHOT org.egov.common health-services-models - 1.0.15-SNAPSHOT + 1.0.20-SNAPSHOT compile diff --git a/health-services/product/src/main/java/org/egov/product/repository/rowmapper/ProductRowMapper.java b/health-services/product/src/main/java/org/egov/product/repository/rowmapper/ProductRowMapper.java index 24c06d1721a..98a34d40cc3 100644 --- a/health-services/product/src/main/java/org/egov/product/repository/rowmapper/ProductRowMapper.java +++ b/health-services/product/src/main/java/org/egov/product/repository/rowmapper/ProductRowMapper.java @@ -1,16 +1,16 @@ package org.egov.product.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.product.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.product.Product; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Component; -import java.sql.ResultSet; -import java.sql.SQLException; - @Component public class ProductRowMapper implements RowMapper { private final ObjectMapper objectMapper = new ObjectMapper(); diff --git a/health-services/product/src/main/java/org/egov/product/repository/rowmapper/ProductVariantRowMapper.java b/health-services/product/src/main/java/org/egov/product/repository/rowmapper/ProductVariantRowMapper.java index 01b1d4d1174..b8897f9a999 100644 --- a/health-services/product/src/main/java/org/egov/product/repository/rowmapper/ProductVariantRowMapper.java +++ b/health-services/product/src/main/java/org/egov/product/repository/rowmapper/ProductVariantRowMapper.java @@ -3,7 +3,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import digit.models.coremodels.AuditDetails; -import org.egov.common.models.product.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.product.ProductVariant; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Component; diff --git a/health-services/product/src/main/java/org/egov/product/web/controllers/ProductApiController.java b/health-services/product/src/main/java/org/egov/product/web/controllers/ProductApiController.java index 2f7b8ccfae2..305507edb07 100644 --- a/health-services/product/src/main/java/org/egov/product/web/controllers/ProductApiController.java +++ b/health-services/product/src/main/java/org/egov/product/web/controllers/ProductApiController.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.ApiParam; +import org.egov.common.models.core.URLParams; import org.egov.common.models.product.Product; import org.egov.common.models.product.ProductRequest; import org.egov.common.models.product.ProductResponse; @@ -21,17 +22,13 @@ 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-02T16:45:24.641+05:30") @@ -74,15 +71,10 @@ public ResponseEntity productV1CreatePost(@ApiParam(value = "Ca } @RequestMapping(value = "/v1/_search", method = RequestMethod.POST) - public ResponseEntity productV1SearchPost(@ApiParam(value = "Capture details of Product.", required = true) @Valid @RequestBody ProductSearchRequest productSearchRequest, - @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 @Size(min = 2, max = 1000) @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 products = productService.search(productSearchRequest, limit, offset, tenantId, - lastChangedSince, includeDeleted); + public ResponseEntity productV1SearchPost(@ApiParam(value = "Capture details of Product.", required = true) @Valid @RequestBody ProductSearchRequest productSearchRequest) throws Exception { + + List products = productService.search(productSearchRequest, searchCriteria.getLimit(), searchCriteria.getOffset(), + searchCriteria.getTenantId(), searchCriteria.getLastChangedSince(), searchCriteria.getIncludeDeleted()); ProductResponse productResponse = ProductResponse.builder() .product(products) .responseInfo(ResponseInfoFactory.createResponseInfo(productSearchRequest.getRequestInfo(), true)) @@ -127,13 +119,10 @@ public ResponseEntity productVariantV1CreatePost(@ApiPar @RequestMapping(value = "/variant/v1/_search", method = RequestMethod.POST) public ResponseEntity productVariantV1SearchPost(@ApiParam(value = "Capture details of Product variant.", required = true) @Valid @RequestBody ProductVariantSearchRequest productVariantSearchRequest, - @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 @Size(min = 2, max = 1000) @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 productVariants = productVariantService.search(productVariantSearchRequest, limit, offset, - tenantId, lastChangedSince, includeDeleted); + ) throws Exception { + List productVariants = productVariantService.search(productVariantSearchRequest, + searchCriteria.getLimit(), searchCriteria.getOffset(), searchCriteria.getTenantId(), + searchCriteria.getLastChangedSince(), searchCriteria.getIncludeDeleted()); ProductVariantResponse productVariantResponse = ProductVariantResponse.builder() .productVariant(productVariants) .responseInfo(ResponseInfoFactory diff --git a/health-services/product/src/test/java/org/egov/product/web/controllers/ProductVariantApiControllerTest.java b/health-services/product/src/test/java/org/egov/product/web/controllers/ProductVariantApiControllerTest.java index 14412802306..73e84bfdcba 100644 --- a/health-services/product/src/test/java/org/egov/product/web/controllers/ProductVariantApiControllerTest.java +++ b/health-services/product/src/test/java/org/egov/product/web/controllers/ProductVariantApiControllerTest.java @@ -26,7 +26,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/health-services/project/CHANGELOG.md b/health-services/project/CHANGELOG.md index 1062c4a055b..3029b871000 100644 --- a/health-services/project/CHANGELOG.md +++ b/health-services/project/CHANGELOG.md @@ -7,6 +7,9 @@ All notable changes to this module will be documented in this file. - In ProjectBeneficiarySearch, projectId, beneficiaryId updated to accept list of search entities instead of single entity - In ProjectResourceSearch, projectId updated to accept list of search entities instead of single entity +## 1.1.3 - 2024-05-10 +- Integrated Boundary v2 functionality + ## 1.1.2 - 2024-02-26 - Implemented validation for updating project start date and end date. - Added numberOfSessions field in additional details for attendance registry. diff --git a/health-services/project/pom.xml b/health-services/project/pom.xml index bc03bb4ea50..aa4fa28cf68 100644 --- a/health-services/project/pom.xml +++ b/health-services/project/pom.xml @@ -5,16 +5,17 @@ project jar project - 1.1.2 + 1.1.3 - 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,12 +45,12 @@ org.egov.common health-services-common - 1.0.8-SNAPSHOT + 1.0.16-SNAPSHOT org.egov.common health-services-models - 1.0.19-dev3-SNAPSHOT + 1.0.20-SNAPSHOT compile @@ -69,42 +70,49 @@ 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 1.5.18 - - - org.egov.services - digit-models - 1.0.0-SNAPSHOT - org.projectlombok lombok + ${lombok.version} true com.fasterxml.jackson.datatype jackson-datatype-jsr310 - - javax.validation - validation-api + commons-io + commons-io + 2.13.0 + test diff --git a/health-services/project/src/main/java/org/egov/project/config/MainConfiguration.java b/health-services/project/src/main/java/org/egov/project/config/MainConfiguration.java index 216b4abcd54..b9bad965c70 100644 --- a/health-services/project/src/main/java/org/egov/project/config/MainConfiguration.java +++ b/health-services/project/src/main/java/org/egov/project/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/project/src/main/java/org/egov/project/repository/ProjectBeneficiaryRepository.java b/health-services/project/src/main/java/org/egov/project/repository/ProjectBeneficiaryRepository.java index df29b9869c0..3b879371d52 100644 --- a/health-services/project/src/main/java/org/egov/project/repository/ProjectBeneficiaryRepository.java +++ b/health-services/project/src/main/java/org/egov/project/repository/ProjectBeneficiaryRepository.java @@ -1,17 +1,32 @@ package org.egov.project.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.project.ProjectBeneficiary; import org.egov.common.producer.Producer; import org.egov.project.repository.rowmapper.ProjectBeneficiaryRowMapper; +import org.egov.common.models.project.ProjectBeneficiarySearch; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.stereotype.Repository; +import org.springframework.util.ReflectionUtils; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.Optional; +import java.util.stream.Collectors; + +import static org.egov.common.utils.CommonUtils.constructTotalCountCTEAndReturnResult; +import static org.egov.common.utils.CommonUtils.getIdMethod; @Repository @Slf4j @@ -24,5 +39,81 @@ public ProjectBeneficiaryRepository(Producer producer, NamedParameterJdbcTemplat super(producer, namedParameterJdbcTemplate, redisTemplate, selectQueryBuilder, projectBeneficiaryRowMapper, Optional.of("project_beneficiary")); } + + public SearchResponse find(ProjectBeneficiarySearch householdMemberSearch, + Integer limit, + Integer offset, + String tenantId, + Long lastChangedSince, + Boolean includeDeleted) { + + Map paramsMap = new HashMap<>(); + StringBuilder queryBuilder = new StringBuilder(); + + String query = "SELECT * FROM project_beneficiary "; + + 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 projectBeneficiaries = this.namedParameterJdbcTemplate.query(queryBuilder.toString(), paramsMap, this.rowMapper); + + return SearchResponse.builder().totalCount(totalCount).response(projectBeneficiaries).build(); + } + + public SearchResponse findById(List ids, String columnName, Boolean includeDeleted) { + List objFound = findInCache(ids).stream() + .filter(entity -> entity.getIsDeleted().equals(includeDeleted)) + .collect(Collectors.toList()); + if (!objFound.isEmpty()) { + Method idMethod = getIdMethod(objFound, columnName); + ids.removeAll(objFound.stream() + .map(obj -> (String) ReflectionUtils.invokeMethod(idMethod, obj)) + .collect(Collectors.toList())); + if (ids.isEmpty()) { + log.info("all objects were found in the cache, returning objects"); + return SearchResponse.builder().response(objFound).build(); + } + } + + String query = String.format("SELECT * FROM project_beneficiary where %s IN (:ids) AND isDeleted = false", columnName); + if (null != includeDeleted && includeDeleted) { + query = String.format("SELECT * FROM project_beneficiary WHERE %s IN (:ids)", columnName); + } + Map paramMap = new HashMap(); + paramMap.put("ids", ids); + + objFound.addAll(this.namedParameterJdbcTemplate.query(query, paramMap, this.rowMapper)); + putInCache(objFound); + log.info("returning objects from the database"); + return SearchResponse.builder().response(objFound).build(); + } } diff --git a/health-services/project/src/main/java/org/egov/project/repository/ProjectRepository.java b/health-services/project/src/main/java/org/egov/project/repository/ProjectRepository.java index ec885f723b1..ae7b4c9994b 100644 --- a/health-services/project/src/main/java/org/egov/project/repository/ProjectRepository.java +++ b/health-services/project/src/main/java/org/egov/project/repository/ProjectRepository.java @@ -1,12 +1,16 @@ package org.egov.project.repository; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.egov.common.data.query.builder.SelectQueryBuilder; import org.egov.common.data.repository.GenericRepository; +import org.egov.common.models.core.ProjectSearchURLParams; import org.egov.common.models.project.Document; import org.egov.common.models.project.Project; import org.egov.common.models.project.ProjectRequest; +import org.egov.common.models.project.ProjectSearch; import org.egov.common.models.project.Target; import org.egov.common.producer.Producer; import org.egov.project.repository.querybuilder.DocumentQueryBuilder; @@ -101,6 +105,51 @@ public List getProjects(ProjectRequest project, Integer limit, Integer return buildProjectSearchResult(projects, targets, documents, ancestors, descendants); } + public List getProjects(@NotNull @Valid ProjectSearch projectSearch, @Valid ProjectSearchURLParams urlParams) { + + //Fetch Projects based on search criteria + List projects = getProjectsBasedOnV2SearchCriteria(projectSearch, urlParams); + + Set projectIds = projects.stream().map(Project :: getId).collect(Collectors.toSet()); + + List ancestors = null; + List descendants = null; + //Get Project ancestors if includeAncestors flag is true + if (urlParams.getIncludeAncestors()) { + ancestors = getProjectAncestors(projects); + if (ancestors != null && !ancestors.isEmpty()) { + List ancestorProjectIds = ancestors.stream().map(Project :: getId).collect(Collectors.toList()); + projectIds.addAll(ancestorProjectIds); + } + } + //Get Project descendants if includeDescendants flag is true + if (urlParams.getIncludeDescendants()) { + descendants = getProjectDescendants(projects); + if (descendants != null && !descendants.isEmpty()) { + List descendantsProjectIds = descendants.stream().map(Project :: getId).collect(Collectors.toList()); + projectIds.addAll(descendantsProjectIds); + } + } + + //Fetch targets based on Project Ids + List targets = getTargetsBasedOnProjectIds(projectIds); + + //Fetch documents based on Project Ids + List documents = getDocumentsBasedOnProjectIds(projectIds); + + //Construct Project Objects with fetched projects, targets and documents using Project id + return buildProjectSearchResult(projects, targets, documents, ancestors, descendants); + } + + private List getProjectsBasedOnV2SearchCriteria(@NotNull @Valid ProjectSearch projectSearch, ProjectSearchURLParams urlParams) { + List preparedStmtList = new ArrayList<>(); + String query = queryBuilder.getProjectSearchQuery(projectSearch, urlParams, preparedStmtList, Boolean.FALSE); + List projects = jdbcTemplate.query(query, addressRowMapper, preparedStmtList.toArray()); + + log.info("Fetched project list based on given search criteria"); + return projects; + } + /* Fetch Projects based on search criteria */ private List getProjectsBasedOnSearchCriteria(List projectsRequest, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted, Long createdFrom, Long createdTo) { List preparedStmtList = new ArrayList<>(); @@ -301,4 +350,21 @@ public Integer getProjectCount(ProjectRequest project, String tenantId, Long las log.info("Total project count is : " + count); return count; } + + /** + * Get the count of projects based on the given search criteria (using dynamic + * query build at the run time) + * @return + */ + public Integer getProjectCount(ProjectSearch projectSearch, ProjectSearchURLParams urlParams) { + List preparedStatement = new ArrayList<>(); + String query = queryBuilder.getSearchCountQueryString(projectSearch, urlParams, preparedStatement); + + if (query == null) + return 0; + + Integer count = jdbcTemplate.queryForObject(query, preparedStatement.toArray(), Integer.class); + log.info("Total project count is : " + count); + return count; + } } \ No newline at end of file diff --git a/health-services/project/src/main/java/org/egov/project/repository/ProjectTaskRepository.java b/health-services/project/src/main/java/org/egov/project/repository/ProjectTaskRepository.java index 76a4f8e87cc..d748602b7a4 100644 --- a/health-services/project/src/main/java/org/egov/project/repository/ProjectTaskRepository.java +++ b/health-services/project/src/main/java/org/egov/project/repository/ProjectTaskRepository.java @@ -1,15 +1,25 @@ package org.egov.project.repository; +import java.lang.reflect.Method; +import java.util.ArrayList; +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.models.core.SearchResponse; import org.egov.common.models.project.Task; import org.egov.common.models.project.TaskResource; import org.egov.common.models.project.TaskSearch; import org.egov.common.producer.Producer; +import org.egov.common.utils.CommonUtils; import org.egov.project.repository.rowmapper.ProjectTaskRowMapper; import org.egov.project.repository.rowmapper.TaskResourceRowMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -18,14 +28,6 @@ import org.springframework.stereotype.Repository; import org.springframework.util.ReflectionUtils; -import java.lang.reflect.Method; -import java.util.ArrayList; -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.getIdList; import static org.egov.common.utils.CommonUtils.getIdMethod; @@ -43,7 +45,7 @@ protected ProjectTaskRepository(Producer producer, NamedParameterJdbcTemplate na super(producer, namedParameterJdbcTemplate, redisTemplate, selectQueryBuilder, rowMapper, Optional.of("project_task")); } - public List find(TaskSearch searchObject, Integer limit, Integer offset, String tenantId, + public SearchResponse find(TaskSearch searchObject, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted) throws QueryBuilderException { String query = "SELECT *, a.id as aid,a.tenantid as atenantid, a.clientreferenceid as aclientreferenceid FROM project_task pt LEFT JOIN address a ON pt.addressid = a.id"; Map paramsMap = new HashMap<>(); @@ -61,15 +63,20 @@ public List find(TaskSearch searchObject, Integer limit, Integer offset, S if (lastChangedSince != null) { query = query + "and lastModifiedTime>=:lastModifiedTime "; } - query = query + "ORDER BY pt.id ASC LIMIT :limit OFFSET :offset"; paramsMap.put("tenantId", tenantId); paramsMap.put("isDeleted", includeDeleted); paramsMap.put("lastModifiedTime", lastChangedSince); + + Long totalCount = CommonUtils.constructTotalCountCTEAndReturnResult(query, paramsMap, this.namedParameterJdbcTemplate); + + query = query + "ORDER BY pt.id ASC LIMIT :limit OFFSET :offset"; paramsMap.put("limit", limit); paramsMap.put("offset", offset); + List taskList = this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper); fetchAndSetTaskResource(taskList); - return taskList; + + return SearchResponse.builder().response(taskList).totalCount(totalCount).build(); } private void fetchAndSetTaskResource(List taskList) { @@ -97,7 +104,7 @@ private void fetchAndSetTaskResource(List taskList) { taskList.forEach(task -> task.setResources(idToObjMap.get(task.getId()))); } - public List 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()); @@ -107,7 +114,7 @@ public List findById(List ids, String columnName, Boolean includeD .map(obj -> (String) ReflectionUtils.invokeMethod(idMethod, obj)) .collect(Collectors.toList())); if (ids.isEmpty()) { - return objFound; + return SearchResponse.builder().response(objFound).build(); } } @@ -122,7 +129,7 @@ public List findById(List ids, String columnName, Boolean includeD fetchAndSetTaskResource(taskList); objFound.addAll(taskList); putInCache(objFound); - return objFound; + return SearchResponse.builder().response(objFound).build(); } } diff --git a/health-services/project/src/main/java/org/egov/project/repository/querybuilder/ProjectAddressQueryBuilder.java b/health-services/project/src/main/java/org/egov/project/repository/querybuilder/ProjectAddressQueryBuilder.java index eb623f877f0..466c3549af4 100644 --- a/health-services/project/src/main/java/org/egov/project/repository/querybuilder/ProjectAddressQueryBuilder.java +++ b/health-services/project/src/main/java/org/egov/project/repository/querybuilder/ProjectAddressQueryBuilder.java @@ -1,14 +1,19 @@ package org.egov.project.repository.querybuilder; +import java.util.Collection; +import java.util.List; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.egov.common.models.core.ProjectSearchURLParams; import org.egov.common.models.project.Project; +import org.egov.common.models.project.ProjectSearch; import org.egov.project.config.ProjectConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; - -import java.util.Collection; -import java.util.List; +import org.springframework.util.CollectionUtils; import static org.egov.project.util.ProjectConstants.DOT; @@ -146,6 +151,129 @@ public String getProjectSearchQuery(List projects, Integer limit, Integ return addPaginationWrapper(queryBuilder.toString(), preparedStmtList, limit, offset); } + + /** + * Constructs the SQL query string for searching projects based on the given parameters. + * + * @param projectSearch The search criteria provided in the request body. + * @param urlParams The search criteria provided as URL parameters. + * @param preparedStmtList The list to which prepared statement parameters will be added. + * @param isCountQuery Boolean flag indicating if the query is for counting records. + * @return The constructed SQL query string. + */ + public String getProjectSearchQuery(@NotNull @Valid ProjectSearch projectSearch, ProjectSearchURLParams urlParams, List preparedStmtList, Boolean isCountQuery) { + // Use a ternary operator to select between PROJECTS_COUNT_QUERY and FETCH_PROJECT_ADDRESS_QUERY based on isCountQuery flag. + String query = isCountQuery ? PROJECTS_COUNT_QUERY : FETCH_PROJECT_ADDRESS_QUERY; + StringBuilder queryBuilder = new StringBuilder(query); + + // Check if tenant ID is provided in URL parameters + if (StringUtils.isNotBlank(urlParams.getTenantId())) { + addClauseIfRequired(preparedStmtList, queryBuilder); + if (!urlParams.getTenantId().contains(DOT)) { + // State level tenant ID: use LIKE for partial matching + log.info("State level tenant"); + queryBuilder.append(" prj.tenantId like ? "); + preparedStmtList.add(urlParams.getTenantId() + '%'); + } else { + // City level tenant ID: use exact match + log.info("City level tenant"); + queryBuilder.append(" prj.tenantId=? "); + preparedStmtList.add(urlParams.getTenantId()); + } + } + + // Check if project IDs are provided + if (!CollectionUtils.isEmpty(projectSearch.getId())) { + addClauseIfRequired(preparedStmtList, queryBuilder); + queryBuilder.append(" prj.id IN (").append(createQuery(projectSearch.getId())).append(")"); + addToPreparedStatement(preparedStmtList, projectSearch.getId()); + } + + // Check if reference ID is provided + if (StringUtils.isNotBlank(projectSearch.getReferenceId())) { + addClauseIfRequired(preparedStmtList, queryBuilder); + queryBuilder.append(" prj.referenceId =? "); + preparedStmtList.add(projectSearch.getReferenceId()); + } + + // Check if project name is provided + if (StringUtils.isNotBlank(projectSearch.getName())) { + addClauseIfRequired(preparedStmtList, queryBuilder); + queryBuilder.append(" prj.name LIKE ? "); + preparedStmtList.add('%' + projectSearch.getName() + '%'); + } + + // Check if project type ID is provided + if (StringUtils.isNotBlank(projectSearch.getProjectTypeId())) { + addClauseIfRequired(preparedStmtList, queryBuilder); + queryBuilder.append(" prj.projectType=? "); + preparedStmtList.add(projectSearch.getProjectTypeId()); + } + + // Check if boundary code is provided + if (projectSearch.getBoundaryCode() != null && StringUtils.isNotBlank(projectSearch.getBoundaryCode())) { + addClauseIfRequired(preparedStmtList, queryBuilder); + queryBuilder.append(" addr.boundary=? "); + preparedStmtList.add(projectSearch.getBoundaryCode()); + } + + // Check if sub-project type ID is provided + if (StringUtils.isNotBlank(projectSearch.getSubProjectTypeId())) { + addClauseIfRequired(preparedStmtList, queryBuilder); + queryBuilder.append(" prj.projectSubtype=? "); + preparedStmtList.add(projectSearch.getSubProjectTypeId()); + } + + // Check if start date is provided + if (projectSearch.getStartDate() != null && projectSearch.getStartDate() != 0) { + addClauseIfRequired(preparedStmtList, queryBuilder); + queryBuilder.append(" prj.startDate >= ? "); + preparedStmtList.add(projectSearch.getStartDate()); + } + + // Check if end date is provided + if (projectSearch.getEndDate() != null && projectSearch.getEndDate() != 0) { + addClauseIfRequired(preparedStmtList, queryBuilder); + queryBuilder.append(" prj.endDate <= ? "); + preparedStmtList.add(projectSearch.getEndDate()); + } + + // Check if lastChangedSince is provided + if (urlParams.getLastChangedSince() != null && urlParams.getLastChangedSince() != 0) { + addClauseIfRequired(preparedStmtList, queryBuilder); + queryBuilder.append(" ( prj.lastModifiedTime >= ? )"); + preparedStmtList.add(urlParams.getLastChangedSince()); + } + + // Check if createdFrom date is provided + if (urlParams.getCreatedFrom() != null && urlParams.getCreatedFrom() != 0) { + addClauseIfRequired(preparedStmtList, queryBuilder); + queryBuilder.append(" prj.createdTime >= ? "); + preparedStmtList.add(urlParams.getCreatedFrom()); + } + + // Check if createdTo date is provided + if (urlParams.getCreatedTo() != null && urlParams.getCreatedTo() != 0) { + addClauseIfRequired(preparedStmtList, queryBuilder); + queryBuilder.append(" prj.createdTime <= ? "); + preparedStmtList.add(urlParams.getCreatedTo()); + } + + // Add clause if includeDeleted is true in request parameter + addIsDeletedCondition(preparedStmtList, queryBuilder, urlParams.getIncludeDeleted()); + + // Close the query with a closing bracket + queryBuilder.append(" )"); + + // Return query if it's a count query + if (isCountQuery) { + return queryBuilder.toString(); + } + + // Wrap constructed SQL query with pagination criteria + return addPaginationWrapper(queryBuilder.toString(), preparedStmtList, urlParams.getLimit(), urlParams.getOffset()); + } + /* Constructs project search query based on Project Ids */ public String getProjectSearchQueryBasedOnIds(List projectIds, List preparedStmtList) { StringBuilder queryBuilder = new StringBuilder(FETCH_PROJECT_ADDRESS_QUERY); @@ -244,4 +372,9 @@ public String getSearchCountQueryString(List projects, String tenantId, return query; } + /* Returns query to get total projects count based on project search params */ + public String getSearchCountQueryString(ProjectSearch projectSearch, ProjectSearchURLParams urlParams, List preparedStatement) { + String query = getProjectSearchQuery(projectSearch, urlParams, preparedStatement, Boolean.TRUE); + return query; + } } diff --git a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java index 880518fc0d7..c79c91ed161 100644 --- a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java +++ b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectBeneficiaryRowMapper.java @@ -3,7 +3,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import digit.models.coremodels.AuditDetails; -import org.egov.common.models.project.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.project.ProjectBeneficiary; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Component; diff --git a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectFacilityRowMapper.java b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectFacilityRowMapper.java index bd79efb6583..d6433f36db6 100644 --- a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectFacilityRowMapper.java +++ b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectFacilityRowMapper.java @@ -1,16 +1,16 @@ package org.egov.project.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.project.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.project.ProjectFacility; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Component; -import java.sql.ResultSet; -import java.sql.SQLException; - @Component public class ProjectFacilityRowMapper implements RowMapper { diff --git a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectStaffRowMapper.java b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectStaffRowMapper.java index 5403b3a00cc..a0ff3d24bcf 100644 --- a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectStaffRowMapper.java +++ b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectStaffRowMapper.java @@ -1,16 +1,16 @@ package org.egov.project.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.project.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.project.ProjectStaff; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Component; -import java.sql.ResultSet; -import java.sql.SQLException; - @Component public class ProjectStaffRowMapper implements RowMapper { diff --git a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectTaskRowMapper.java b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectTaskRowMapper.java index 8d064981b7c..caafec9a8e1 100644 --- a/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectTaskRowMapper.java +++ b/health-services/project/src/main/java/org/egov/project/repository/rowmapper/ProjectTaskRowMapper.java @@ -3,10 +3,10 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import digit.models.coremodels.AuditDetails; -import org.egov.common.models.project.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.project.Address; import org.egov.common.models.project.AddressType; -import org.egov.common.models.project.Boundary; +import org.egov.common.models.core.Boundary; import org.egov.common.models.project.Task; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Component; diff --git a/health-services/project/src/main/java/org/egov/project/service/ProjectBeneficiaryService.java b/health-services/project/src/main/java/org/egov/project/service/ProjectBeneficiaryService.java index 5c8b5ea8862..21e60b12be7 100644 --- a/health-services/project/src/main/java/org/egov/project/service/ProjectBeneficiaryService.java +++ b/health-services/project/src/main/java/org/egov/project/service/ProjectBeneficiaryService.java @@ -1,10 +1,18 @@ package org.egov.project.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.ds.Tuple; import org.egov.common.models.ErrorDetails; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.project.BeneficiaryBulkRequest; import org.egov.common.models.project.BeneficiaryRequest; +import org.egov.common.models.project.BeneficiarySearchRequest; import org.egov.common.models.project.ProjectBeneficiary; import org.egov.common.service.IdGenService; import org.egov.common.utils.CommonUtils; @@ -13,6 +21,7 @@ import org.egov.project.repository.ProjectBeneficiaryRepository; import org.egov.project.service.enrichment.ProjectBeneficiaryEnrichmentService; import org.egov.project.validator.beneficiary.BeneficiaryValidator; +import org.egov.project.validator.beneficiary.PbExistentEntityValidator; import org.egov.project.validator.beneficiary.PbIsDeletedValidator; import org.egov.project.validator.beneficiary.PbNonExistentEntityValidator; import org.egov.project.validator.beneficiary.PbNullIdValidator; @@ -22,18 +31,11 @@ import org.egov.project.validator.beneficiary.PbUniqueTagsValidator; import org.egov.project.validator.beneficiary.PbVoucherTagUniqueForCreateValidator; import org.egov.project.validator.beneficiary.PbVoucherTagUniqueForUpdateValidator; -import org.egov.project.web.models.BeneficiarySearchRequest; import org.egov.tracer.model.CustomException; import org.springframework.beans.factory.annotation.Autowired; 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; @@ -75,6 +77,7 @@ public class ProjectBeneficiaryService { private final Predicate> isApplicableForCreate = validator -> validator.getClass().equals(PbProjectIdValidator.class) + || validator.getClass().equals(PbExistentEntityValidator.class) || validator.getClass().equals(BeneficiaryValidator.class) || validator.getClass().equals(PbUniqueTagsValidator.class) || validator.getClass().equals(PbVoucherTagUniqueForCreateValidator.class); @@ -166,12 +169,12 @@ public List update(BeneficiaryBulkRequest beneficiaryRequest return validProjectBeneficiaries; } - public List search(BeneficiarySearchRequest beneficiarySearchRequest, - Integer limit, - Integer offset, - String tenantId, - Long lastChangedSince, - Boolean includeDeleted) throws Exception { + public SearchResponse search(BeneficiarySearchRequest beneficiarySearchRequest, + Integer limit, + Integer offset, + String tenantId, + Long lastChangedSince, + Boolean includeDeleted) throws Exception { log.info("received request to search project beneficiaries"); String idFieldName = getIdFieldName(beneficiarySearchRequest.getProjectBeneficiary()); if (isSearchByIdOnly(beneficiarySearchRequest.getProjectBeneficiary(), idFieldName)) { @@ -180,11 +183,17 @@ public List search(BeneficiarySearchRequest beneficiarySearc .singletonList(beneficiarySearchRequest.getProjectBeneficiary())), beneficiarySearchRequest.getProjectBeneficiary()); log.info("fetching project beneficiaries with ids: {}", ids); - return projectBeneficiaryRepository.findById(ids, includeDeleted, idFieldName).stream() + + SearchResponse searchResponse = projectBeneficiaryRepository.findById(ids, idFieldName, includeDeleted); + + List projectBeneficiaries = searchResponse.getResponse().stream() .filter(lastChangedSince(lastChangedSince)) .filter(havingTenantId(tenantId)) .filter(includeDeleted(includeDeleted)) .collect(Collectors.toList()); + searchResponse.setResponse(projectBeneficiaries); + + return searchResponse; } log.info("searching project beneficiaries using criteria"); return projectBeneficiaryRepository.find(beneficiarySearchRequest.getProjectBeneficiary(), diff --git a/health-services/project/src/main/java/org/egov/project/service/ProjectFacilityService.java b/health-services/project/src/main/java/org/egov/project/service/ProjectFacilityService.java index 9074b22bdf9..a7baaecf912 100644 --- a/health-services/project/src/main/java/org/egov/project/service/ProjectFacilityService.java +++ b/health-services/project/src/main/java/org/egov/project/service/ProjectFacilityService.java @@ -6,6 +6,7 @@ import org.egov.common.models.project.ProjectFacility; import org.egov.common.models.project.ProjectFacilityBulkRequest; import org.egov.common.models.project.ProjectFacilityRequest; +import org.egov.common.models.project.ProjectFacilitySearchRequest; import org.egov.common.service.IdGenService; import org.egov.common.service.UserService; import org.egov.common.utils.CommonUtils; @@ -21,7 +22,6 @@ import org.egov.project.validator.facility.PfRowVersionValidator; import org.egov.project.validator.facility.PfUniqueCombinationValidator; import org.egov.project.validator.facility.PfUniqueEntityValidator; -import org.egov.project.web.models.ProjectFacilitySearchRequest; import org.egov.tracer.model.CustomException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/health-services/project/src/main/java/org/egov/project/service/ProjectResourceService.java b/health-services/project/src/main/java/org/egov/project/service/ProjectResourceService.java index 9fc3ec389db..c99dc41448f 100644 --- a/health-services/project/src/main/java/org/egov/project/service/ProjectResourceService.java +++ b/health-services/project/src/main/java/org/egov/project/service/ProjectResourceService.java @@ -19,7 +19,7 @@ import org.egov.project.validator.resource.PrRowVersionValidator; import org.egov.project.validator.resource.PrUniqueCombinationValidator; import org.egov.project.validator.resource.PrUniqueEntityValidator; -import org.egov.project.web.models.ProjectResourceSearchRequest; +import org.egov.common.models.project.ProjectResourceSearchRequest; import org.springframework.stereotype.Service; import org.springframework.util.ReflectionUtils; diff --git a/health-services/project/src/main/java/org/egov/project/service/ProjectService.java b/health-services/project/src/main/java/org/egov/project/service/ProjectService.java index 73be7441812..f0dd5a2645b 100644 --- a/health-services/project/src/main/java/org/egov/project/service/ProjectService.java +++ b/health-services/project/src/main/java/org/egov/project/service/ProjectService.java @@ -1,10 +1,13 @@ package org.egov.project.service; +import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.egov.common.contract.request.RequestInfo; +import org.egov.common.models.core.ProjectSearchURLParams; import org.egov.common.models.project.Project; import org.egov.common.models.project.ProjectRequest; +import org.egov.common.models.project.ProjectSearchRequest; import org.egov.common.producer.Producer; import org.egov.project.config.ProjectConfiguration; import org.egov.project.repository.ProjectRepository; @@ -64,12 +67,39 @@ public ProjectRequest createProject(ProjectRequest projectRequest) { return projectRequest; } - public List searchProject(ProjectRequest project, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted, Boolean includeAncestors, Boolean includeDescendants, Long createdFrom, Long createdTo) { + public List searchProject( + ProjectRequest project, + Integer limit, + Integer offset, + String tenantId, + Long lastChangedSince, + Boolean includeDeleted, + Boolean includeAncestors, + Boolean includeDescendants, + Long createdFrom, + Long createdTo + ) { projectValidator.validateSearchProjectRequest(project, limit, offset, tenantId, createdFrom, createdTo); - List projects = projectRepository.getProjects(project, limit, offset, tenantId, lastChangedSince, includeDeleted, includeAncestors, includeDescendants, createdFrom, createdTo); + List projects = projectRepository.getProjects( + project, + limit, + offset, + tenantId, + lastChangedSince, + includeDeleted, + includeAncestors, + includeDescendants, + createdFrom, + createdTo + ); return projects; } + public List searchProject(ProjectSearchRequest projectSearchRequest, @Valid ProjectSearchURLParams urlParams) { + projectValidator.validateSearchV2ProjectRequest(projectSearchRequest, urlParams); + return projectRepository.getProjects(projectSearchRequest.getProject(), urlParams); + } + public ProjectRequest updateProject(ProjectRequest project) { projectValidator.validateUpdateProjectRequest(project); log.info("Update project request validated"); @@ -122,4 +152,9 @@ private ProjectRequest getSearchProjectRequest(List projects, RequestIn public Integer countAllProjects(ProjectRequest project, String tenantId, Long lastChangedSince, Boolean includeDeleted, Long createdFrom, Long createdTo) { return projectRepository.getProjectCount(project, tenantId, lastChangedSince, includeDeleted, createdFrom, createdTo); } + + + public Integer countAllProjects(ProjectSearchRequest projectSearchRequest, ProjectSearchURLParams urlParams) { + return projectRepository.getProjectCount(projectSearchRequest.getProject(), urlParams); + } } diff --git a/health-services/project/src/main/java/org/egov/project/service/ProjectStaffService.java b/health-services/project/src/main/java/org/egov/project/service/ProjectStaffService.java index c1eee50ec6c..82733608c54 100644 --- a/health-services/project/src/main/java/org/egov/project/service/ProjectStaffService.java +++ b/health-services/project/src/main/java/org/egov/project/service/ProjectStaffService.java @@ -22,7 +22,7 @@ import org.egov.project.validator.staff.PsUniqueCombinationValidator; import org.egov.project.validator.staff.PsUniqueEntityValidator; import org.egov.project.validator.staff.PsUserIdValidator; -import org.egov.project.web.models.ProjectStaffSearchRequest; +import org.egov.common.models.project.ProjectStaffSearchRequest; import org.egov.tracer.model.CustomException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/health-services/project/src/main/java/org/egov/project/service/ProjectTaskService.java b/health-services/project/src/main/java/org/egov/project/service/ProjectTaskService.java index 0f76c26f507..ff59ee82446 100644 --- a/health-services/project/src/main/java/org/egov/project/service/ProjectTaskService.java +++ b/health-services/project/src/main/java/org/egov/project/service/ProjectTaskService.java @@ -1,10 +1,17 @@ package org.egov.project.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.project.Task; import org.egov.common.models.project.TaskBulkRequest; import org.egov.common.models.project.TaskRequest; @@ -17,14 +24,15 @@ import org.egov.project.repository.ProjectRepository; import org.egov.project.repository.ProjectTaskRepository; import org.egov.project.service.enrichment.ProjectTaskEnrichmentService; +import org.egov.project.validator.task.PtExistentEntityValidator; import org.egov.project.validator.task.PtIsDeletedSubEntityValidator; import org.egov.project.validator.task.PtIsDeletedValidator; +import org.egov.project.validator.task.PtIsResouceEmptyValidator; import org.egov.project.validator.task.PtNonExistentEntityValidator; import org.egov.project.validator.task.PtNullIdValidator; import org.egov.project.validator.task.PtProductVariantIdValidator; import org.egov.project.validator.task.PtProjectBeneficiaryIdValidator; import org.egov.project.validator.task.PtProjectIdValidator; -import org.egov.project.validator.task.PtIsResouceEmptyValidator; import org.egov.project.validator.task.PtRowVersionValidator; import org.egov.project.validator.task.PtUniqueEntityValidator; import org.egov.project.validator.task.PtUniqueSubEntityValidator; @@ -32,12 +40,6 @@ 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; @@ -70,6 +72,7 @@ public class ProjectTaskService { private final Predicate> isApplicableForCreate = validator -> validator.getClass().equals(PtProjectIdValidator.class) + || validator.getClass().equals(PtExistentEntityValidator.class) || validator.getClass().equals(PtIsResouceEmptyValidator.class) || validator.getClass().equals(PtProjectBeneficiaryIdValidator.class) || validator.getClass().equals(PtProductVariantIdValidator.class); @@ -216,8 +219,8 @@ private Tuple, Map> validate(List(validTasks, errorDetailsMap); } - public List search(TaskSearch taskSearch, Integer limit, Integer offset, String tenantId, - Long lastChangedSince, Boolean includeDeleted) { + public SearchResponse search(TaskSearch taskSearch, Integer limit, Integer offset, String tenantId, + Long lastChangedSince, Boolean includeDeleted) { log.info("received request to search project task"); @@ -228,12 +231,13 @@ public List search(TaskSearch taskSearch, Integer limit, Integer offset, S .singletonList(taskSearch)), taskSearch); log.info("fetching project tasks with ids: {}", ids); - return projectTaskRepository.findById(ids, - idFieldName, includeDeleted).stream() + SearchResponse searchResponse = projectTaskRepository.findById(ids, + idFieldName, includeDeleted); + return SearchResponse.builder().response(searchResponse.getResponse().stream() .filter(lastChangedSince(lastChangedSince)) .filter(havingTenantId(tenantId)) .filter(includeDeleted(includeDeleted)) - .collect(Collectors.toList()); + .collect(Collectors.toList())).totalCount(searchResponse.getTotalCount()).build(); } try { diff --git a/health-services/project/src/main/java/org/egov/project/service/enrichment/ProjectBeneficiaryEnrichmentService.java b/health-services/project/src/main/java/org/egov/project/service/enrichment/ProjectBeneficiaryEnrichmentService.java index 703a2791b7f..880fef8d268 100644 --- a/health-services/project/src/main/java/org/egov/project/service/enrichment/ProjectBeneficiaryEnrichmentService.java +++ b/health-services/project/src/main/java/org/egov/project/service/enrichment/ProjectBeneficiaryEnrichmentService.java @@ -68,9 +68,9 @@ public void update(List validProjectBeneficiaries, List projectBeneficiaryIds = new ArrayList<>(projectBeneficiaryMap.keySet()); List existingProjectBeneficiaryIds = projectBeneficiaryRepository.findById( projectBeneficiaryIds, - false, - getIdFieldName(idMethod) - ); + getIdFieldName(idMethod), + false + ).getResponse(); log.info("updating Ids from existing entities"); enrichIdsFromExistingEntities(projectBeneficiaryMap, existingProjectBeneficiaryIds, idMethod); diff --git a/health-services/project/src/main/java/org/egov/project/util/BoundaryV2Util.java b/health-services/project/src/main/java/org/egov/project/util/BoundaryV2Util.java new file mode 100644 index 00000000000..bc235615157 --- /dev/null +++ b/health-services/project/src/main/java/org/egov/project/util/BoundaryV2Util.java @@ -0,0 +1,84 @@ +package org.egov.project.util; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import lombok.extern.slf4j.Slf4j; +import org.egov.common.contract.request.RequestInfo; +import org.egov.common.http.client.ServiceRequestClient; +import org.egov.common.models.core.Boundary; +import org.egov.project.web.models.boundary.BoundaryResponse; +import org.egov.tracer.model.CustomException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +/** + * Utility class to validate boundary details. + */ +@Component +@Slf4j +public class BoundaryV2Util { + + // Injecting boundary host value from configuration + @Value("${egov.boundary.host}") + private String boundaryHost; + + // Injecting boundary search URL value from configuration + @Value("${egov.boundary.search.url}") + private String boundarySearchUrl; + + @Autowired + private ServiceRequestClient serviceRequestClient; + + /** + * Validates boundary details against the egov-location service response. + * + * @param boundaryTypeBoundariesMap A map of boundary types with lists of boundary codes + * @param tenantId The tenant ID + * @param requestInfo Request information + * @param hierarchyTypeCode Hierarchy type code + */ + public void validateBoundaryDetails(Map> boundaryTypeBoundariesMap, String tenantId, + RequestInfo requestInfo, String hierarchyTypeCode) { + // Flatten the lists of boundary codes from the map values + List boundaries = boundaryTypeBoundariesMap.values().stream().flatMap(List::stream) + .collect(Collectors.toList()); + if(CollectionUtils.isEmpty(boundaries)) return; + try { + // Fetch boundary details from the service + log.debug("Fetching boundary details for tenantId: {}, boundaries: {}", tenantId, boundaries); + BoundaryResponse boundarySearchResponse = serviceRequestClient.fetchResult( + new StringBuilder(boundaryHost + + boundarySearchUrl + + "?limit=" + boundaries.size() + + "&offset=0&tenantId=" + tenantId + + "&codes=" + String.join(",", boundaries)), + requestInfo, + BoundaryResponse.class + ); + log.debug("Boundary details fetched successfully for tenantId: {}", tenantId); + + // Extract invalid boundary codes + List invalidBoundaryCodes = new ArrayList<>(boundaries); + invalidBoundaryCodes.removeAll(boundarySearchResponse.getBoundary().stream() + .map(Boundary::getCode) + .collect(Collectors.toList()) + ); + + // Throw exception if invalid boundary codes are found + if (!invalidBoundaryCodes.isEmpty()) { + log.error("The boundary data for the codes {} is not available.", invalidBoundaryCodes); + throw new CustomException("INVALID_BOUNDARY_DATA", "The boundary data for the code " + + invalidBoundaryCodes + " is not available"); + } + } 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()); + } + } +} diff --git a/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbExistentEntityValidator.java b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbExistentEntityValidator.java new file mode 100644 index 00000000000..73a622a6d1e --- /dev/null +++ b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbExistentEntityValidator.java @@ -0,0 +1,77 @@ +package org.egov.project.validator.beneficiary; + +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.project.BeneficiaryBulkRequest; +import org.egov.common.models.project.ProjectBeneficiary; +import org.egov.common.models.project.ProjectBeneficiarySearch; +import org.egov.common.validator.Validator; +import org.egov.project.repository.ProjectBeneficiaryRepository; +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 ProjectBeneficiary entities already exist in the database based on their client reference IDs. + * + * @author kanishq-egov + */ +public class PbExistentEntityValidator implements Validator { + + private final ProjectBeneficiaryRepository projectBeneficiaryRepository; + + /** + * Constructor to initialize the ProjectBeneficiaryRepository dependency. + * + * @param projectBeneficiaryRepository The repository for ProjectBeneficiary entities. + */ + public PbExistentEntityValidator(ProjectBeneficiaryRepository projectBeneficiaryRepository) { + this.projectBeneficiaryRepository = projectBeneficiaryRepository; + } + + /** + * Validates the existence of entities with the given client reference IDs. + * + * @param request The bulk request containing ProjectBeneficiary entities. + * @return A map containing ProjectBeneficiary entities and their associated error details. + */ + @Override + public Map> validate(BeneficiaryBulkRequest request) { + // Map to hold ProjectBeneficiary entities and their error details + Map> errorDetailsMap = new HashMap<>(); + // Get the list of ProjectBeneficiary entities from the request + List entities = request.getProjectBeneficiaries(); + // Extract client reference IDs from ProjectBeneficiary entities without errors + List clientReferenceIdList = entities.stream() + .filter(notHavingErrors()) + .map(ProjectBeneficiary::getClientReferenceId) + .collect(Collectors.toList()); + // Create a search object for querying entities by client reference IDs + ProjectBeneficiarySearch projectBeneficiarySearch = ProjectBeneficiarySearch.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 = projectBeneficiaryRepository.findById( + clientReferenceIdList, + getIdFieldName(projectBeneficiarySearch), + 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/project/src/main/java/org/egov/project/validator/beneficiary/PbRowVersionValidator.java b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbRowVersionValidator.java index d6de91c5439..a36e39664a6 100644 --- a/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbRowVersionValidator.java +++ b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbRowVersionValidator.java @@ -49,7 +49,7 @@ public Map> validate(BeneficiaryBulkRequest requ if (!iMap.isEmpty()) { List individualIds = new ArrayList<>(iMap.keySet()); List existingProjectBeneficiaries = projectBeneficiaryRepository.findById(individualIds, - false, getIdFieldName(idMethod)); + getIdFieldName(idMethod), false).getResponse(); List entitiesWithMismatchedRowVersion = getEntitiesWithMismatchedRowVersion(iMap, existingProjectBeneficiaries, idMethod); entitiesWithMismatchedRowVersion.forEach(projectBeneficiary -> { diff --git a/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForCreateValidator.java b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForCreateValidator.java index dbac480cccd..7140c580507 100644 --- a/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForCreateValidator.java +++ b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForCreateValidator.java @@ -6,7 +6,7 @@ import org.egov.common.models.project.ProjectBeneficiary; import org.egov.common.validator.Validator; import org.egov.project.repository.ProjectBeneficiaryRepository; -import org.egov.project.web.models.ProjectBeneficiarySearch; +import org.egov.common.models.project.ProjectBeneficiarySearch; import org.egov.tracer.model.CustomException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; @@ -106,7 +106,7 @@ private List getInvalidVoucherTags(List existingProjectBeneficiaries = projectBeneficiaryRepository.find( projectBeneficiarySearch, voucherTags.size(), 0, validProjectBeneficiaries.get(0).getTenantId(), null, false - ); + ).getResponse(); } catch (Exception e) { log.error("Exception while fetching project beneficiary service : ", e); throw new CustomException("PROJECT_BENEFICIARY_VOUCHER_TAG_SEARCH_FAILED","Error occurred while fetching project beneficiary based on voucher tags. "+e); diff --git a/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForUpdateValidator.java b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForUpdateValidator.java index 8450427492f..e957f64c06a 100644 --- a/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForUpdateValidator.java +++ b/health-services/project/src/main/java/org/egov/project/validator/beneficiary/PbVoucherTagUniqueForUpdateValidator.java @@ -1,23 +1,23 @@ package org.egov.project.validator.beneficiary; +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.project.BeneficiaryBulkRequest; import org.egov.common.models.project.ProjectBeneficiary; import org.egov.common.validator.Validator; import org.egov.project.repository.ProjectBeneficiaryRepository; -import org.egov.project.web.models.ProjectBeneficiarySearch; +import org.egov.common.models.project.ProjectBeneficiarySearch; import org.egov.tracer.model.CustomException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - import static org.egov.common.utils.CommonUtils.notHavingErrors; import static org.egov.common.utils.CommonUtils.populateErrorDetails; @@ -86,7 +86,7 @@ private List getExistingProjectBeneficiaries(List errorMap = new HashMap<>(); + RequestInfo requestInfo = projectSearchRequest.getRequestInfo(); + ProjectSearch projectSearch = projectSearchRequest.getProject(); + + // Verify if RequestInfo and UserInfo is present + validateRequestInfo(requestInfo); + + // Verify if search project request parameters are valid + validateSearchProjectRequestParams( + urlParams.getLimit(), + urlParams.getOffset(), + urlParams.getTenantId(), + projectSearch.getCreatedFrom(), + projectSearch.getCreatedTo() + ); + + // Check if tenant ID is present in the request + if (StringUtils.isBlank(urlParams.getTenantId())) { + log.error("Tenant ID is mandatory in Project request body"); + throw new CustomException("TENANT_ID", "Tenant ID is mandatory"); + } + + // Validate if at least one project search field is present + if (CollectionUtils.isEmpty(projectSearch.getId()) + && StringUtils.isBlank(projectSearch.getProjectTypeId()) + && StringUtils.isBlank(projectSearch.getName()) + && StringUtils.isBlank(projectSearch.getSubProjectTypeId()) + && (projectSearch.getStartDate() == null || projectSearch.getStartDate() == 0) + && (projectSearch.getEndDate() == null || projectSearch.getEndDate() == 0) + && (projectSearch.getCreatedFrom() == null || projectSearch.getCreatedFrom() == 0) + && (projectSearch.getBoundaryCode() == null || StringUtils.isBlank(projectSearch.getBoundaryCode()))) { + log.error("Any one project search field is required for Project Search"); + throw new CustomException("PROJECT_SEARCH_FIELDS", "Any one project search field is required"); + } + + // Validate that start date is less than or equal to end date + if ((projectSearch.getStartDate() != null && projectSearch.getEndDate() != null && projectSearch.getEndDate() != 0) + && (projectSearch.getStartDate().compareTo(projectSearch.getEndDate()) > 0)) { + log.error("Start date should be less than end date"); + throw new CustomException("INVALID_DATE", "Start date should be less than end date"); + } + + // Validate that if end date is provided, start date should also be provided + if ((projectSearch.getStartDate() == null || projectSearch.getStartDate() == 0) + && (projectSearch.getEndDate() != null && projectSearch.getEndDate() != 0)) { + log.error("Start date is required if end date is passed"); + throw new CustomException("INVALID_DATE", "Start date is required if end date is passed"); + } + + // If there are any collected errors, throw a CustomException with the error map + if (!errorMap.isEmpty()) { + throw new CustomException(errorMap); + } + } + + /* Validates Update Project request body */ public void validateUpdateProjectRequest(ProjectRequest request) { Map errorMap = new HashMap<>(); @@ -401,7 +463,7 @@ private Map> getBoundaryForValidation(List project /* Validates Boundary data with location service */ private void validateBoundary(Map> boundaries, String tenantId, RequestInfo requestInfo, Map errorMap) { if (boundaries.size() > 0) { - boundaryUtil.validateBoundaryDetails(boundaries, tenantId, requestInfo, config.getLocationHierarchyType()); + boundaryV2Util.validateBoundaryDetails(boundaries, tenantId, requestInfo, config.getLocationHierarchyType()); } } diff --git a/health-services/project/src/main/java/org/egov/project/validator/task/PtExistentEntityValidator.java b/health-services/project/src/main/java/org/egov/project/validator/task/PtExistentEntityValidator.java new file mode 100644 index 00000000000..3a65cc6acc9 --- /dev/null +++ b/health-services/project/src/main/java/org/egov/project/validator/task/PtExistentEntityValidator.java @@ -0,0 +1,76 @@ +package org.egov.project.validator.task; + +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.project.Task; +import org.egov.common.models.project.TaskBulkRequest; +import org.egov.common.models.project.TaskSearch; +import org.egov.common.validator.Validator; +import org.egov.project.repository.ProjectTaskRepository; +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 Task entities already exist in the database based on their client reference IDs. + * + * @author: kanishq-egov + */ +public class PtExistentEntityValidator implements Validator { + + private final ProjectTaskRepository projectTaskRepository; + + /** + * Constructor to initialize the ProjectTaskRepository dependency. + * + * @param projectTaskRepository The repository for project task entities. + */ + public PtExistentEntityValidator(ProjectTaskRepository projectTaskRepository) { + this.projectTaskRepository = projectTaskRepository; + } + + /** + * Validates the existence of entities with the given client reference IDs. + * + * @param request The bulk request containing Task entities. + * @return A map containing Task entities and their associated error details. + */ + @Override + public Map> validate(TaskBulkRequest request) { + // Map to hold Task entities and their error details + Map> errorDetailsMap = new HashMap<>(); + // Get the list of Task entities from the request + List entities = request.getTasks(); + // Extract client reference IDs from Task entities without errors + List clientReferenceIdList = entities.stream() + .filter(notHavingErrors()) + .map(Task::getClientReferenceId) + .collect(Collectors.toList()); + // Create a search object for querying entities by client reference IDs + TaskSearch taskSearch = TaskSearch.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 = projectTaskRepository.findById( + clientReferenceIdList, + getIdFieldName(taskSearch), + 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/project/src/main/java/org/egov/project/validator/task/PtNonExistentEntityValidator.java b/health-services/project/src/main/java/org/egov/project/validator/task/PtNonExistentEntityValidator.java index 16b94a50ae0..5342d6ff90a 100644 --- a/health-services/project/src/main/java/org/egov/project/validator/task/PtNonExistentEntityValidator.java +++ b/health-services/project/src/main/java/org/egov/project/validator/task/PtNonExistentEntityValidator.java @@ -58,7 +58,7 @@ public Map> validate(TaskBulkRequest request) { if (!eMap.isEmpty()) { List entityIds = new ArrayList<>(eMap.keySet()); List existingEntities = projectTaskRepository.findById(entityIds, - getIdFieldName(idMethod), false); + getIdFieldName(idMethod), false).getResponse(); List nonExistentEntities = checkNonExistentEntities(eMap, existingEntities, idMethod); nonExistentEntities.forEach(task -> { diff --git a/health-services/project/src/main/java/org/egov/project/validator/task/PtRowVersionValidator.java b/health-services/project/src/main/java/org/egov/project/validator/task/PtRowVersionValidator.java index 48332dfcbe7..435c330daaf 100644 --- a/health-services/project/src/main/java/org/egov/project/validator/task/PtRowVersionValidator.java +++ b/health-services/project/src/main/java/org/egov/project/validator/task/PtRowVersionValidator.java @@ -49,7 +49,7 @@ public Map> validate(TaskBulkRequest request) { if (!eMap.isEmpty()) { List entityIds = new ArrayList<>(eMap.keySet()); List existingEntities = projectTaskRepository.findById(entityIds, - getIdFieldName(idMethod), false); + getIdFieldName(idMethod), false).getResponse(); List entitiesWithMismatchedRowVersion = getEntitiesWithMismatchedRowVersion(eMap, existingEntities, idMethod); entitiesWithMismatchedRowVersion.forEach(individual -> { diff --git a/health-services/project/src/main/java/org/egov/project/web/controllers/BandwidthController.java b/health-services/project/src/main/java/org/egov/project/web/controllers/BandwidthController.java index e18a7cc1c41..848ec089f4c 100644 --- a/health-services/project/src/main/java/org/egov/project/web/controllers/BandwidthController.java +++ b/health-services/project/src/main/java/org/egov/project/web/controllers/BandwidthController.java @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import javax.validation.Valid; +import jakarta.validation.Valid; @Controller @RequestMapping("") diff --git a/health-services/project/src/main/java/org/egov/project/web/controllers/ProjectApiController.java b/health-services/project/src/main/java/org/egov/project/web/controllers/ProjectApiController.java index 806a61bdffa..1b74b7ab1d7 100644 --- a/health-services/project/src/main/java/org/egov/project/web/controllers/ProjectApiController.java +++ b/health-services/project/src/main/java/org/egov/project/web/controllers/ProjectApiController.java @@ -1,13 +1,24 @@ package org.egov.project.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 jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; import org.egov.common.contract.response.ResponseInfo; +import org.egov.common.models.core.ProjectSearchURLParams; +import org.egov.common.models.core.SearchResponse; +import org.egov.common.models.core.URLParams; import org.egov.common.models.project.BeneficiaryBulkRequest; import org.egov.common.models.project.BeneficiaryBulkResponse; import org.egov.common.models.project.BeneficiaryRequest; import org.egov.common.models.project.BeneficiaryResponse; +import org.egov.common.models.project.BeneficiarySearchRequest; import org.egov.common.models.project.Project; import org.egov.common.models.project.ProjectBeneficiary; import org.egov.common.models.project.ProjectFacility; @@ -15,13 +26,16 @@ import org.egov.common.models.project.ProjectFacilityBulkResponse; import org.egov.common.models.project.ProjectFacilityRequest; import org.egov.common.models.project.ProjectFacilityResponse; +import org.egov.common.models.project.ProjectFacilitySearchRequest; import org.egov.common.models.project.ProjectRequest; import org.egov.common.models.project.ProjectResponse; +import org.egov.common.models.project.ProjectSearchRequest; import org.egov.common.models.project.ProjectStaff; import org.egov.common.models.project.ProjectStaffBulkRequest; import org.egov.common.models.project.ProjectStaffBulkResponse; import org.egov.common.models.project.ProjectStaffRequest; import org.egov.common.models.project.ProjectStaffResponse; +import org.egov.common.models.project.ProjectStaffSearchRequest; import org.egov.common.models.project.Task; import org.egov.common.models.project.TaskBulkRequest; import org.egov.common.models.project.TaskBulkResponse; @@ -36,27 +50,18 @@ import org.egov.project.service.ProjectService; import org.egov.project.service.ProjectStaffService; import org.egov.project.service.ProjectTaskService; -import org.egov.project.web.models.BeneficiarySearchRequest; -import org.egov.project.web.models.ProjectFacilitySearchRequest; -import org.egov.project.web.models.ProjectStaffSearchRequest; 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 java.util.List; -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-14T20:57:07.075+05:30") @Controller @RequestMapping("") @Validated @@ -101,6 +106,7 @@ public ProjectApiController(ObjectMapper objectMapper, HttpServletRequest httpSe @RequestMapping(value = "/beneficiary/v1/bulk/_create", method = RequestMethod.POST) public ResponseEntity projectBeneficiaryV1BulkCreatePost(@ApiParam(value = "Capture details of benificiary type.", required = true) @Valid @RequestBody BeneficiaryBulkRequest beneficiaryRequest) { + beneficiaryRequest.getRequestInfo().setApiId(httpServletRequest.getRequestURI()); beneficiaryRequest.getRequestInfo().setApiId(httpServletRequest.getRequestURI()); projectBeneficiaryService.putInCache(beneficiaryRequest.getProjectBeneficiaries()); producer.push(projectConfiguration.getBulkCreateProjectBeneficiaryTopic(), beneficiaryRequest); @@ -122,20 +128,21 @@ public ResponseEntity projectBeneficiaryV1CreatePost(@ApiPa } @RequestMapping(value = "/beneficiary/v1/_search", method = RequestMethod.POST) - public ResponseEntity projectBeneficiaryV1SearchPost(@ApiParam(value = "Project Beneficiary Search.", required = true) @Valid @RequestBody BeneficiarySearchRequest beneficiarySearchRequest, @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 projectBeneficiaries = projectBeneficiaryService.search( + public ResponseEntity projectBeneficiaryV2SearchPost( + @Valid @ModelAttribute URLParams urlParams, + @ApiParam(value = "Project Beneficiary Search.", required = true) @Valid @RequestBody BeneficiarySearchRequest beneficiarySearchRequest + ) throws Exception { + SearchResponse searchResponse = projectBeneficiaryService.search( beneficiarySearchRequest, - limit, - offset, - tenantId, - lastChangedSince, - includeDeleted + urlParams.getLimit(), + urlParams.getOffset(), + urlParams.getTenantId(), + urlParams.getLastChangedSince(), + urlParams.getIncludeDeleted() ); BeneficiaryBulkResponse beneficiaryResponse = BeneficiaryBulkResponse.builder() - .projectBeneficiaries(projectBeneficiaries) + .projectBeneficiaries(searchResponse.getResponse()) + .totalCount(searchResponse.getTotalCount()) .responseInfo(ResponseInfoFactory .createResponseInfo(beneficiarySearchRequest.getRequestInfo(), true)) .build(); @@ -207,20 +214,19 @@ public ResponseEntity projectFacilityV1BulkCreatePost(@ApiParam(va .createResponseInfo(request.getRequestInfo(), true)); } + @RequestMapping(value = "/facility/v1/_search", method = RequestMethod.POST) - public ResponseEntity projectFacilityV1SearchPost(@ApiParam(value = "Capture details of Project facility.", required = true) @Valid @RequestBody ProjectFacilitySearchRequest projectFacilitySearchRequest, - @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 { + public ResponseEntity projectFacilityV2SearchPost( + @Valid @ModelAttribute URLParams urlParams, + @ApiParam(value = "Capture details of Project facility.", required = true) @Valid @RequestBody ProjectFacilitySearchRequest projectFacilitySearchRequest + ) throws Exception { List projectFacilities = projectFacilityService.search( projectFacilitySearchRequest, - limit, - offset, - tenantId, - lastChangedSince, - includeDeleted + urlParams.getLimit(), + urlParams.getOffset(), + urlParams.getTenantId(), + urlParams.getLastChangedSince(), + urlParams.getIncludeDeleted() ); ProjectFacilityBulkResponse response = ProjectFacilityBulkResponse.builder() .projectFacilities(projectFacilities) @@ -298,20 +304,19 @@ public ResponseEntity projectStaffV1CreatePost(@ApiParam(value = " .createResponseInfo(request.getRequestInfo(), true)); } + @RequestMapping(value = "/staff/v1/_search", method = RequestMethod.POST) - public ResponseEntity projectStaffV1SearchPost(@ApiParam(value = "Capture details of Project staff.", required = true) @Valid @RequestBody ProjectStaffSearchRequest projectStaffSearchRequest, - @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 { + public ResponseEntity projectStaffV1SearchPost( + @Valid @ModelAttribute URLParams urlParams, + @ApiParam(value = "Capture details of Project staff.", required = true) @Valid @RequestBody ProjectStaffSearchRequest projectStaffSearchRequest + ) throws Exception { List projectStaffList = projectStaffService.search( projectStaffSearchRequest, - limit, - offset, - tenantId, - lastChangedSince, - includeDeleted + urlParams.getLimit(), + urlParams.getOffset(), + urlParams.getTenantId(), + urlParams.getLastChangedSince(), + urlParams.getIncludeDeleted() ); ProjectStaffBulkResponse response = ProjectStaffBulkResponse.builder() .projectStaff(projectStaffList) @@ -393,17 +398,23 @@ public ResponseEntity projectTaskBulkV1CreatePost(@ApiParam(value .createResponseInfo(request.getRequestInfo(), true)); } + @RequestMapping(value = "/task/v1/_search", method = RequestMethod.POST) - public ResponseEntity projectTaskV1SearchPost(@ApiParam(value = "Project Task Search.", required = true) @Valid @RequestBody TaskSearchRequest 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) { - - List households = projectTaskService.search(request.getTask(), limit, offset, tenantId, lastChangedSince, includeDeleted); + public ResponseEntity projectTaskV1SearchPost( + @Valid @ModelAttribute URLParams urlParams, + @ApiParam(value = "Project Task Search.", required = true) @Valid @RequestBody TaskSearchRequest taskSearchRequest + ) { + SearchResponse taskSearchResponse = projectTaskService.search( + taskSearchRequest.getTask(), + urlParams.getLimit(), + urlParams.getOffset(), + urlParams.getTenantId(), + urlParams.getLastChangedSince(), + urlParams.getIncludeDeleted() + ); + TaskBulkResponse response = TaskBulkResponse.builder().responseInfo(ResponseInfoFactory - .createResponseInfo(request.getRequestInfo(), true)).tasks(households).build(); + .createResponseInfo(taskSearchRequest.getRequestInfo(), true)).tasks(taskSearchResponse.getResponse()).totalCount(taskSearchResponse.getTotalCount()).build(); return ResponseEntity.status(HttpStatus.OK).body(response); } @@ -463,14 +474,52 @@ public ResponseEntity createProject(@ApiParam(value = "Details } @RequestMapping(value = "/v1/_search", method = RequestMethod.POST) - public ResponseEntity searchProject(@ApiParam(value = "Details for the project.", required = true) @Valid @RequestBody ProjectRequest project, @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 , @ApiParam(value = "Used in project search API to specify if response should include project elements that are in the preceding hierarchy of matched projects.", defaultValue = "false") @Valid @RequestParam(value = "includeAncestors", required = false, defaultValue = "false") Boolean includeAncestors, @ApiParam(value = "Used in project search API to specify if response should include project elements that are in the following hierarchy of matched projects.", defaultValue = "false") @Valid @RequestParam(value = "includeDescendants", required = false, defaultValue = "false") Boolean includeDescendants, @ApiParam(value = "Used in project search API to limit the search results to only those projects whose creation date is after the specified 'createdFrom' date", defaultValue = "false") @Valid @RequestParam(value = "createdFrom", required = false) Long createdFrom, @ApiParam(value = "Used in project search API to limit the search results to only those projects whose creation date is before the specified 'createdTo' date", defaultValue = "false") @Valid @RequestParam(value = "createdTo", required = false) Long createdTo) { - List projects = projectService.searchProject(project, limit, offset, tenantId, lastChangedSince, includeDeleted, includeAncestors, includeDescendants, createdFrom, createdTo); + public ResponseEntity searchProject( + @ApiParam(value = "Details for the project.", required = true) @Valid @RequestBody ProjectRequest project, + @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, + @ApiParam(value = "Used in project search API to specify if response should include project elements that are in the preceding hierarchy of matched projects.", defaultValue = "false") @Valid @RequestParam(value = "includeAncestors", required = false, defaultValue = "false") Boolean includeAncestors, + @ApiParam(value = "Used in project search API to specify if response should include project elements that are in the following hierarchy of matched projects.", defaultValue = "false") @Valid @RequestParam(value = "includeDescendants", required = false, defaultValue = "false") Boolean includeDescendants, + @ApiParam(value = "Used in project search API to limit the search results to only those projects whose creation date is after the specified 'createdFrom' date", defaultValue = "false") @Valid @RequestParam(value = "createdFrom", required = false) Long createdFrom, + @ApiParam(value = "Used in project search API to limit the search results to only those projects whose creation date is before the specified 'createdTo' date", defaultValue = "false") @Valid @RequestParam(value = "createdTo", required = false) Long createdTo + ) { + List projects = projectService.searchProject( + project, + limit, + offset, + tenantId, + lastChangedSince, + includeDeleted, + includeAncestors, + includeDescendants, + createdFrom, + createdTo + ); ResponseInfo responseInfo = ResponseInfoFactory.createResponseInfo(project.getRequestInfo(), true); Integer count = projectService.countAllProjects(project, tenantId, lastChangedSince, includeDeleted, createdFrom, createdTo); ProjectResponse projectResponse = ProjectResponse.builder().responseInfo(responseInfo).project(projects).totalCount(count).build(); return new ResponseEntity(projectResponse, HttpStatus.OK); } + @RequestMapping(value = "/v2/_search", method = RequestMethod.POST) + public ResponseEntity searchV2Project( + @Valid @ModelAttribute ProjectSearchURLParams urlParams, + @ApiParam(value = "Details for the project.", required = true) @Valid @RequestBody ProjectSearchRequest projectSearchRequest + ) { + List projects = projectService.searchProject(projectSearchRequest, urlParams); + ResponseInfo responseInfo = ResponseInfoFactory.createResponseInfo(projectSearchRequest.getRequestInfo(), true); + Integer count = projectService.countAllProjects(projectSearchRequest, urlParams); + ProjectResponse projectResponse = ProjectResponse.builder() + .responseInfo(responseInfo) + .project(projects) + .totalCount(count) + .build(); + return new ResponseEntity(projectResponse, HttpStatus.OK); + } + @RequestMapping(value = "/v1/_update", method = RequestMethod.POST) public ResponseEntity updateProject(@ApiParam(value = "Details for the updated Project.", required = true) @Valid @RequestBody ProjectRequest project) { ProjectRequest enrichedProjectRequest = projectService.updateProject(project); diff --git a/health-services/project/src/main/java/org/egov/project/web/controllers/ProjectResourceApiController.java b/health-services/project/src/main/java/org/egov/project/web/controllers/ProjectResourceApiController.java index 499123db26b..6f71ea7ef93 100644 --- a/health-services/project/src/main/java/org/egov/project/web/controllers/ProjectResourceApiController.java +++ b/health-services/project/src/main/java/org/egov/project/web/controllers/ProjectResourceApiController.java @@ -1,36 +1,34 @@ package org.egov.project.web.controllers; +import java.util.List; + 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.data.query.exception.QueryBuilderException; +import org.egov.common.models.core.URLParams; import org.egov.common.models.project.ProjectResource; import org.egov.common.models.project.ProjectResourceBulkRequest; import org.egov.common.models.project.ProjectResourceBulkResponse; import org.egov.common.models.project.ProjectResourceRequest; import org.egov.common.models.project.ProjectResourceResponse; +import org.egov.common.models.project.ProjectResourceSearchRequest; import org.egov.common.producer.Producer; import org.egov.common.utils.ResponseInfoFactory; import org.egov.project.config.ProjectConfiguration; import org.egov.project.service.ProjectResourceService; -import org.egov.project.web.models.ProjectResourceSearchRequest; 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 java.util.List; -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-14T20:57:07.075+05:30") @Controller @RequestMapping("") @Validated @@ -72,16 +70,21 @@ public ResponseEntity resourceV1BulkCreatePost(@ApiParam(value = " } @RequestMapping(value = "/resource/v1/_search", method = RequestMethod.POST) - public ResponseEntity resourceV1SearchPost(@ApiParam( - value = "Search linkage of Project and resource.", required = true) @Valid @RequestBody - ProjectResourceSearchRequest 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 QueryBuilderException { - - List projectResource = projectResourceService.search(request, limit, offset, tenantId, lastChangedSince, includeDeleted); + public ResponseEntity resourceV1SearchPost( + @Valid @ModelAttribute URLParams urlParams, + @ApiParam(value = "Search linkage of Project and resource.", required = true) @Valid @RequestBody ProjectResourceSearchRequest projectResourceSearchRequest + ) throws QueryBuilderException { + + List projectResource = projectResourceService.search( + projectResourceSearchRequest, + urlParams.getLimit(), + urlParams.getOffset(), + urlParams.getTenantId(), + urlParams.getLastChangedSince(), + urlParams.getIncludeDeleted() + ); ProjectResourceBulkResponse response = ProjectResourceBulkResponse.builder().responseInfo(ResponseInfoFactory - .createResponseInfo(request.getRequestInfo(), true)).projectResource(projectResource).build(); + .createResponseInfo(projectResourceSearchRequest.getRequestInfo(), true)).projectResource(projectResource).build(); return ResponseEntity.status(HttpStatus.OK).body(response); } diff --git a/health-services/project/src/main/java/org/egov/project/web/models/BandwidthCheckRequest.java b/health-services/project/src/main/java/org/egov/project/web/models/BandwidthCheckRequest.java index ceffcb45320..2a34df10592 100644 --- a/health-services/project/src/main/java/org/egov/project/web/models/BandwidthCheckRequest.java +++ b/health-services/project/src/main/java/org/egov/project/web/models/BandwidthCheckRequest.java @@ -10,8 +10,8 @@ import org.egov.common.models.project.AdditionalFields; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; @Validated @JsonIgnoreProperties(ignoreUnknown = true) diff --git a/health-services/project/src/main/java/org/egov/project/web/models/BandwidthCheckResponse.java b/health-services/project/src/main/java/org/egov/project/web/models/BandwidthCheckResponse.java index 96b977556fb..5fdcf303eaf 100644 --- a/health-services/project/src/main/java/org/egov/project/web/models/BandwidthCheckResponse.java +++ b/health-services/project/src/main/java/org/egov/project/web/models/BandwidthCheckResponse.java @@ -10,8 +10,8 @@ import org.egov.common.models.project.AdditionalFields; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; @Validated @JsonIgnoreProperties(ignoreUnknown = true) diff --git a/health-services/project/src/main/java/org/egov/project/web/models/BeneficiarySearchRequest.java b/health-services/project/src/main/java/org/egov/project/web/models/BeneficiarySearchRequest.java index 87025f0202a..ba1cd058378 100644 --- a/health-services/project/src/main/java/org/egov/project/web/models/BeneficiarySearchRequest.java +++ b/health-services/project/src/main/java/org/egov/project/web/models/BeneficiarySearchRequest.java @@ -7,16 +7,17 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.egov.common.contract.request.RequestInfo; +import org.egov.common.models.project.ProjectBeneficiarySearch; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; /** * BeneficiarySearchRequest */ @Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") + @Data @NoArgsConstructor diff --git a/health-services/project/src/main/java/org/egov/project/web/models/ProjectBeneficiarySearch.java b/health-services/project/src/main/java/org/egov/project/web/models/ProjectBeneficiarySearch.java deleted file mode 100644 index 6c96d8b16be..00000000000 --- a/health-services/project/src/main/java/org/egov/project/web/models/ProjectBeneficiarySearch.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.egov.project.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.constraints.Size; -import java.util.List; - -/** -* Search model for project beneficiary. -*/ - @ApiModel(description = "Search model for project beneficiary.") -@Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder - @JsonIgnoreProperties(ignoreUnknown = true) -@Table(name="project_beneficiary") -public class ProjectBeneficiarySearch { - - @JsonProperty("id") - private List id = null; - - @JsonProperty("tenantId") - @Size(min=2,max=1000) - private String tenantId = null; - - @JsonProperty("projectId") - private List projectId = null; - - @JsonProperty("beneficiaryId") - private List beneficiaryId = null; - - @JsonProperty("clientReferenceId") - private List clientReferenceId = null; - - @JsonProperty("dateOfRegistration") - private Long dateOfRegistration = null; - - @JsonProperty("tag") - private List tag; -} - diff --git a/health-services/project/src/main/java/org/egov/project/web/models/ProjectFacilitySearch.java b/health-services/project/src/main/java/org/egov/project/web/models/ProjectFacilitySearch.java deleted file mode 100644 index 1bba9410e75..00000000000 --- a/health-services/project/src/main/java/org/egov/project/web/models/ProjectFacilitySearch.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.egov.project.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 java.util.List; - -/** -* This object defines the mapping of a facility to a project. -*/ - @ApiModel(description = "This object defines the mapping of a facility to a project.") -@Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder - @JsonIgnoreProperties(ignoreUnknown = true) -@Table(name="project_facility") -public class ProjectFacilitySearch { - - @JsonProperty("id") - private List id = null; - - @JsonProperty("tenantId") - private String tenantId = null; - - @JsonProperty("facilityId") - private List facilityId = null; - - @JsonProperty("projectId") - private List projectId = null; - -} \ No newline at end of file diff --git a/health-services/project/src/main/java/org/egov/project/web/models/ProjectFacilitySearchRequest.java b/health-services/project/src/main/java/org/egov/project/web/models/ProjectFacilitySearchRequest.java deleted file mode 100644 index 88ca607f150..00000000000 --- a/health-services/project/src/main/java/org/egov/project/web/models/ProjectFacilitySearchRequest.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.egov.project.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; - -/** -* ProjectFacilitySearchRequest -*/ -@Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -@JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectFacilitySearchRequest { - - @JsonProperty("RequestInfo") - @NotNull - @Valid - private RequestInfo requestInfo = null; - - @JsonProperty("ProjectFacility") - @NotNull - @Valid - private ProjectFacilitySearch projectFacility = null; - -} - diff --git a/health-services/project/src/main/java/org/egov/project/web/models/ProjectResourceSearch.java b/health-services/project/src/main/java/org/egov/project/web/models/ProjectResourceSearch.java deleted file mode 100644 index dd74ad5ada0..00000000000 --- a/health-services/project/src/main/java/org/egov/project/web/models/ProjectResourceSearch.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.egov.project.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.constraints.Size; -import java.util.List; - -/** -* This object defines the mapping of a resource to a project. -*/ - @ApiModel(description = "This object defines the mapping of a resource to a project.") -@Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder - @JsonIgnoreProperties(ignoreUnknown = true) -@Table(name = "project_resource") -public class ProjectResourceSearch { - - @JsonProperty("id") - private List id = null; - - @JsonProperty("projectId") - private List projectId = null; - -} - diff --git a/health-services/project/src/main/java/org/egov/project/web/models/ProjectResourceSearchRequest.java b/health-services/project/src/main/java/org/egov/project/web/models/ProjectResourceSearchRequest.java deleted file mode 100644 index 7b62b15d564..00000000000 --- a/health-services/project/src/main/java/org/egov/project/web/models/ProjectResourceSearchRequest.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.egov.project.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; - -/** -* ProjectResourceSearchRequest -*/ -@Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -@JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectResourceSearchRequest { - - @JsonProperty("RequestInfo") - @NotNull - @Valid - private org.egov.common.contract.request.RequestInfo requestInfo = null; - - @JsonProperty("ProjectResource") - @NotNull - @Valid - private ProjectResourceSearch projectResource = null; - - -} - diff --git a/health-services/project/src/main/java/org/egov/project/web/models/ProjectSearch.java b/health-services/project/src/main/java/org/egov/project/web/models/ProjectSearch.java deleted file mode 100644 index a6ddd479dc5..00000000000 --- a/health-services/project/src/main/java/org/egov/project/web/models/ProjectSearch.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.egov.project.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.data.query.annotations.Table; -import org.springframework.validation.annotation.Validated; - -import javax.validation.constraints.Size; - -/** -* ProjectSearch -*/ -@Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -@JsonIgnoreProperties(ignoreUnknown = true) -@Table(name="project") -public class ProjectSearch { - - @JsonProperty("id") - private String id = null; - - @JsonProperty("tenantId") - private String tenantId = null; - - @JsonProperty("startDate") - private Long startDate = null; - - @JsonProperty("endDate") - private Long endDate = null; - - @JsonProperty("isTaskEnabled") - private Boolean isTaskEnabled = false; - - @JsonProperty("parent") - @Size(min=2,max=64) - private String parent = null; - - @JsonProperty("projectTypeId") - private String projectTypeId = null; - - @JsonProperty("subProjectTypeId") - private String subProjectTypeId = null; - - @JsonProperty("department") - @Size(min=2,max=64) - private String department = null; - - @JsonProperty("referenceId") - @Size(min=2,max=100) - private String referenceId = null; - - @JsonProperty("boundaryCode") - private String boundaryCode = null; - -} - diff --git a/health-services/project/src/main/java/org/egov/project/web/models/ProjectStaffSearch.java b/health-services/project/src/main/java/org/egov/project/web/models/ProjectStaffSearch.java deleted file mode 100644 index 3df7f4c6695..00000000000 --- a/health-services/project/src/main/java/org/egov/project/web/models/ProjectStaffSearch.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.egov.project.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.constraints.Size; -import java.util.List; - -/** -* This object defines the mapping of a system staff user to a project for a certain period. -*/ - @ApiModel(description = "This object defines the mapping of a system staff user to a project for a certain period.") -@Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder - @JsonIgnoreProperties(ignoreUnknown = true) -@Table(name="project_staff") -public class ProjectStaffSearch { - - - @JsonProperty("id") - private List id = null; - - @JsonProperty("tenantId") - @Size(min=2,max=1000) - private String tenantId = null; - - @JsonProperty("staffId") - private List staffId = null; - - @JsonProperty("projectId") - private List projectId = null; - - @JsonProperty("startDate") - private Long startDate = null; - - @JsonProperty("endDate") - private Long endDate = null; - - -} - diff --git a/health-services/project/src/main/java/org/egov/project/web/models/ProjectStaffSearchRequest.java b/health-services/project/src/main/java/org/egov/project/web/models/ProjectStaffSearchRequest.java deleted file mode 100644 index ce13fa1a73e..00000000000 --- a/health-services/project/src/main/java/org/egov/project/web/models/ProjectStaffSearchRequest.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.egov.project.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; - -/** -* ProjectStaffSearchRequest -*/ -@Validated -@javax.annotation.Generated(value = "org.egov.codegen.SpringBootCodegen", date = "2022-12-02T17:32:25.406+05:30") - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -@JsonIgnoreProperties(ignoreUnknown = true) -public class ProjectStaffSearchRequest { - - @JsonProperty("RequestInfo") - @NotNull - @Valid - private RequestInfo requestInfo = null; - - @JsonProperty("ProjectStaff") - @NotNull - @Valid - private ProjectStaffSearch projectStaff = null; - -} - diff --git a/health-services/project/src/main/java/org/egov/project/web/models/boundary/BoundaryRequest.java b/health-services/project/src/main/java/org/egov/project/web/models/boundary/BoundaryRequest.java new file mode 100644 index 00000000000..09921ea9493 --- /dev/null +++ b/health-services/project/src/main/java/org/egov/project/web/models/boundary/BoundaryRequest.java @@ -0,0 +1,38 @@ +package org.egov.project.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/project/src/main/java/org/egov/project/web/models/boundary/BoundaryResponse.java b/health-services/project/src/main/java/org/egov/project/web/models/boundary/BoundaryResponse.java new file mode 100644 index 00000000000..993f24fd8ce --- /dev/null +++ b/health-services/project/src/main/java/org/egov/project/web/models/boundary/BoundaryResponse.java @@ -0,0 +1,44 @@ +package org.egov.project.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/project/src/main/java/org/egov/project/web/models/boundary/BoundarySearchCriteria.java b/health-services/project/src/main/java/org/egov/project/web/models/boundary/BoundarySearchCriteria.java new file mode 100644 index 00000000000..94eaa56c2b3 --- /dev/null +++ b/health-services/project/src/main/java/org/egov/project/web/models/boundary/BoundarySearchCriteria.java @@ -0,0 +1,37 @@ +package org.egov.project.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/project/src/main/resources/application.properties b/health-services/project/src/main/resources/application.properties index 8364f5f71da..caed5303565 100644 --- a/health-services/project/src/main/resources/application.properties +++ b/health-services/project/src/main/resources/application.properties @@ -68,7 +68,9 @@ kafka.topics.consumer=project-consumer-topic # USER CONFIG egov.user.host=https://dev.digit.org #egov.user.host=http://localhost:8286 +egov.create.user.url=/user/users/_createnovalidate egov.search.user.url=/user/_search +egov.update.user.url=/user/users/_updatenovalidate egov.user.integration.enabled=true # MDMS CONFIG @@ -143,12 +145,10 @@ project.search.max.limit=200 project.management.system.kafka.create.topic=save-project project.management.system.kafka.update.topic=update-project -#location config -egov.location.host=https://works-dev.digit.org -#egov.location.host=http://localhost:8082 -egov.location.context.path=/egov-location/location/v11/ -egov.location.endpoint=/boundarys/_search -egov.location.code.query.param=codes +# BOUNDARY SERVICE +egov.boundary.host=http://localhost:8081 +egov.boundary.search.url=/boundary-service/boundary/_search +egov.boundary.hierarchy=HCM-Moz-Hierarchy project.document.id.verification.required=false diff --git a/health-services/project/src/test/java/org/egov/project/helper/ProjectBeneficiaryTestBuilder.java b/health-services/project/src/test/java/org/egov/project/helper/ProjectBeneficiaryTestBuilder.java index 13f2b0a38e9..540018a7a95 100644 --- a/health-services/project/src/test/java/org/egov/project/helper/ProjectBeneficiaryTestBuilder.java +++ b/health-services/project/src/test/java/org/egov/project/helper/ProjectBeneficiaryTestBuilder.java @@ -1,16 +1,16 @@ package org.egov.project.helper; import org.egov.common.helper.AuditDetailsTestBuilder; -import org.egov.common.models.project.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.project.ProjectBeneficiary; public class ProjectBeneficiaryTestBuilder { - private ProjectBeneficiary.ProjectBeneficiaryBuilder builder; + private ProjectBeneficiary.ProjectBeneficiaryBuilder builder; public ProjectBeneficiaryTestBuilder() { - this.builder = ProjectBeneficiary.builder(); + this.builder = (ProjectBeneficiary.ProjectBeneficiaryBuilder) ProjectBeneficiary.builder(); } public static ProjectBeneficiaryTestBuilder builder() { @@ -18,25 +18,27 @@ public static ProjectBeneficiaryTestBuilder builder() { } public ProjectBeneficiary build() { - return this.builder.hasErrors(false).build(); + return this.builder.hasErrors(Boolean.FALSE).build(); } public ProjectBeneficiaryTestBuilder withIdNull() { this.builder.projectId("some-project-id") + .beneficiaryId("beneficiary-id") + .dateOfRegistration(Long.valueOf(1673577580L)) .clientReferenceId("beneficiaryClientReferenceId") .id(null) - .beneficiaryId("beneficiary-id") - .dateOfRegistration(1673577580L) .tenantId("some-tenant-id") - .rowVersion(1); + .rowVersion(Integer.valueOf(1)); return this; } public ProjectBeneficiaryTestBuilder withId() { - withIdNull().builder.id("some-id").beneficiaryId("beneficiary-id") - .dateOfRegistration(1673577580L) + withIdNull().builder + .beneficiaryId("beneficiary-id") + .dateOfRegistration(Long.valueOf(1673577580L)) .projectId("some-project-id") .clientReferenceId("beneficiaryClientReferenceId") + .id("some-id") .tenantId("some-tenant-id"); return this; } @@ -55,9 +57,9 @@ public ProjectBeneficiaryTestBuilder goodProjectBeneficiary() { this.builder.projectId("some-project-id") .beneficiaryId("beneficiary-id") .clientReferenceId("beneficiaryClientReferenceId") - .dateOfRegistration(1673577580L) + .dateOfRegistration(Long.valueOf(1673577580L)) .tenantId("some-tenant-id") - .rowVersion(1) + .rowVersion(Integer.valueOf(1)) .additionalFields(AdditionalFields.builder().build()) .auditDetails(AuditDetailsTestBuilder.builder().withAuditDetails().build()); return this; @@ -69,7 +71,7 @@ public ProjectBeneficiaryTestBuilder withAuditDetails() { } public ProjectBeneficiaryTestBuilder withDeleted() { - this.builder.isDeleted(true); + this.builder.isDeleted(Boolean.TRUE); return this; } } diff --git a/health-services/project/src/test/java/org/egov/project/helper/ProjectFacilityTestBuilder.java b/health-services/project/src/test/java/org/egov/project/helper/ProjectFacilityTestBuilder.java index 07380c1f025..b14aa21e008 100644 --- a/health-services/project/src/test/java/org/egov/project/helper/ProjectFacilityTestBuilder.java +++ b/health-services/project/src/test/java/org/egov/project/helper/ProjectFacilityTestBuilder.java @@ -1,16 +1,16 @@ package org.egov.project.helper; import org.egov.common.helper.AuditDetailsTestBuilder; -import org.egov.common.models.project.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.project.ProjectFacility; public class ProjectFacilityTestBuilder { - private ProjectFacility.ProjectFacilityBuilder builder; + private ProjectFacility.ProjectFacilityBuilder builder; public ProjectFacilityTestBuilder() { - this.builder = ProjectFacility.builder(); + this.builder = (ProjectFacility.ProjectFacilityBuilder) ProjectFacility.builder(); } public static ProjectFacilityTestBuilder builder() { @@ -33,7 +33,9 @@ public ProjectFacilityTestBuilder withIdNull() { } public ProjectFacilityTestBuilder withId() { - withIdNull().builder.id("some-id").facilityId("facility-id"); + withIdNull().builder + .facilityId("facility-id") + .id("some-id"); return this; } diff --git a/health-services/project/src/test/java/org/egov/project/helper/ProjectResourceTestBuilder.java b/health-services/project/src/test/java/org/egov/project/helper/ProjectResourceTestBuilder.java index 36589d22399..00d904d7cfd 100644 --- a/health-services/project/src/test/java/org/egov/project/helper/ProjectResourceTestBuilder.java +++ b/health-services/project/src/test/java/org/egov/project/helper/ProjectResourceTestBuilder.java @@ -7,10 +7,10 @@ public class ProjectResourceTestBuilder { - private final ProjectResource.ProjectResourceBuilder builder; + private final ProjectResource.ProjectResourceBuilder builder; public ProjectResourceTestBuilder() { - this.builder = ProjectResource.builder(); + this.builder = (ProjectResource.ProjectResourceBuilder) ProjectResource.builder(); } public static ProjectResourceTestBuilder builder() { diff --git a/health-services/project/src/test/java/org/egov/project/helper/ProjectStaffTestBuilder.java b/health-services/project/src/test/java/org/egov/project/helper/ProjectStaffTestBuilder.java index 4e7437a0ff3..21d5fe001f9 100644 --- a/health-services/project/src/test/java/org/egov/project/helper/ProjectStaffTestBuilder.java +++ b/health-services/project/src/test/java/org/egov/project/helper/ProjectStaffTestBuilder.java @@ -1,16 +1,16 @@ package org.egov.project.helper; import org.egov.common.helper.AuditDetailsTestBuilder; -import org.egov.common.models.project.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.project.ProjectStaff; public class ProjectStaffTestBuilder { - private ProjectStaff.ProjectStaffBuilder builder; + private ProjectStaff.ProjectStaffBuilder builder; public ProjectStaffTestBuilder() { - this.builder = ProjectStaff.builder(); + this.builder = (ProjectStaff.ProjectStaffBuilder) ProjectStaff.builder(); } public static ProjectStaffTestBuilder builder() { diff --git a/health-services/project/src/test/java/org/egov/project/helper/TaskTestBuilder.java b/health-services/project/src/test/java/org/egov/project/helper/TaskTestBuilder.java index 95a7fb2c3b7..8cec710de7b 100644 --- a/health-services/project/src/test/java/org/egov/project/helper/TaskTestBuilder.java +++ b/health-services/project/src/test/java/org/egov/project/helper/TaskTestBuilder.java @@ -8,10 +8,10 @@ public class TaskTestBuilder { - private final Task.TaskBuilder builder; + private final Task.TaskBuilder builder; public TaskTestBuilder() { - this.builder = Task.builder(); + this.builder = (Task.TaskBuilder) Task.builder(); } public static TaskTestBuilder builder() { @@ -23,19 +23,22 @@ public Task build() { } public TaskTestBuilder withTask() { - this.builder.id("some-id").actualEndDate(100L).actualStartDate(100L) - .hasErrors(Boolean.FALSE) - .tenantId("default") + this.builder.actualEndDate(100L).actualStartDate(100L) .plannedStartDate(100L).plannedEndDate(101L) - .auditDetails(AuditDetailsTestBuilder.builder().withAuditDetails().build()) .address(AddressTestBuilder.builder().withAddress().build()) .resources(Arrays.asList(TaskResource.builder().tenantId("default").isDelivered(false) - .quantity(100L).productVariantId("v101").build(), + .quantity(100L).productVariantId("v101").build(), TaskResource.builder().tenantId("default").isDelivered(false) .quantity(100L).productVariantId("v101").build())) - .isDeleted(false).rowVersion(0).projectBeneficiaryId("some-id") .projectId("some-id").createdBy("some-id") - .createdDate(100L).status("status").build(); + .createdDate(100L).status("status") + .isDeleted(false).projectBeneficiaryId("some-id") + .rowVersion(0) + .hasErrors(Boolean.FALSE) + .tenantId("default") + .id("some-id") + .auditDetails(AuditDetailsTestBuilder.builder().withAuditDetails().build()) + .build(); return this; } } diff --git a/health-services/project/src/test/java/org/egov/project/service/ProjectBeneficiaryEnrichmentServiceUpdateTest.java b/health-services/project/src/test/java/org/egov/project/service/ProjectBeneficiaryEnrichmentServiceUpdateTest.java index 4d4abb69acf..fe4d3b9e597 100644 --- a/health-services/project/src/test/java/org/egov/project/service/ProjectBeneficiaryEnrichmentServiceUpdateTest.java +++ b/health-services/project/src/test/java/org/egov/project/service/ProjectBeneficiaryEnrichmentServiceUpdateTest.java @@ -1,5 +1,6 @@ package org.egov.project.service; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.project.BeneficiaryBulkRequest; import org.egov.common.models.project.ProjectBeneficiary; import org.egov.common.service.IdGenService; @@ -66,9 +67,9 @@ void setUp() throws Exception { private void mockFindById() { lenient().when(projectBeneficiaryRepository.findById( eq(projectBeneficiaryIds), - eq(false), - anyString()) - ).thenReturn(request.getProjectBeneficiaries()); + anyString(), + eq(false)) + ).thenReturn(SearchResponse.builder().response(request.getProjectBeneficiaries()).build()); } @Test @@ -98,7 +99,7 @@ void shouldUpdateTheRowVersionInTheResult() throws Exception { void shouldFetchExistingRecordsUsingId() throws Exception { mockFindById(); projectBeneficiaryEnrichmentService.update(request.getProjectBeneficiaries(), request); - verify(projectBeneficiaryRepository, times(1)).findById(anyList(), eq(false), anyString()); + verify(projectBeneficiaryRepository, times(1)).findById(anyList(), anyString(), eq(false)); } @Test diff --git a/health-services/project/src/test/java/org/egov/project/service/ProjectBeneficiaryServiceSearchTest.java b/health-services/project/src/test/java/org/egov/project/service/ProjectBeneficiaryServiceSearchTest.java index 4329a4c67e9..89caae1f1d0 100644 --- a/health-services/project/src/test/java/org/egov/project/service/ProjectBeneficiaryServiceSearchTest.java +++ b/health-services/project/src/test/java/org/egov/project/service/ProjectBeneficiaryServiceSearchTest.java @@ -2,11 +2,12 @@ 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.project.ProjectBeneficiary; import org.egov.project.helper.ProjectBeneficiaryTestBuilder; import org.egov.project.repository.ProjectBeneficiaryRepository; -import org.egov.project.web.models.BeneficiarySearchRequest; -import org.egov.project.web.models.ProjectBeneficiarySearch; +import org.egov.common.models.project.BeneficiarySearchRequest; +import org.egov.common.models.project.ProjectBeneficiarySearch; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -49,7 +50,7 @@ void setUp() throws QueryBuilderException { @DisplayName("should not raise exception if no search results are found") void shouldNotRaiseExceptionIfNoProjectBeneficiaryFound() throws Exception { when(projectBeneficiaryRepository.find(any(ProjectBeneficiarySearch.class), any(Integer.class), - any(Integer.class), any(String.class), eq(null), any(Boolean.class))).thenReturn(Collections.emptyList()); + any(Integer.class), any(String.class), eq(null), any(Boolean.class))).thenReturn(SearchResponse.builder().build()); ProjectBeneficiarySearch projectBeneficiarySearch = ProjectBeneficiarySearch.builder() .id(Collections.singletonList("ID101")).projectId(Collections.singletonList("some-id")).build(); BeneficiarySearchRequest beneficiarySearchRequest = BeneficiarySearchRequest.builder() @@ -64,7 +65,7 @@ void shouldNotRaiseExceptionIfNoProjectBeneficiaryFound() throws Exception { @DisplayName("should return project beneficiary if search criteria is matched") void shouldReturnProjectStaffIfSearchCriteriaIsMatched() throws Exception { when(projectBeneficiaryRepository.find(any(ProjectBeneficiarySearch.class), any(Integer.class), - any(Integer.class), any(String.class), eq(null), any(Boolean.class))).thenReturn(projectBeneficiary); + any(Integer.class), any(String.class), eq(null), any(Boolean.class))).thenReturn(SearchResponse.builder().response(projectBeneficiary).build()); projectBeneficiary.add(ProjectBeneficiaryTestBuilder.builder().withId().withId().withAuditDetails().build()); ProjectBeneficiarySearch projectBeneficiarySearch = ProjectBeneficiarySearch.builder() .id(Collections.singletonList("ID101")).projectId(Collections.singletonList("some-projectId")).build(); @@ -72,9 +73,9 @@ void shouldReturnProjectStaffIfSearchCriteriaIsMatched() throws Exception { .projectBeneficiary(projectBeneficiarySearch).requestInfo(RequestInfoTestBuilder.builder() .withCompleteRequestInfo().build()).build(); - List projectStaffs = projectBeneficiaryService.search(beneficiarySearchRequest, 10, 0, "default", null, false); + List projectBeneficiaries = projectBeneficiaryService.search(beneficiarySearchRequest, 10, 0, "default", null, false).getResponse(); - assertEquals(1, projectStaffs.size()); + assertEquals(1, projectBeneficiaries.size()); } @Test @@ -86,10 +87,10 @@ void shouldReturnFromCacheIfSearchCriteriaHasIdOnly() throws Exception { BeneficiarySearchRequest projectStaffSearchRequest = BeneficiarySearchRequest.builder() .projectBeneficiary(projectBeneficiarySearch).requestInfo(RequestInfoTestBuilder.builder() .withCompleteRequestInfo().build()).build(); - when(projectBeneficiaryRepository.findById(anyList(), anyBoolean(), anyString())).thenReturn(projectBeneficiary); + when(projectBeneficiaryRepository.findById(anyList(), anyString(), anyBoolean())).thenReturn(SearchResponse.builder().response(projectBeneficiary).build()); List projectBeneficiaries = projectBeneficiaryService.search(projectStaffSearchRequest, - 10, 0, null, null, true); + 10, 0, null, null, true).getResponse(); assertEquals(1, projectBeneficiaries.size()); } diff --git a/health-services/project/src/test/java/org/egov/project/service/ProjectBeneficiaryServiceUpdateTest.java b/health-services/project/src/test/java/org/egov/project/service/ProjectBeneficiaryServiceUpdateTest.java index ecd674abd25..805fba5c474 100644 --- a/health-services/project/src/test/java/org/egov/project/service/ProjectBeneficiaryServiceUpdateTest.java +++ b/health-services/project/src/test/java/org/egov/project/service/ProjectBeneficiaryServiceUpdateTest.java @@ -5,6 +5,7 @@ import digit.models.coremodels.mdms.MdmsCriteriaReq; import org.apache.commons.io.IOUtils; import org.egov.common.http.client.ServiceRequestClient; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.household.Household; import org.egov.common.models.household.HouseholdBulkResponse; import org.egov.common.models.household.HouseholdSearchRequest; @@ -158,9 +159,9 @@ private void mockValidateBeneficiarytId() { private void mockFindById() { lenient().when(projectBeneficiaryRepository.findById( eq(projectBeneficiaryIds), - eq(false), - anyString()) - ).thenReturn(request.getProjectBeneficiaries()); + anyString(), + eq(false)) + ).thenReturn(SearchResponse.builder().response(request.getProjectBeneficiaries()).build()); } private void mockMdms(String responseFileName) throws Exception { @@ -208,7 +209,7 @@ void shouldThrowExceptionIfFetchedRecordsCountDoesntMatchTheCountInRequest() thr mockServiceRequestClient(); mockMdms(HOUSEHOLD_RESPONSE_FILE_NAME); mockProjectFindIds(); - when(projectBeneficiaryRepository.findById(anyList(), eq(false), anyString())).thenReturn(Collections.emptyList()); + when(projectBeneficiaryRepository.findById(anyList(), anyString(), eq(false))).thenReturn(SearchResponse.builder().build()); assertThrows(CustomException.class, () -> projectBeneficiaryService.update(request, false)); } diff --git a/health-services/project/src/test/java/org/egov/project/service/ProjectFacilityServiceSearchTest.java b/health-services/project/src/test/java/org/egov/project/service/ProjectFacilityServiceSearchTest.java index 067d9e58f31..6eed8465ca5 100644 --- a/health-services/project/src/test/java/org/egov/project/service/ProjectFacilityServiceSearchTest.java +++ b/health-services/project/src/test/java/org/egov/project/service/ProjectFacilityServiceSearchTest.java @@ -4,8 +4,8 @@ import org.egov.common.models.project.ProjectFacility; import org.egov.project.helper.ProjectFacilityTestBuilder; import org.egov.project.repository.ProjectFacilityRepository; -import org.egov.project.web.models.ProjectFacilitySearch; -import org.egov.project.web.models.ProjectFacilitySearchRequest; +import org.egov.common.models.project.ProjectFacilitySearch; +import org.egov.common.models.project.ProjectFacilitySearchRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/health-services/project/src/test/java/org/egov/project/service/ProjectStaffServiceSearchTest.java b/health-services/project/src/test/java/org/egov/project/service/ProjectStaffServiceSearchTest.java index 57d1fef75b8..36aa7100f8d 100644 --- a/health-services/project/src/test/java/org/egov/project/service/ProjectStaffServiceSearchTest.java +++ b/health-services/project/src/test/java/org/egov/project/service/ProjectStaffServiceSearchTest.java @@ -4,8 +4,8 @@ import org.egov.common.models.project.ProjectStaff; import org.egov.project.helper.ProjectStaffTestBuilder; import org.egov.project.repository.ProjectStaffRepository; -import org.egov.project.web.models.ProjectStaffSearch; -import org.egov.project.web.models.ProjectStaffSearchRequest; +import org.egov.common.models.project.ProjectStaffSearch; +import org.egov.common.models.project.ProjectStaffSearchRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/health-services/project/src/test/java/org/egov/project/service/ProjectTaskServiceSearchTest.java b/health-services/project/src/test/java/org/egov/project/service/ProjectTaskServiceSearchTest.java index c220774ad81..418f9321695 100644 --- a/health-services/project/src/test/java/org/egov/project/service/ProjectTaskServiceSearchTest.java +++ b/health-services/project/src/test/java/org/egov/project/service/ProjectTaskServiceSearchTest.java @@ -2,6 +2,7 @@ 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.project.Task; import org.egov.common.models.project.TaskSearch; import org.egov.common.models.project.TaskSearchRequest; @@ -55,7 +56,7 @@ void shouldOnlySearchByIdIfOnlyIdIsPresent() { .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .task(TaskSearch.builder().id(Collections.singletonList("some-id")).build()).build(); when(projectTaskRepository.findById(anyList(), eq("id"), anyBoolean())) - .thenReturn(Collections.emptyList()); + .thenReturn(SearchResponse.builder().build()); projectTaskService.search(taskSearchRequest.getTask(), 10, 0, "default", null, false); @@ -71,7 +72,7 @@ void shouldOnlySearchByClientReferenceIdIfOnlyClientReferenceIdIsPresent() { .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .task(TaskSearch.builder().clientReferenceId(Collections.singletonList("some-id")).build()).build(); when(projectTaskRepository.findById(anyList(), eq("clientReferenceId"), anyBoolean())) - .thenReturn(Collections.emptyList()); + .thenReturn(SearchResponse.builder().build()); projectTaskService.search(taskSearchRequest.getTask(), 10, 0, "default", null, false); @@ -87,7 +88,7 @@ void shouldNotCallFindByIfIfMoreParametersAreAvailable() throws QueryBuilderExce .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .task(TaskSearch.builder().id(Collections.singletonList("some-id")).clientReferenceId(Collections.singletonList("some-id")).build()).build(); when(projectTaskRepository.find(any(TaskSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(Collections.emptyList()); + anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(SearchResponse.builder().build()); projectTaskService.search(taskSearchRequest.getTask(), 10, 0, "default", 0L, false); @@ -103,7 +104,7 @@ void shouldCallFindIfMoreParametersAreAvailable() throws QueryBuilderException { .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .task(TaskSearch.builder().id(Collections.singletonList("some-id")).clientReferenceId(Collections.singletonList("some-id")).build()).build(); when(projectTaskRepository.find(any(TaskSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(Collections.emptyList()); + anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(SearchResponse.builder().build()); projectTaskService.search(taskSearchRequest.getTask(), 10, 0, "default", 0L, false); @@ -117,7 +118,7 @@ void shouldCallFindIfMoreParametersAreAvailable() throws QueryBuilderException { @DisplayName("should not raise exception if no search results are found") void shouldNotRaiseExceptionIfNoProjectTaskFound() throws Exception { when(projectTaskRepository.find(any(TaskSearch.class), any(Integer.class), - any(Integer.class), any(String.class), eq(null), any(Boolean.class))).thenReturn(Collections.emptyList()); + any(Integer.class), any(String.class), eq(null), any(Boolean.class))).thenReturn(SearchResponse.builder().build()); TaskSearchRequest taskSearchRequest = TaskSearchRequest.builder() .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .task(TaskSearch.builder().id(Collections.singletonList("someid")).clientReferenceId(Collections.singletonList("some-id")).build()).build(); @@ -130,7 +131,7 @@ void shouldNotRaiseExceptionIfNoProjectTaskFound() throws Exception { @Test @DisplayName("should not raise exception if no search results are found for search by id") void shouldNotRaiseExceptionIfNoProjectTaskFoundForSearchById() throws Exception { - when(projectTaskRepository.findById(anyList(), anyString(), anyBoolean())).thenReturn(Collections.emptyList()); + when(projectTaskRepository.findById(anyList(), anyString(), anyBoolean())).thenReturn(SearchResponse.builder().build()); TaskSearchRequest taskSearchRequest = TaskSearchRequest.builder() .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .task(TaskSearch.builder().id(Collections.singletonList("some-id")).build()).build(); @@ -144,13 +145,13 @@ void shouldNotRaiseExceptionIfNoProjectTaskFoundForSearchById() throws Exception void shouldReturnProjectStaffIfSearchCriteriaIsMatched() throws Exception { projectTasks.add(TaskTestBuilder.builder().withTask().build()); when(projectTaskRepository.find(any(TaskSearch.class), any(Integer.class), - any(Integer.class), any(String.class), eq(null), any(Boolean.class))).thenReturn(projectTasks); + any(Integer.class), any(String.class), eq(null), any(Boolean.class))).thenReturn(SearchResponse.builder().response(projectTasks).build()); TaskSearchRequest taskSearchRequest = TaskSearchRequest.builder() .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .task(TaskSearch.builder().id(Collections.singletonList("some-id")).projectId(Collections.singletonList("some-id")).build()).build(); List projectTasks = projectTaskService.search(taskSearchRequest.getTask(), 10, 0, - "default", null, false); + "default", null, false).getResponse(); assertEquals(1, projectTasks.size()); } @@ -159,13 +160,13 @@ void shouldReturnProjectStaffIfSearchCriteriaIsMatched() throws Exception { @DisplayName("should return from find by id if search criteria has id only") void shouldReturnFromFindByIdIfSearchCriteriaHasIdOnly() throws Exception { projectTasks.add(TaskTestBuilder.builder().withTask().build()); - when(projectTaskRepository.findById(anyList(), anyString(), anyBoolean())).thenReturn(projectTasks); + when(projectTaskRepository.findById(anyList(), anyString(), anyBoolean())).thenReturn(SearchResponse.builder().response(projectTasks).build()); TaskSearchRequest taskSearchRequest = TaskSearchRequest.builder() .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .task(TaskSearch.builder().id(Collections.singletonList("some-id")).build()).build(); List projectTasks = projectTaskService.search(taskSearchRequest.getTask(), 10, 0, - "default", null, false); + "default", null, false).getResponse(); assertEquals(1, projectTasks.size()); } diff --git a/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectBeneficiaryApiControllerTest.java b/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectBeneficiaryApiControllerTest.java index 8c787e91e2d..264d9336590 100644 --- a/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectBeneficiaryApiControllerTest.java +++ b/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectBeneficiaryApiControllerTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.egov.common.helper.RequestInfoTestBuilder; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.project.BeneficiaryBulkResponse; import org.egov.common.models.project.BeneficiaryRequest; import org.egov.common.models.project.BeneficiaryResponse; @@ -16,8 +17,8 @@ import org.egov.project.service.ProjectService; import org.egov.project.service.ProjectStaffService; import org.egov.project.service.ProjectTaskService; -import org.egov.project.web.models.BeneficiarySearchRequest; -import org.egov.project.web.models.ProjectBeneficiarySearch; +import org.egov.common.models.project.BeneficiarySearchRequest; +import org.egov.common.models.project.ProjectBeneficiarySearch; import org.egov.tracer.model.CustomException; import org.egov.tracer.model.ErrorRes; import org.junit.jupiter.api.DisplayName; @@ -32,7 +33,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -225,7 +225,7 @@ void shouldAcceptSearchRequestAndReturnProjectStaff() throws Exception { any(Integer.class), any(String.class), any(Long.class), - any(Boolean.class))).thenReturn(Arrays.asList(ProjectBeneficiaryTestBuilder.builder().withId().withAuditDetails().build())); + any(Boolean.class))).thenReturn(SearchResponse.builder().response(Arrays.asList(ProjectBeneficiaryTestBuilder.builder().withId().withAuditDetails().build())).build()); final MvcResult result = mockMvc.perform(post( "/beneficiary/v1/_search?limit=10&offset=100&tenantId=default&lastChangedSince=1234322&includeDeleted=false") diff --git a/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectFacilityApiControllerTest.java b/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectFacilityApiControllerTest.java index 156b3a53a2a..e6a97cf70c8 100644 --- a/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectFacilityApiControllerTest.java +++ b/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectFacilityApiControllerTest.java @@ -18,8 +18,8 @@ import org.egov.project.service.ProjectService; import org.egov.project.service.ProjectStaffService; import org.egov.project.service.ProjectTaskService; -import org.egov.project.web.models.ProjectFacilitySearch; -import org.egov.project.web.models.ProjectFacilitySearchRequest; +import org.egov.common.models.project.ProjectFacilitySearch; +import org.egov.common.models.project.ProjectFacilitySearchRequest; import org.egov.tracer.model.ErrorRes; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; diff --git a/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectStaffApiControllerTest.java b/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectStaffApiControllerTest.java index fa693c58e90..1e1b5409485 100644 --- a/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectStaffApiControllerTest.java +++ b/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectStaffApiControllerTest.java @@ -16,8 +16,8 @@ import org.egov.project.service.ProjectService; import org.egov.project.service.ProjectStaffService; import org.egov.project.service.ProjectTaskService; -import org.egov.project.web.models.ProjectStaffSearch; -import org.egov.project.web.models.ProjectStaffSearchRequest; +import org.egov.common.models.project.ProjectStaffSearch; +import org.egov.common.models.project.ProjectStaffSearchRequest; import org.egov.tracer.model.ErrorRes; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -31,7 +31,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectTaskApiControllerTest.java b/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectTaskApiControllerTest.java index 9da98813641..4288828d158 100644 --- a/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectTaskApiControllerTest.java +++ b/health-services/project/src/test/java/org/egov/project/web/controllers/ProjectTaskApiControllerTest.java @@ -2,6 +2,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.egov.common.helper.RequestInfoTestBuilder; +import org.egov.common.models.core.SearchResponse; +import org.egov.common.models.project.Task; import org.egov.common.models.project.TaskRequest; import org.egov.common.models.project.TaskSearch; import org.egov.common.models.project.TaskSearchRequest; @@ -23,8 +25,6 @@ import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; -import java.util.Collections; - import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; @@ -81,7 +81,7 @@ void shouldPassSearchRequestIfQueryParamsArePresent() throws Exception { .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .task(TaskSearch.builder().build()).build(); when(projectTaskService.search(any(TaskSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(Collections.emptyList()); + anyInt(), anyString(), any(), any())).thenReturn(SearchResponse.builder().build()); mockMvc.perform(post("/task/v1/_search?limit=10&offset=0&tenantId=default").contentType(MediaType .APPLICATION_JSON).content(objectMapper.writeValueAsString(taskSearchRequest))) @@ -95,7 +95,7 @@ void shouldFailSearchRequestIfQueryParamsAreMissing() throws Exception { .requestInfo(RequestInfoTestBuilder.builder().withCompleteRequestInfo().build()) .task(TaskSearch.builder().build()).build(); when(projectTaskService.search(any(TaskSearch.class), anyInt(), - anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(Collections.emptyList()); + anyInt(), anyString(), anyLong(), anyBoolean())).thenReturn(SearchResponse.builder().build()); mockMvc.perform(post("/task/v1/_search?limit=10&offset=0").contentType(MediaType .APPLICATION_JSON).content(objectMapper.writeValueAsString(taskSearchRequest))) diff --git a/health-services/referralmanagement/CHANGELOG.md b/health-services/referralmanagement/CHANGELOG.md index 6bc172d8ccb..55b1ba23b50 100644 --- a/health-services/referralmanagement/CHANGELOG.md +++ b/health-services/referralmanagement/CHANGELOG.md @@ -1,9 +1,6 @@ # Changelog All notable changes to this module will be documented in this file. -## To be released -- In SideEffectSearch, taskId, taskClientReferenceId updated to accept list of search entities instead of single entity - ## 1.0.1 - 2024-02-28 - Added functionality for referrals handled by health facilities, referred to as "hfreferral". diff --git a/health-services/referralmanagement/pom.xml b/health-services/referralmanagement/pom.xml index a56de1feddf..0a7b3449512 100644 --- a/health-services/referralmanagement/pom.xml +++ b/health-services/referralmanagement/pom.xml @@ -8,14 +8,15 @@ referralmanagement 1.0.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 @@ -45,12 +46,12 @@ org.egov.common health-services-common - 1.0.12-SNAPSHOT + 1.0.16-SNAPSHOT org.egov.common health-services-models - 1.0.19-dev3-SNAPSHOT + 1.0.20-SNAPSHOT compile @@ -67,51 +68,46 @@ redis.clients jedis - - org.flywaydb - flyway-core - org.springframework.boot spring-boot-devtools + + 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 - io.swagger swagger-core 1.5.18 - - - org.egov.services - digit-models - 1.0.0-SNAPSHOT - org.projectlombok lombok + ${lombok.version} true com.fasterxml.jackson.datatype jackson-datatype-jsr310 - - - javax.validation - validation-api - diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/config/MainConfiguration.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/config/MainConfiguration.java index 86310611791..dfd9401a2d7 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/config/MainConfiguration.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/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}) @@ -79,8 +79,7 @@ public RedisConnectionFactory redisConnectionFactory() { @Bean public RedisTemplate redisTemplate(@Qualifier("redisObjectMapper") ObjectMapper redisObjectMapper, RedisConnectionFactory redisConnectionFactory) { - Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(Object.class); - serializer.setObjectMapper(redisObjectMapper); + Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(redisObjectMapper, Object.class); RedisTemplate redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(new StringRedisSerializer()); diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java index 9bea5eaf7fd..ade10b1392e 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/ReferralRepository.java @@ -1,7 +1,5 @@ package org.egov.referralmanagement.repository; -import static org.egov.common.utils.CommonUtils.getIdMethod; - import java.lang.reflect.Method; import java.util.HashMap; import java.util.List; @@ -9,10 +7,12 @@ 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.repository.GenericRepository; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.referralmanagement.Referral; import org.egov.common.models.referralmanagement.ReferralSearch; import org.egov.common.producer.Producer; @@ -23,7 +23,8 @@ import org.springframework.stereotype.Repository; import org.springframework.util.ReflectionUtils; -import lombok.extern.slf4j.Slf4j; +import static org.egov.common.utils.CommonUtils.constructTotalCountCTEAndReturnResult; +import static org.egov.common.utils.CommonUtils.getIdMethod; @Repository @Slf4j @@ -38,7 +39,7 @@ protected ReferralRepository(Producer producer, NamedParameterJdbcTemplate named super(producer, namedParameterJdbcTemplate, redisTemplate, selectQueryBuilder, rowMapper, Optional.of("referral")); } - public List find(ReferralSearch searchObject, Integer limit, Integer offset, String tenantId, + public SearchResponse find(ReferralSearch searchObject, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted) { String query = "SELECT r.id, r.clientreferenceid, r.tenantid, r.projectbeneficiaryid, r.projectbeneficiaryclientreferenceid, r.referrerid, r.recipientid, r.recipienttype, r.reasons, r.sideeffectid, r.referralCode, r.sideeffectclientreferenceid, r.createdby, r.createdtime, r.lastmodifiedby, r.lastmodifiedtime, r.clientcreatedby, r.clientcreatedtime, r.clientlastmodifiedby, r.clientlastmodifiedtime, r.rowversion, r.isdeleted, r.additionaldetails, se.id sId, se.clientreferenceid sClientReferenceId, se.tenantid sTenantId, se.taskid sTaskId, se.taskclientreferenceid sTaskClientReferenceId, se.projectbeneficiaryId sProjectBeneficiaryId, se.projectBeneficiaryClientReferenceId sProjectBeneficiaryClientReferenceId, se.symptoms sSymptoms, se.additionalDetails sAdditionalDetails, se.createdby sCreatedBy, se.createdtime sCreatedTime, se.lastmodifiedby sLastModifiedBy, se.lastmodifiedtime sLastModifiedTime, se.clientCreatedBy sClientCreatedBy, se.clientcreatedtime sClientCreatedTime, se.clientlastmodifiedby sClientLastModifiedBy, se.clientlastmodifiedtime sClientLastModifiedTime, se.rowversion sRowVersion, se.isdeleted sIsDeleted FROM referral r left join side_effect se on r.sideEffectClientReferenceid = se.clientreferenceid"; @@ -59,17 +60,20 @@ public List find(ReferralSearch searchObject, Integer limit, Integer o if (lastChangedSince != null) { query = query + "and r.lastModifiedTime>=:lastModifiedTime "; } - query = query + "ORDER BY r.createdtime DESC LIMIT :limit OFFSET :offset"; paramsMap.put("tenantId", tenantId); paramsMap.put("isDeleted", includeDeleted); paramsMap.put("lastModifiedTime", lastChangedSince); + + Long totalCount = constructTotalCountCTEAndReturnResult(query, paramsMap, this.namedParameterJdbcTemplate); + + query = query + "ORDER BY r.createdtime ASC LIMIT :limit OFFSET :offset"; paramsMap.put("limit", limit); paramsMap.put("offset", offset); List referralList = this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper); - return referralList; + return SearchResponse.builder().response(referralList).totalCount(totalCount).build(); } - public List findById(List ids, Boolean includeDeleted, String columnName) { + public SearchResponse findById(List ids, String columnName, Boolean includeDeleted) { List objFound = findInCache(ids).stream() .filter(entity -> entity.getIsDeleted().equals(includeDeleted)) .collect(Collectors.toList()); @@ -79,7 +83,7 @@ public List findById(List ids, Boolean includeDeleted, String .map(obj -> (String) ReflectionUtils.invokeMethod(idMethod, obj)) .collect(Collectors.toList())); if (ids.isEmpty()) { - return objFound; + return SearchResponse.builder().response(objFound).build(); } } @@ -93,6 +97,6 @@ public List findById(List ids, Boolean includeDeleted, String objFound.addAll(referralList); putInCache(objFound); - return objFound; + return SearchResponse.builder().response(objFound).build(); } } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/SideEffectRepository.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/SideEffectRepository.java index f4bc2d77de9..91ea1628d32 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/SideEffectRepository.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/SideEffectRepository.java @@ -1,5 +1,6 @@ package org.egov.referralmanagement.repository; +import static org.egov.common.utils.CommonUtils.constructTotalCountCTEAndReturnResult; import static org.egov.common.utils.CommonUtils.getIdList; import static org.egov.common.utils.CommonUtils.getIdMethod; @@ -16,6 +17,7 @@ import org.egov.common.data.query.builder.QueryFieldChecker; import org.egov.common.data.query.builder.SelectQueryBuilder; import org.egov.common.data.repository.GenericRepository; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.project.Task; import org.egov.common.models.referralmanagement.sideeffect.SideEffect; import org.egov.common.models.referralmanagement.sideeffect.SideEffectSearch; @@ -67,7 +69,7 @@ public Map> fetchSideEffects(List taskList) { return idToObjMap; } - public List find(SideEffectSearch searchObject, Integer limit, Integer offset, String tenantId, + public SearchResponse find(SideEffectSearch searchObject, Integer limit, Integer offset, String tenantId, Long lastChangedSince, Boolean includeDeleted) { String query = "SELECT * FROM side_effect ae LEFT JOIN project_task pt ON ae.taskId = pt.id "; @@ -86,14 +88,18 @@ public List find(SideEffectSearch searchObject, Integer limit, Integ if (lastChangedSince != null) { query = query + "and as.lastModifiedTime>=:lastModifiedTime "; } - query = query + "ORDER BY ae.createdtime DESC LIMIT :limit OFFSET :offset"; paramsMap.put("tenantId", tenantId); paramsMap.put("isDeleted", includeDeleted); paramsMap.put("lastModifiedTime", lastChangedSince); + + Long totalCount = constructTotalCountCTEAndReturnResult(query, paramsMap, this.namedParameterJdbcTemplate); + + query = query + "ORDER BY ae.createdtime ASC LIMIT :limit OFFSET :offset"; paramsMap.put("limit", limit); paramsMap.put("offset", offset); + List sideEffectList = this.namedParameterJdbcTemplate.query(query, paramsMap, this.rowMapper); - return sideEffectList; + return SearchResponse.builder().response(sideEffectList).totalCount(totalCount).build(); } public List findById(List ids, String columnName, Boolean includeDeleted) { diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/HFReferralRowMapper.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/HFReferralRowMapper.java index 3f9b5084872..5456cd9179c 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/HFReferralRowMapper.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/HFReferralRowMapper.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import digit.models.coremodels.AuditDetails; -import org.egov.common.models.project.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.referralmanagement.hfreferral.HFReferral; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.RowMapper; diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/ReferralRowMapper.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/ReferralRowMapper.java index 6da3dde5fab..181aa1b6a55 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/ReferralRowMapper.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/ReferralRowMapper.java @@ -1,75 +1,97 @@ package org.egov.referralmanagement.repository.rowmapper; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import digit.models.coremodels.AuditDetails; -import org.egov.common.models.project.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.referralmanagement.Referral; import org.egov.common.models.referralmanagement.sideeffect.SideEffect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Component; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; - @Component public class ReferralRowMapper implements RowMapper { @Autowired ObjectMapper objectMapper; + /** + * Maps a row of the ResultSet to a Referral object. + * + * @param resultSet the ResultSet containing the data from the database + * @param i the current row number + * @return a Referral object mapped from the ResultSet + * @throws SQLException if an SQL exception occurs + */ @Override public Referral mapRow(ResultSet resultSet, int i) throws SQLException { try { + // Initialize sideEffect to null SideEffect sideEffect = null; + // Check if side effect client reference ID is not null String sideEffectClientReferenceId = resultSet.getString("sideEffectClientReferenceId"); - if(sideEffectClientReferenceId != null) { + if (sideEffectClientReferenceId != null) { + // Map side effect AuditDetails AuditDetails sideEffectAuditDetails = AuditDetails.builder() .createdBy(resultSet.getString("sCreatedBy")) .createdTime(resultSet.getLong("sCreatedTime")) .lastModifiedBy(resultSet.getString("sLastModifiedBy")) .lastModifiedTime(resultSet.getLong("sLastModifiedTime")) .build(); + // Map side effect client AuditDetails AuditDetails sideEffectClientAuditDetails = AuditDetails.builder() .createdBy(resultSet.getString("sClientCreatedBy")) .createdTime(resultSet.getLong("sClientCreatedTime")) .lastModifiedBy(resultSet.getString("sClientLastModifiedBy")) .lastModifiedTime(resultSet.getLong("sClientLastModifiedTime")) .build(); + // Build SideEffect object sideEffect = SideEffect.builder() .id(resultSet.getString("sId")) + .additionalFields(resultSet.getString("sAdditionalDetails") == null ? null : objectMapper + .readValue(resultSet.getString("sAdditionalDetails"), AdditionalFields.class)) + .rowVersion(resultSet.getInt("sRowVersion")) + .isDeleted(resultSet.getBoolean("sIsDeleted")) + .auditDetails(sideEffectAuditDetails) + .tenantId(resultSet.getString("sTenantId")) + .clientAuditDetails(sideEffectClientAuditDetails) .clientReferenceId(resultSet.getString("sClientReferenceId")) .taskId(resultSet.getString("sTaskId")) .taskClientReferenceId(resultSet.getString("sTaskClientReferenceId")) .projectBeneficiaryId(resultSet.getString("sProjectBeneficiaryId")) .projectBeneficiaryClientReferenceId(resultSet.getString("sProjectBeneficiaryClientReferenceId")) - .tenantId(resultSet.getString("sTenantId")) .symptoms(resultSet.getString("sSymptoms") == null ? null : objectMapper .readValue(resultSet.getString("sSymptoms"), ArrayList.class)) - .additionalFields(resultSet.getString("sAdditionalDetails") == null ? null : objectMapper - .readValue(resultSet.getString("sAdditionalDetails"), AdditionalFields.class)) - .rowVersion(resultSet.getInt("sRowVersion")) - .isDeleted(resultSet.getBoolean("sIsDeleted")) - .auditDetails(sideEffectAuditDetails) - .clientAuditDetails(sideEffectClientAuditDetails) .build(); } + // Map main Referral AuditDetails AuditDetails auditDetails = AuditDetails.builder() .createdBy(resultSet.getString("createdBy")) .createdTime(resultSet.getLong("createdTime")) .lastModifiedBy(resultSet.getString("lastModifiedBy")) .lastModifiedTime(resultSet.getLong("lastModifiedTime")) .build(); - AuditDetails clientAuditDetails= AuditDetails.builder() + // Map main Referral client AuditDetails + AuditDetails clientAuditDetails = AuditDetails.builder() .createdBy(resultSet.getString("clientCreatedBy")) .createdTime(resultSet.getLong("clientCreatedTime")) .lastModifiedBy(resultSet.getString("clientLastModifiedBy")) .lastModifiedTime(resultSet.getLong("clientLastModifiedTime")) .build(); + // Build Referral object return Referral.builder() .id(resultSet.getString("id")) + .additionalFields(resultSet.getString("additionalDetails") == null ? null : objectMapper + .readValue(resultSet.getString("additionalDetails"), AdditionalFields.class)) + .rowVersion(resultSet.getInt("rowversion")) + .isDeleted(resultSet.getBoolean("isdeleted")) + .auditDetails(auditDetails) + .clientAuditDetails(clientAuditDetails) .clientReferenceId(resultSet.getString("clientreferenceid")) .projectBeneficiaryId(resultSet.getString("projectBeneficiaryId")) .projectBeneficiaryClientReferenceId(resultSet.getString("projectbeneficiaryclientreferenceid")) @@ -80,14 +102,9 @@ public Referral mapRow(ResultSet resultSet, int i) throws SQLException { .referralCode(resultSet.getString("referralCode")) .tenantId(resultSet.getString("tenantid")) .reasons(resultSet.getString("reasons") == null ? null : objectMapper.readValue(resultSet.getString("reasons"), ArrayList.class)) - .additionalFields(resultSet.getString("additionalDetails") == null ? null : objectMapper - .readValue(resultSet.getString("additionalDetails"), AdditionalFields.class)) - .rowVersion(resultSet.getInt("rowversion")) - .isDeleted(resultSet.getBoolean("isdeleted")) - .auditDetails(auditDetails) - .clientAuditDetails(clientAuditDetails) .build(); } catch (JsonProcessingException e) { + // Wrap JsonProcessingException into RuntimeException throw new RuntimeException(e); } } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/SideEffectRowMapper.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/SideEffectRowMapper.java index 3fdae4349ea..3832d8bd7e3 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/SideEffectRowMapper.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/repository/rowmapper/SideEffectRowMapper.java @@ -1,56 +1,72 @@ package org.egov.referralmanagement.repository.rowmapper; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import digit.models.coremodels.AuditDetails; -import org.egov.common.models.project.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.referralmanagement.sideeffect.SideEffect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Component; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; - @Component public class SideEffectRowMapper implements RowMapper { @Autowired ObjectMapper objectMapper; + /** + * Maps a row of the ResultSet to a SideEffect object. + * + * @param resultSet the ResultSet containing the data from the database + * @param i the current row number + * @return a SideEffect object mapped from the ResultSet + * @throws SQLException if an SQL exception occurs + */ @Override public SideEffect mapRow(ResultSet resultSet, int i) throws SQLException { try { + // Mapping AuditDetails AuditDetails auditDetails = AuditDetails.builder() .createdBy(resultSet.getString("createdBy")) .createdTime(resultSet.getLong("createdTime")) .lastModifiedBy(resultSet.getString("lastModifiedBy")) .lastModifiedTime(resultSet.getLong("lastModifiedTime")) .build(); + + // Mapping client AuditDetails AuditDetails clientAuditDetails = AuditDetails.builder() .createdBy(resultSet.getString("clientCreatedBy")) .createdTime(resultSet.getLong("clientCreatedTime")) .lastModifiedBy(resultSet.getString("clientLastModifiedBy")) .lastModifiedTime(resultSet.getLong("clientLastModifiedTime")) .build(); + + // Building SideEffect object return SideEffect.builder() .id(resultSet.getString("id")) + .rowVersion(resultSet.getInt("rowversion")) + .isDeleted(resultSet.getBoolean("isdeleted")) + .auditDetails(auditDetails) + .additionalFields(resultSet.getString("additionalDetails") == null ? null : objectMapper + .readValue(resultSet.getString("additionalDetails"), AdditionalFields.class)) + .clientAuditDetails(clientAuditDetails) .clientReferenceId(resultSet.getString("clientreferenceid")) .taskId(resultSet.getString("taskId")) .taskClientReferenceId(resultSet.getString("taskClientreferenceid")) .projectBeneficiaryId(resultSet.getString("projectBeneficiaryId")) .projectBeneficiaryClientReferenceId(resultSet.getString("projectBeneficiaryClientReferenceId")) .tenantId(resultSet.getString("tenantid")) - .symptoms(resultSet.getString("symptoms") == null ? null : objectMapper.readValue(resultSet.getString("symptoms"), ArrayList.class)) - .additionalFields(resultSet.getString("additionalDetails") == null ? null : objectMapper - .readValue(resultSet.getString("additionalDetails"), AdditionalFields.class)) - .rowVersion(resultSet.getInt("rowversion")) - .isDeleted(resultSet.getBoolean("isdeleted")) - .auditDetails(auditDetails) - .clientAuditDetails(clientAuditDetails) + // Deserializing JSON array stored in the 'symptoms' column to ArrayList + .symptoms(resultSet.getString("symptoms") == null ? null : + objectMapper.readValue(resultSet.getString("symptoms"), ArrayList.class)) .build(); } catch (JsonProcessingException e) { + // Wrapping JsonProcessingException into SQLException throw new SQLException(e); } } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java index 84351023b51..f3ca4fa075d 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/DownsyncService.java @@ -47,202 +47,197 @@ @Service public class DownsyncService { - - private ServiceRequestClient restClient; - - private ReferralManagementConfiguration configs; - - private NamedParameterJdbcTemplate jdbcTemplate; - - private SideEffectService sideEffectService; - - private ReferralManagementService referralService; - - @Autowired - public DownsyncService( ServiceRequestClient serviceRequestClient, - ReferralManagementConfiguration referralManagementConfiguration, - NamedParameterJdbcTemplate jdbcTemplate, - SideEffectService sideEffectService, - ReferralManagementService referralService) { - - this.restClient = serviceRequestClient; - this.configs = referralManagementConfiguration; - this.jdbcTemplate = jdbcTemplate; - this.sideEffectService=sideEffectService; - this.referralService=referralService; - - } - /** - * - * @param downsyncRequest - * @return Downsync - */ - public Downsync prepareDownsyncData(DownsyncRequest downsyncRequest) { + private ServiceRequestClient restClient; - Downsync downsync = new Downsync(); + private ReferralManagementConfiguration configs; - List householdIds = null; - Set individualIds = null; - List individualClientRefIds = null; - List beneficiaryClientRefIds = null; - List taskClientRefIds = null; + private NamedParameterJdbcTemplate jdbcTemplate; - downsync.setDownsyncCriteria(downsyncRequest.getDownsyncCriteria()); - /* search household */ - householdIds = searchHouseholds(downsyncRequest, downsync); + private SideEffectService sideEffectService; - if (!CollectionUtils.isEmpty(householdIds)) - /* search household member using household ids */ - individualIds = searchMembers(downsyncRequest, downsync, householdIds); + private ReferralManagementService referralService; - if (!CollectionUtils.isEmpty(individualIds)) { + @Autowired + public DownsyncService(ServiceRequestClient serviceRequestClient, + ReferralManagementConfiguration referralManagementConfiguration, + NamedParameterJdbcTemplate jdbcTemplate, + SideEffectService sideEffectService, + ReferralManagementService referralService) { - /* search individuals using individual ids */ - individualClientRefIds = searchIndividuals(downsyncRequest, downsync, individualIds); - } + this.restClient = serviceRequestClient; + this.configs = referralManagementConfiguration; + this.jdbcTemplate = jdbcTemplate; + this.sideEffectService = sideEffectService; + this.referralService = referralService; - if (!CollectionUtils.isEmpty(individualClientRefIds)) { - /* search beneficiary using individual ids */ - beneficiaryClientRefIds = searchBeneficiaries(downsyncRequest, downsync, individualClientRefIds); - } + } - if (!CollectionUtils.isEmpty(beneficiaryClientRefIds)) { + /** + * @param downsyncRequest + * @return Downsync + */ + public Downsync prepareDownsyncData(DownsyncRequest downsyncRequest) { - /* search tasks using beneficiary uuids */ - taskClientRefIds = searchTasks(downsyncRequest, downsync, beneficiaryClientRefIds); + Downsync downsync = new Downsync(); - /* ref search */ - referralSearch(downsyncRequest, downsync, beneficiaryClientRefIds); - } + List householdIds = null; + Set individualIds = null; + List individualClientRefIds = null; + List beneficiaryClientRefIds = null; + List taskClientRefIds = null; - if (!CollectionUtils.isEmpty(taskClientRefIds)) { + downsync.setDownsyncCriteria(downsyncRequest.getDownsyncCriteria()); + /* search household */ + householdIds = searchHouseholds(downsyncRequest, downsync); - searchSideEffect(downsyncRequest, downsync, taskClientRefIds); - } + if (!CollectionUtils.isEmpty(householdIds)) + /* search household member using household ids */ + individualIds = searchMembers(downsyncRequest, downsync, householdIds); - return downsync; - } + if (!CollectionUtils.isEmpty(individualIds)) { - /** - * - * @param downsyncRequest - * @param downsync - * @return - */ - private List searchHouseholds(DownsyncRequest downsyncRequest, Downsync downsync) { + /* search individuals using individual ids */ + individualClientRefIds = searchIndividuals(downsyncRequest, downsync, individualIds); + } - DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); - RequestInfo requestInfo = downsyncRequest.getRequestInfo(); - - StringBuilder householdUrl = new StringBuilder(configs.getHouseholdHost()) - .append(configs.getHouseholdSearchUrl()); - householdUrl = appendUrlParams(householdUrl, criteria, null, null); - - HouseholdSearch householdSearch = HouseholdSearch.builder() - .localityCode(criteria.getLocality()) - .build(); - - HouseholdSearchRequest searchRequest = HouseholdSearchRequest.builder() - .household(householdSearch) - .requestInfo(requestInfo) - .build(); - - HouseholdBulkResponse res = restClient.fetchResult(householdUrl, searchRequest, HouseholdBulkResponse.class); - List households = res.getHouseholds(); - downsync.setHouseholds(households); - downsync.getDownsyncCriteria().setTotalCount(res.getTotalCount()); - - if(CollectionUtils.isEmpty(households)) - return Collections.emptyList(); - - return households.stream().map(Household::getId).collect(Collectors.toList()); - } + if (!CollectionUtils.isEmpty(individualClientRefIds)) { + /* search beneficiary using individual ids */ + beneficiaryClientRefIds = searchBeneficiaries(downsyncRequest, downsync, individualClientRefIds); + } - /** - * - * @param downsyncRequest - * @param downsync - * @param individualIds - * @return individual ClientReferenceIds - */ - private List searchIndividuals(DownsyncRequest downsyncRequest, Downsync downsync, - Set individualIds) { + if (!CollectionUtils.isEmpty(beneficiaryClientRefIds)) { - DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); - RequestInfo requestInfo = downsyncRequest.getRequestInfo(); + /* search tasks using beneficiary uuids */ + taskClientRefIds = searchTasks(downsyncRequest, downsync, beneficiaryClientRefIds); - StringBuilder url = new StringBuilder(configs.getIndividualHost()) - .append(configs.getIndividualSearchUrl()); - url = appendUrlParams(url, criteria, 0, individualIds.size()); - - IndividualSearch individualSearch = IndividualSearch.builder() - .id(new ArrayList<>(individualIds)) - .build(); - - IndividualSearchRequest searchRequest = IndividualSearchRequest.builder() - .individual(individualSearch) - .requestInfo(requestInfo) - .build(); - - List individuals = restClient.fetchResult(url, searchRequest, IndividualBulkResponse.class).getIndividual(); - downsync.setIndividuals(individuals); - - return individuals.stream().map(Individual::getClientReferenceId).collect(Collectors.toList()); - } + /* ref search */ + referralSearch(downsyncRequest, downsync, beneficiaryClientRefIds); + } - /** - * - * @param downsyncRequest - * @param householdIds - * @return - */ - private Set searchMembers(DownsyncRequest downsyncRequest, Downsync downsync, - List householdIds) { - - StringBuilder memberUrl = new StringBuilder(configs.getHouseholdHost()) - .append(configs.getHouseholdMemberSearchUrl()); - - String memberIdsquery = "SELECT id from HOUSEHOLD_MEMBER where householdId IN (:householdIds)"; - - Map paramMap = new HashMap<>(); - paramMap.put("householdIds", householdIds); - appendUrlParams(memberUrl, downsyncRequest.getDownsyncCriteria(), 0, householdIds.size()); + if (!CollectionUtils.isEmpty(taskClientRefIds)) { - /* FIXME SHOULD BE REMOVED AND SEARCH SHOULD BE enhanced with list of household ids*/ - List memberids = jdbcTemplate.queryForList(memberIdsquery, paramMap, String.class); - - if (CollectionUtils.isEmpty(memberids)) - return Collections.emptySet(); - - - HouseholdMemberSearch memberSearch = HouseholdMemberSearch.builder() - .id(memberids) - .build(); - - HouseholdMemberSearchRequest searchRequest = HouseholdMemberSearchRequest.builder() - .householdMemberSearch(memberSearch) - .requestInfo(downsyncRequest.getRequestInfo()) - .build(); - - List members = restClient.fetchResult(memberUrl, searchRequest, HouseholdMemberBulkResponse.class).getHouseholdMembers(); - downsync.setHouseholdMembers(members); - - return members.stream().map(HouseholdMember::getIndividualId).collect(Collectors.toSet()); - } + searchSideEffect(downsyncRequest, downsync, taskClientRefIds); + } - /** - * - * @param downsyncRequest - * @param downsync - * @param individualClientRefIds - * @return clientreferenceid of beneficiary object - */ - private List searchBeneficiaries(DownsyncRequest downsyncRequest, Downsync downsync, - List individualClientRefIds) { + return downsync; + } - DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); - RequestInfo requestInfo = downsyncRequest.getRequestInfo(); + /** + * @param downsyncRequest + * @param downsync + * @return + */ + private List searchHouseholds(DownsyncRequest downsyncRequest, Downsync downsync) { + + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); + + StringBuilder householdUrl = new StringBuilder(configs.getHouseholdHost()) + .append(configs.getHouseholdSearchUrl()); + householdUrl = appendUrlParams(householdUrl, criteria, null, null); + + HouseholdSearch householdSearch = HouseholdSearch.builder() + .localityCode(criteria.getLocality()) + .build(); + + HouseholdSearchRequest searchRequest = HouseholdSearchRequest.builder() + .household(householdSearch) + .requestInfo(requestInfo) + .build(); + + HouseholdBulkResponse res = restClient.fetchResult(householdUrl, searchRequest, HouseholdBulkResponse.class); + List households = res.getHouseholds(); + downsync.setHouseholds(households); + downsync.getDownsyncCriteria().setTotalCount(res.getTotalCount()); + + if (CollectionUtils.isEmpty(households)) + return Collections.emptyList(); + + return households.stream().map(Household::getId).collect(Collectors.toList()); + } + + /** + * @param downsyncRequest + * @param downsync + * @param individualIds + * @return individual ClientReferenceIds + */ + private List searchIndividuals(DownsyncRequest downsyncRequest, Downsync downsync, + Set individualIds) { + + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); + + StringBuilder url = new StringBuilder(configs.getIndividualHost()) + .append(configs.getIndividualSearchUrl()); + url = appendUrlParams(url, criteria, 0, individualIds.size()); + + IndividualSearch individualSearch = IndividualSearch.builder() + .id(new ArrayList<>(individualIds)) + .build(); + + IndividualSearchRequest searchRequest = IndividualSearchRequest.builder() + .individual(individualSearch) + .requestInfo(requestInfo) + .build(); + + List individuals = restClient.fetchResult(url, searchRequest, IndividualBulkResponse.class).getIndividual(); + downsync.setIndividuals(individuals); + + return individuals.stream().map(Individual::getClientReferenceId).collect(Collectors.toList()); + } + + /** + * @param downsyncRequest + * @param householdIds + * @return + */ + private Set searchMembers(DownsyncRequest downsyncRequest, Downsync downsync, + List householdIds) { + + StringBuilder memberUrl = new StringBuilder(configs.getHouseholdHost()) + .append(configs.getHouseholdMemberSearchUrl()); + + String memberIdsquery = "SELECT id from HOUSEHOLD_MEMBER where householdId IN (:householdIds)"; + + Map paramMap = new HashMap<>(); + paramMap.put("householdIds", householdIds); + appendUrlParams(memberUrl, downsyncRequest.getDownsyncCriteria(), 0, householdIds.size()); + + /* FIXME SHOULD BE REMOVED AND SEARCH SHOULD BE enhanced with list of household ids*/ + List memberids = jdbcTemplate.queryForList(memberIdsquery, paramMap, String.class); + + if (CollectionUtils.isEmpty(memberids)) + return Collections.emptySet(); + + + HouseholdMemberSearch memberSearch = HouseholdMemberSearch.builder() + .id(memberids) + .build(); + + HouseholdMemberSearchRequest searchRequest = HouseholdMemberSearchRequest.builder() + .householdMemberSearch(memberSearch) + .requestInfo(downsyncRequest.getRequestInfo()) + .build(); + + List members = restClient.fetchResult(memberUrl, searchRequest, HouseholdMemberBulkResponse.class).getHouseholdMembers(); + downsync.setHouseholdMembers(members); + + return members.stream().map(HouseholdMember::getIndividualId).collect(Collectors.toSet()); + } + + /** + * @param downsyncRequest + * @param downsync + * @param individualClientRefIds + * @return clientreferenceid of beneficiary object + */ + private List searchBeneficiaries(DownsyncRequest downsyncRequest, Downsync downsync, + List individualClientRefIds) { + + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); StringBuilder url = new StringBuilder(configs.getProjectHost()) .append(configs.getProjectBeneficiarySearchUrl()); @@ -275,15 +270,14 @@ private List searchBeneficiaries(DownsyncRequest downsyncRequest, Downsy return beneficiaries.stream().map(ProjectBeneficiary::getClientReferenceId).collect(Collectors.toList()); } - /** - * - * @param downsyncRequest - * @param downsync - * @param beneficiaryClientRefIds - * @return - */ - private List searchTasks(DownsyncRequest downsyncRequest, Downsync downsync, - List beneficiaryClientRefIds) { + /** + * @param downsyncRequest + * @param downsync + * @param beneficiaryClientRefIds + * @return + */ + private List searchTasks(DownsyncRequest downsyncRequest, Downsync downsync, + List beneficiaryClientRefIds) { DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); RequestInfo requestInfo = downsyncRequest.getRequestInfo(); @@ -319,105 +313,104 @@ private List searchTasks(DownsyncRequest downsyncRequest, Downsync downs return tasks.stream().map(Task::getClientReferenceId).collect(Collectors.toList()); } - /** - * - * @param downsyncRequest - * @param downsync - * @param taskClientRefIds - */ - private void searchSideEffect(DownsyncRequest downsyncRequest, Downsync downsync, - List taskClientRefIds) { - - DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); - RequestInfo requestInfo = downsyncRequest.getRequestInfo(); - - // search side effect FIXME - tasks id array search not available - String sEIdQuery = "SELECT id from SIDE_EFFECT where taskClientReferenceId IN (:taskClientRefIds)"; - - Map paramMap = new HashMap<>(); - paramMap.put("taskClientRefIds", taskClientRefIds); - - /* FIXME SHOULD BE REMOVED AND TASK SEARCH SHOULD BE enhanced with list of client-ref-beneficiary ids*/ - List SEIds = jdbcTemplate.queryForList(sEIdQuery, paramMap, String.class); - - if(CollectionUtils.isEmpty(SEIds)) - return; - - SideEffectSearch search = SideEffectSearch.builder() - .id(SEIds) - .build(); - SideEffectSearchRequest effectSearchRequest = SideEffectSearchRequest.builder() - .sideEffect(search) - .requestInfo(requestInfo) - .build(); - - List effects = sideEffectService.search( - effectSearchRequest, - SEIds.size(), - 0, - criteria.getTenantId(), - criteria.getLastSyncedTime(), - criteria.getIncludeDeleted()); - - downsync.setSideEffects(effects); - } - - private void referralSearch(DownsyncRequest downsyncRequest, Downsync downsync, - List beneficiaryClientRefIds) { - - DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); - RequestInfo requestInfo = downsyncRequest.getRequestInfo(); - - ReferralSearch search = ReferralSearch.builder() - .projectBeneficiaryClientReferenceId(beneficiaryClientRefIds) - .build(); - - ReferralSearchRequest searchRequest = ReferralSearchRequest.builder() - .referral(search) - .requestInfo(requestInfo) - .build(); - - List referrals = referralService.search( - searchRequest, - beneficiaryClientRefIds.size(), - 0, - criteria.getTenantId(), - criteria.getLastSyncedTime(), - criteria.getIncludeDeleted()); - - downsync.setReferrals(referrals); - } - - - - /** - * append url params - * - * @param url - * @param criteria - * @param includeLimitOffset - * @return - */ - private StringBuilder appendUrlParams(StringBuilder url, DownsyncCriteria criteria, Integer offset, Integer limit) { - - url.append("?tenantId=") - .append(criteria.getTenantId()) - .append("&includeDeleted=") - .append(criteria.getIncludeDeleted()) - .append("&limit="); - - if (null != limit) - url.append(limit); - else - url.append(criteria.getLimit()); - - url.append("&offset="); - - if(null != offset) - url.append(offset); - else - url.append(criteria.getOffset()); - - return url; - } + /** + * @param downsyncRequest + * @param downsync + * @param taskClientRefIds + */ + private void searchSideEffect(DownsyncRequest downsyncRequest, Downsync downsync, + List taskClientRefIds) { + + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); + + // search side effect FIXME - tasks id array search not available + String sEIdQuery = "SELECT id from SIDE_EFFECT where taskClientReferenceId IN (:taskClientRefIds)"; + + Map paramMap = new HashMap<>(); + paramMap.put("taskClientRefIds", taskClientRefIds); + + /* FIXME SHOULD BE REMOVED AND TASK SEARCH SHOULD BE enhanced with list of client-ref-beneficiary ids*/ + List SEIds = jdbcTemplate.queryForList(sEIdQuery, paramMap, String.class); + + if (CollectionUtils.isEmpty(SEIds)) + return; + + SideEffectSearch search = SideEffectSearch.builder() + .id(SEIds) + .build(); + SideEffectSearchRequest effectSearchRequest = SideEffectSearchRequest.builder() + .sideEffect(search) + .requestInfo(requestInfo) + .build(); + + List effects = sideEffectService.search( + effectSearchRequest, + SEIds.size(), + 0, + criteria.getTenantId(), + criteria.getLastSyncedTime(), + criteria.getIncludeDeleted()).getResponse(); + + downsync.setSideEffects(effects); + } + + private void referralSearch(DownsyncRequest downsyncRequest, Downsync downsync, + List beneficiaryClientRefIds) { + + DownsyncCriteria criteria = downsyncRequest.getDownsyncCriteria(); + RequestInfo requestInfo = downsyncRequest.getRequestInfo(); + + ReferralSearch search = ReferralSearch.builder() + .projectBeneficiaryClientReferenceId(beneficiaryClientRefIds) + .build(); + + ReferralSearchRequest searchRequest = ReferralSearchRequest.builder() + .referral(search) + .requestInfo(requestInfo) + .build(); + + List referrals = referralService.search( + searchRequest, + beneficiaryClientRefIds.size(), + 0, + criteria.getTenantId(), + criteria.getLastSyncedTime(), + criteria.getIncludeDeleted()).getResponse(); + + downsync.setReferrals(referrals); + } + + + /** + * append url params + * + * @param url + * @param criteria + * @param offset + * @param limit + * @return + */ + private StringBuilder appendUrlParams(StringBuilder url, DownsyncCriteria criteria, Integer offset, Integer limit) { + + url.append("?tenantId=") + .append(criteria.getTenantId()) + .append("&includeDeleted=") + .append(criteria.getIncludeDeleted()) + .append("&limit="); + + if (null != limit) + url.append(limit); + else + url.append(criteria.getLimit()); + + url.append("&offset="); + + if (null != offset) + url.append(offset); + else + url.append(criteria.getOffset()); + + return url; + } } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/HFReferralService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/HFReferralService.java index aaf317acafc..c3c287bcff3 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/HFReferralService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/HFReferralService.java @@ -20,6 +20,7 @@ import org.egov.referralmanagement.config.ReferralManagementConfiguration; import org.egov.referralmanagement.repository.HFReferralRepository; import org.egov.referralmanagement.service.enrichment.HFReferralEnrichmentService; +import org.egov.referralmanagement.validator.hfreferral.HfrExistentEntityValidator; import org.egov.referralmanagement.validator.hfreferral.HfrIsDeletedValidator; import org.egov.referralmanagement.validator.hfreferral.HfrNonExistentEntityValidator; import org.egov.referralmanagement.validator.hfreferral.HfrNullIdValidator; @@ -60,6 +61,7 @@ public class HFReferralService { // Predicates to determine which validators are applicable for create, update, and delete operations private final Predicate> isApplicableForCreate = validator -> validator.getClass().equals(HfrProjectIdValidator.class) + || validator.getClass().equals(HfrExistentEntityValidator.class) || validator.getClass().equals(HfrProjectFacilityIdValidator.class); private final Predicate> isApplicableForUpdate = validator -> diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java index 7c35b9747fe..25c41986eea 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/ReferralManagementService.java @@ -1,24 +1,16 @@ package org.egov.referralmanagement.service; -import static org.egov.common.utils.CommonUtils.getIdFieldName; -import static org.egov.common.utils.CommonUtils.getIdMethod; -import static org.egov.common.utils.CommonUtils.handleErrors; -import static org.egov.common.utils.CommonUtils.havingTenantId; -import static org.egov.common.utils.CommonUtils.includeDeleted; -import static org.egov.common.utils.CommonUtils.isSearchByIdOnly; -import static org.egov.common.utils.CommonUtils.lastChangedSince; -import static org.egov.common.utils.CommonUtils.notHavingErrors; -import static org.egov.common.utils.CommonUtils.populateErrorDetails; - import java.util.Collections; import java.util.List; import java.util.Map; import java.util.function.Predicate; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; import org.egov.common.ds.Tuple; import org.egov.common.models.ErrorDetails; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.referralmanagement.Referral; import org.egov.common.models.referralmanagement.ReferralBulkRequest; import org.egov.common.models.referralmanagement.ReferralRequest; @@ -30,6 +22,7 @@ import org.egov.referralmanagement.config.ReferralManagementConfiguration; import org.egov.referralmanagement.repository.ReferralRepository; import org.egov.referralmanagement.service.enrichment.ReferralManagementEnrichmentService; +import org.egov.referralmanagement.validator.RmExistentEntityValidator; import org.egov.referralmanagement.validator.RmIsDeletedValidator; import org.egov.referralmanagement.validator.RmNonExistentEntityValidator; import org.egov.referralmanagement.validator.RmNullIdValidator; @@ -42,7 +35,15 @@ import org.springframework.stereotype.Service; import org.springframework.util.ReflectionUtils; -import lombok.extern.slf4j.Slf4j; +import static org.egov.common.utils.CommonUtils.getIdFieldName; +import static org.egov.common.utils.CommonUtils.getIdMethod; +import static org.egov.common.utils.CommonUtils.handleErrors; +import static org.egov.common.utils.CommonUtils.havingTenantId; +import static org.egov.common.utils.CommonUtils.includeDeleted; +import static org.egov.common.utils.CommonUtils.isSearchByIdOnly; +import static org.egov.common.utils.CommonUtils.lastChangedSince; +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; @Service @Slf4j @@ -60,6 +61,7 @@ public class ReferralManagementService { private final Predicate> isApplicableForCreate = validator -> validator.getClass().equals(RmProjectBeneficiaryIdValidator.class) + || validator.getClass().equals(RmExistentEntityValidator.class) || validator.getClass().equals(RmReferrerIdValidator.class) || validator.getClass().equals(RmRecipientIdValidator.class) || validator.getClass().equals(RmSideEffectIdValidator.class); @@ -153,12 +155,12 @@ public List update(ReferralBulkRequest referralRequest, boolean isBulk return validReferrals; } - public List search(ReferralSearchRequest referralSearchRequest, - Integer limit, - Integer offset, - String tenantId, - Long lastChangedSince, - Boolean includeDeleted) { + public SearchResponse search(ReferralSearchRequest referralSearchRequest, + Integer limit, + Integer offset, + String tenantId, + Long lastChangedSince, + Boolean includeDeleted) { log.info("received request to search referrals"); String idFieldName = getIdFieldName(referralSearchRequest.getReferral()); if (isSearchByIdOnly(referralSearchRequest.getReferral(), idFieldName)) { @@ -167,11 +169,12 @@ public List search(ReferralSearchRequest referralSearchRequest, .singletonList(referralSearchRequest.getReferral())), referralSearchRequest.getReferral()); log.info("fetching referrals with ids: {}", ids); - return referralRepository.findById(ids, includeDeleted, idFieldName).stream() + List referrals = referralRepository.findById(ids, idFieldName, includeDeleted).getResponse().stream() .filter(lastChangedSince(lastChangedSince)) .filter(havingTenantId(tenantId)) .filter(includeDeleted(includeDeleted)) .collect(Collectors.toList()); + return SearchResponse.builder().response(referrals).build(); } log.info("searching referrals using criteria"); return referralRepository.find(referralSearchRequest.getReferral(), diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/SideEffectService.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/SideEffectService.java index 4850402507c..e5cfd43e00d 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/SideEffectService.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/service/SideEffectService.java @@ -18,6 +18,7 @@ import org.egov.common.ds.Tuple; import org.egov.common.models.ErrorDetails; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.referralmanagement.sideeffect.SideEffect; import org.egov.common.models.referralmanagement.sideeffect.SideEffectBulkRequest; import org.egov.common.models.referralmanagement.sideeffect.SideEffectRequest; @@ -28,6 +29,7 @@ import org.egov.referralmanagement.config.ReferralManagementConfiguration; import org.egov.referralmanagement.repository.SideEffectRepository; import org.egov.referralmanagement.service.enrichment.SideEffectEnrichmentService; +import org.egov.referralmanagement.validator.sideeffect.SeExistentEntityValidator; import org.egov.referralmanagement.validator.sideeffect.SeIsDeletedValidator; import org.egov.referralmanagement.validator.sideeffect.SeNonExistentEntityValidator; import org.egov.referralmanagement.validator.sideeffect.SeNullIdValidator; @@ -58,6 +60,7 @@ public class SideEffectService { private final Predicate> isApplicableForCreate = validator -> validator.getClass().equals(SeProjectTaskIdValidator.class) + || validator.getClass().equals(SeExistentEntityValidator.class) || validator.getClass().equals(SeProjectBeneficiaryIdValidator.class); private final Predicate> isApplicableForUpdate = validator -> @@ -185,12 +188,12 @@ public List update(SideEffectBulkRequest sideEffectRequest, boolean * @return * @throws Exception */ - public List search(SideEffectSearchRequest sideEffectSearchRequest, - Integer limit, - Integer offset, - String tenantId, - Long lastChangedSince, - Boolean includeDeleted) { + public SearchResponse search(SideEffectSearchRequest sideEffectSearchRequest, + Integer limit, + Integer offset, + String tenantId, + Long lastChangedSince, + Boolean includeDeleted) { log.info("received request to search side effects"); String idFieldName = getIdFieldName(sideEffectSearchRequest.getSideEffect()); if (isSearchByIdOnly(sideEffectSearchRequest.getSideEffect(), idFieldName)) { @@ -199,11 +202,12 @@ public List search(SideEffectSearchRequest sideEffectSearchRequest, .singletonList(sideEffectSearchRequest.getSideEffect())), sideEffectSearchRequest.getSideEffect()); log.info("fetching side effects with ids: {}", ids); - return sideEffectRepository.findById(ids, includeDeleted, idFieldName).stream() + List sideEffectList = sideEffectRepository.findById(ids, includeDeleted, idFieldName); + return SearchResponse.builder().response(sideEffectList.stream() .filter(lastChangedSince(lastChangedSince)) .filter(havingTenantId(tenantId)) .filter(includeDeleted(includeDeleted)) - .collect(Collectors.toList()); + .collect(Collectors.toList())).build(); } log.info("searching side effects using criteria"); return sideEffectRepository.find(sideEffectSearchRequest.getSideEffect(), diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmExistentEntityValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmExistentEntityValidator.java new file mode 100644 index 00000000000..6b760985b92 --- /dev/null +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmExistentEntityValidator.java @@ -0,0 +1,76 @@ +package org.egov.referralmanagement.validator; + +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.referralmanagement.Referral; +import org.egov.common.models.referralmanagement.ReferralBulkRequest; +import org.egov.common.models.referralmanagement.ReferralSearch; +import org.egov.common.validator.Validator; +import org.egov.referralmanagement.repository.ReferralRepository; +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 referral entities already exist in the database based on their client reference IDs. + * @author kanishq-egov + */ +public class RmExistentEntityValidator implements Validator { + + private final ReferralRepository referralRepository; + + /** + * Constructor to initialize the ReferralRepository dependency. + * + * @param referralRepository The repository for referral entities. + */ + public RmExistentEntityValidator(ReferralRepository referralRepository) { + this.referralRepository = referralRepository; + } + + /** + * Validates the existence of entities with the given client reference IDs. + * + * @param request The bulk request containing referral entities. + * @return A map containing referral entities and their associated error details. + */ + @Override + public Map> validate(ReferralBulkRequest request) { + // Map to hold referral entities and their error details + Map> errorDetailsMap = new HashMap<>(); + // Get the list of referral entities from the request + List entities = request.getReferrals(); + // Extract client reference IDs from referral entities without errors + List clientReferenceIdList = entities.stream() + .filter(notHavingErrors()) + .map(Referral::getClientReferenceId) + .collect(Collectors.toList()); + // Create a search object for querying entities by client reference IDs + ReferralSearch referralSearch = ReferralSearch.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 = referralRepository.findById( + clientReferenceIdList, + getIdFieldName(referralSearch), + 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/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmNonExistentEntityValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmNonExistentEntityValidator.java index 5009ee003f2..8189c560ef1 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmNonExistentEntityValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmNonExistentEntityValidator.java @@ -56,7 +56,7 @@ public Map> validate(ReferralBulkRequest request) { if (!iMap.isEmpty()) { List referralIds = new ArrayList<>(iMap.keySet()); List existingReferrals = referralRepository - .findById(referralIds, false, getIdFieldName(idMethod)); + .findById(referralIds, getIdFieldName(idMethod),false).getResponse(); List nonExistentReferrals = checkNonExistentEntities(iMap, existingReferrals, idMethod); nonExistentReferrals.forEach(sideEffect -> { diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java index 565bfff6f30..c0fa26bf55c 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/RmSideEffectIdValidator.java @@ -58,7 +58,7 @@ public Map> validate(ReferralBulkRequest request) { validSideEffectIds = sideEffectService.search( SideEffectSearchRequest.builder().sideEffect(SideEffectSearch.builder().id(sideEffectIds).build()).build(), sideEffectIds.size(), 0, tenantId, null, false - ).stream().map(SideEffect::getId).collect(Collectors.toList()); + ).getResponse().stream().map(SideEffect::getId).collect(Collectors.toList()); } catch (Exception e) { throw new CustomException("Side Effect failed to fetch", "Exception : " + e.getMessage()); } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/hfreferral/HfrExistentEntityValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/hfreferral/HfrExistentEntityValidator.java new file mode 100644 index 00000000000..2eaebb8d5c2 --- /dev/null +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/hfreferral/HfrExistentEntityValidator.java @@ -0,0 +1,78 @@ +package org.egov.referralmanagement.validator.hfreferral; + +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.referralmanagement.hfreferral.HFReferral; +import org.egov.common.models.referralmanagement.hfreferral.HFReferralBulkRequest; +import org.egov.common.models.referralmanagement.hfreferral.HFReferralSearch; +import org.egov.common.validator.Validator; +import org.egov.referralmanagement.repository.HFReferralRepository; +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 HFReferral entities already exist in the database based on their client reference IDs. + * + * @author kanishq-egov + */ +public class HfrExistentEntityValidator implements Validator { + + private final HFReferralRepository hfReferralRepository; + + /** + * Constructor to initialize the HFReferralRepository dependency. + * + * @param hfReferralRepository The repository for HFReferral entities. + */ + public HfrExistentEntityValidator(HFReferralRepository hfReferralRepository) { + this.hfReferralRepository = hfReferralRepository; + } + + /** + * Validates the existence of entities with the given client reference IDs. + * + * @param request The bulk request containing HFReferral entities. + * @return A map containing HFReferral entities and their associated error details. + */ + @Override + public Map> validate(HFReferralBulkRequest request) { + // Map to hold HFReferral entities and their error details + Map> errorDetailsMap = new HashMap<>(); + // Get the list of HFReferral entities from the request + List entities = request.getHfReferrals(); + // Extract client reference IDs from HFReferral entities without errors + List clientReferenceIdList = entities.stream() + .filter(notHavingErrors()) + .map(HFReferral::getClientReferenceId) + .collect(Collectors.toList()); + // Create a search object for querying entities by client reference IDs + HFReferralSearch hfReferralSearch = HFReferralSearch.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 = hfReferralRepository.findById( + clientReferenceIdList, + Boolean.FALSE, + getIdFieldName(hfReferralSearch) + ); + // 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/referralmanagement/src/main/java/org/egov/referralmanagement/validator/hfreferral/HfrProjectFacilityIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/hfreferral/HfrProjectFacilityIdValidator.java index 82ac9dba00a..2cadd5e38ab 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/hfreferral/HfrProjectFacilityIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/hfreferral/HfrProjectFacilityIdValidator.java @@ -86,7 +86,6 @@ private List getExistingProjects(String tenantId, List { + + private final SideEffectRepository sideEffectRepository; + + /** + * Constructor to initialize the SideEffectRepository dependency. + * + * @param sideEffectRepository The repository for SideEffect entities. + */ + public SeExistentEntityValidator(SideEffectRepository sideEffectRepository) { + this.sideEffectRepository = sideEffectRepository; + } + + /** + * Validates the existence of SideEffect entities with the given client reference IDs. + * + * @param request The bulk request containing SideEffect entities. + * @return A map containing SideEffect entities and their associated error details. + */ + @Override + public Map> validate(SideEffectBulkRequest request) { + // Map to hold SideEffect entities and their error details + Map> errorDetailsMap = new HashMap<>(); + // Get the list of SideEffect entities from the request + List entities = request.getSideEffects(); + // Extract client reference IDs from SideEffect entities without errors + List clientReferenceIdList = entities.stream() + .filter(notHavingErrors()) + .map(SideEffect::getClientReferenceId) + .collect(Collectors.toList()); + // Create a search object for querying entities by client reference IDs + SideEffectSearch sideEffectSearch = SideEffectSearch.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 = sideEffectRepository.findById( + clientReferenceIdList, + getIdFieldName(sideEffectSearch), + Boolean.FALSE); + // 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/referralmanagement/src/main/java/org/egov/referralmanagement/validator/sideeffect/SeProjectBeneficiaryIdValidator.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/sideeffect/SeProjectBeneficiaryIdValidator.java index 363b398bff9..216d7d48507 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/sideeffect/SeProjectBeneficiaryIdValidator.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/validator/sideeffect/SeProjectBeneficiaryIdValidator.java @@ -1,9 +1,5 @@ package org.egov.referralmanagement.validator.sideeffect; -import static org.egov.common.utils.CommonUtils.notHavingErrors; -import static org.egov.common.utils.CommonUtils.populateErrorDetails; -import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -11,6 +7,7 @@ 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.project.BeneficiaryBulkResponse; @@ -26,7 +23,9 @@ import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; -import lombok.extern.slf4j.Slf4j; +import static org.egov.common.utils.CommonUtils.notHavingErrors; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import static org.egov.common.utils.ValidatorUtils.getErrorForNonExistentEntity; /** * Validate whether project beneficiary exist in db or not using project beneficiary id and project beneficiary client beneficiary id for SideEffect object diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java index 80860ab2096..bd6a1a2ad2d 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/BeneficiaryDownsyncController.java @@ -1,6 +1,6 @@ package org.egov.referralmanagement.web.controllers; -import javax.validation.Valid; +import jakarta.validation.Valid; import org.egov.common.models.referralmanagement.beneficiarydownsync.Downsync; import org.egov.common.models.referralmanagement.beneficiarydownsync.DownsyncRequest; diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/HFReferralApiController.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/HFReferralApiController.java index 97650777201..f09a4c578e8 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/HFReferralApiController.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/HFReferralApiController.java @@ -1,14 +1,12 @@ package org.egov.referralmanagement.web.controllers; import java.util.List; -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 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.referralmanagement.hfreferral.HFReferral; import org.egov.common.models.referralmanagement.hfreferral.HFReferralBulkRequest; import org.egov.common.models.referralmanagement.hfreferral.HFReferralBulkResponse; @@ -23,10 +21,10 @@ 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; /** * Controller class for managing HF Referrals. @@ -100,23 +98,22 @@ public ResponseEntity referralBulkV1CreatePost(@ApiParam(value = " * API endpoint to search for HFReferrals based on certain criteria. * * @param request The HFReferralSearchRequest containing search criteria. - * @param limit Pagination - limit records in response. - * @param offset Pagination - offset from which records should be returned in response. - * @param tenantId Unique id for a tenant. - * @param lastChangedSince Epoch of the time since when the changes on the object should be picked up. - * @param includeDeleted Used in search APIs to specify if (soft) deleted records should be included in search results. * @return ResponseEntity containing HFReferralBulkResponse. * @throws Exception */ @RequestMapping(value = "/v1/_search", method = RequestMethod.POST) - public ResponseEntity referralV1SearchPost(@ApiParam(value = "HFReferral Search.", required = true) @Valid @RequestBody HFReferralSearchRequest 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 hfReferrals = hfReferralService.search(request, limit, offset, tenantId, lastChangedSince, includeDeleted); + public ResponseEntity referralV1SearchPost( + @Valid @ModelAttribute URLParams urlParams, + @ApiParam(value = "HFReferral Search.", required = true) @Valid @RequestBody HFReferralSearchRequest request + ) throws Exception { + + List hfReferrals = hfReferralService.search( + request, + urlParams.getLimit(), + urlParams.getOffset(), + urlParams.getTenantId(), + urlParams.getLastChangedSince(), + urlParams.getIncludeDeleted()); HFReferralBulkResponse response = HFReferralBulkResponse.builder().responseInfo(ResponseInfoFactory .createResponseInfo(request.getRequestInfo(), true)).hfReferrals(hfReferrals).build(); diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiController.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiController.java index 92d867479ee..0d65d31d5c9 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiController.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiController.java @@ -1,8 +1,11 @@ package org.egov.referralmanagement.web.controllers; import io.swagger.annotations.ApiParam; -import org.egov.referralmanagement.service.ReferralManagementService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; import org.egov.common.contract.response.ResponseInfo; +import org.egov.common.models.core.SearchResponse; +import org.egov.common.models.core.URLParams; import org.egov.common.models.referralmanagement.Referral; import org.egov.common.models.referralmanagement.ReferralBulkRequest; import org.egov.common.models.referralmanagement.ReferralBulkResponse; @@ -12,21 +15,15 @@ import org.egov.common.producer.Producer; import org.egov.common.utils.ResponseInfoFactory; import org.egov.referralmanagement.config.ReferralManagementConfiguration; +import org.egov.referralmanagement.service.ReferralManagementService; 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 java.util.List; /** * Referral Management Api Controller @@ -91,26 +88,28 @@ public ResponseEntity referralBulkV1CreatePost(@ApiParam(value = " /** * - * @param request - * @param limit - * @param offset - * @param tenantId - * @param lastChangedSince - * @param includeDeleted + * @param referralSearchRequest * @return * @throws Exception */ @RequestMapping(value = "/v1/_search", method = RequestMethod.POST) - public ResponseEntity referralV1SearchPost(@ApiParam(value = "Referral Search.", required = true) @Valid @RequestBody ReferralSearchRequest request, - @NotNull @Min(0) @Max(1000) @ApiParam(value = "Pagination - limit records in response", required = true) @Valid @RequestParam(value = "limit", required = true) Integer limit, - @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 referrals = referralManagementService.search(request, limit, offset, tenantId, lastChangedSince, includeDeleted); + public ResponseEntity referralV1SearchPost( + @Valid @ModelAttribute URLParams urlParams, + @ApiParam(value = "Referral Search.", required = true) @Valid @RequestBody ReferralSearchRequest referralSearchRequest + ) throws Exception { + + SearchResponse referralSearchResponse = referralManagementService.search( + referralSearchRequest, + urlParams.getLimit(), + urlParams.getOffset(), + urlParams.getTenantId(), + urlParams.getLastChangedSince(), + urlParams.getIncludeDeleted()); ReferralBulkResponse response = ReferralBulkResponse.builder().responseInfo(ResponseInfoFactory - .createResponseInfo(request.getRequestInfo(), true)).referrals(referrals).build(); + .createResponseInfo(referralSearchRequest.getRequestInfo(), true)) + .referrals(referralSearchResponse.getResponse()) + .totalCount(referralSearchResponse.getTotalCount()) + .build(); return ResponseEntity.status(HttpStatus.OK).body(response); } diff --git a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/SideEffectApiController.java b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/SideEffectApiController.java index c43db332fa7..65b777c9a1f 100644 --- a/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/SideEffectApiController.java +++ b/health-services/referralmanagement/src/main/java/org/egov/referralmanagement/web/controllers/SideEffectApiController.java @@ -1,9 +1,11 @@ package org.egov.referralmanagement.web.controllers; import io.swagger.annotations.ApiParam; -import org.egov.referralmanagement.config.ReferralManagementConfiguration; -import org.egov.referralmanagement.service.SideEffectService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; import org.egov.common.contract.response.ResponseInfo; +import org.egov.common.models.core.SearchResponse; +import org.egov.common.models.core.URLParams; import org.egov.common.models.referralmanagement.sideeffect.SideEffect; import org.egov.common.models.referralmanagement.sideeffect.SideEffectBulkRequest; import org.egov.common.models.referralmanagement.sideeffect.SideEffectBulkResponse; @@ -12,21 +14,16 @@ import org.egov.common.models.referralmanagement.sideeffect.SideEffectSearchRequest; import org.egov.common.producer.Producer; import org.egov.common.utils.ResponseInfoFactory; +import org.egov.referralmanagement.config.ReferralManagementConfiguration; +import org.egov.referralmanagement.service.SideEffectService; 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 java.util.List; @Controller @RequestMapping("/side-effect") @@ -79,16 +76,22 @@ public ResponseEntity sideEffectBulkV1CreatePost(@ApiParam(value = } @RequestMapping(value = "/v1/_search", method = RequestMethod.POST) - public ResponseEntity sideEffectV1SearchPost(@ApiParam(value = "Side Effect Search.", required = true) @Valid @RequestBody SideEffectSearchRequest 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 sideEffects = sideEffectService.search(request, limit, offset, tenantId, lastChangedSince, includeDeleted); + public ResponseEntity sideEffectV1SearchPost( + @Valid @ModelAttribute URLParams urlParams, + @ApiParam(value = "Side Effect Search.", required = true) @Valid @RequestBody SideEffectSearchRequest request + ) throws Exception { + + SearchResponse sideEffectSearchResponse = sideEffectService.search( + request, + urlParams.getLimit(), + urlParams.getOffset(), + urlParams.getTenantId(), + urlParams.getLastChangedSince(), + urlParams.getIncludeDeleted() + ); SideEffectBulkResponse response = SideEffectBulkResponse.builder().responseInfo(ResponseInfoFactory - .createResponseInfo(request.getRequestInfo(), true)).sideEffects(sideEffects).build(); + .createResponseInfo(request.getRequestInfo(), true)).sideEffects(sideEffectSearchResponse.getResponse()) + .totalCount(sideEffectSearchResponse.getTotalCount()).build(); return ResponseEntity.status(HttpStatus.OK).body(response); } diff --git a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/AppTest.java b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/AppTest.java index 48b5fb750f6..9b872dba7b8 100644 --- a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/AppTest.java +++ b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/AppTest.java @@ -1,8 +1,9 @@ package org.egov.referralmanagement; -import static org.junit.Assert.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Unit test for simple App. diff --git a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/ReferralTestBuilder.java b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/ReferralTestBuilder.java index 8ea5a37e267..1f2dfd310d9 100644 --- a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/ReferralTestBuilder.java +++ b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/ReferralTestBuilder.java @@ -8,10 +8,10 @@ public class ReferralTestBuilder { - private Referral.ReferralBuilder builder; + private Referral.ReferralBuilder builder; public ReferralTestBuilder() { - this.builder = Referral.builder(); + this.builder = (Referral.ReferralBuilder) Referral.builder(); } public static ReferralTestBuilder builder() { diff --git a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/SideEffectTestBuilder.java b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/SideEffectTestBuilder.java index d4c3c04c686..e2adc35eb3f 100644 --- a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/SideEffectTestBuilder.java +++ b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/helper/SideEffectTestBuilder.java @@ -8,10 +8,10 @@ public class SideEffectTestBuilder { - private SideEffect.SideEffectBuilder builder; + private SideEffect.SideEffectBuilder builder; public SideEffectTestBuilder() { - this.builder = SideEffect.builder(); + this.builder = (SideEffect.SideEffectBuilder) SideEffect.builder(); } public static SideEffectTestBuilder builder() { diff --git a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiControllerTest.java b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiControllerTest.java index bcf1518c0c1..81c5a664f1f 100644 --- a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiControllerTest.java +++ b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/ReferralManagementApiControllerTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.egov.common.helper.RequestInfoTestBuilder; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.referralmanagement.Referral; import org.egov.common.models.referralmanagement.ReferralBulkResponse; import org.egov.common.models.referralmanagement.ReferralRequest; @@ -160,7 +161,11 @@ void shouldAcceptSearchRequestAndReturnReferral() throws Exception { ArgumentMatchers.any(Integer.class), ArgumentMatchers.any(String.class), ArgumentMatchers.any(Long.class), - ArgumentMatchers.any(Boolean.class))).thenReturn(Arrays.asList(ReferralTestBuilder.builder().withId().withAuditDetails().build())); + ArgumentMatchers.any(Boolean.class))).thenReturn( + SearchResponse.builder() + .response(Arrays.asList(ReferralTestBuilder.builder().withId().withAuditDetails().build())) + .build() + ); final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post( "/v1/_search?limit=10&offset=100&tenantId=default&lastChangedSince=1234322&includeDeleted=false") diff --git a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/SideEffectApiControllerTest.java b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/SideEffectApiControllerTest.java index 305c70f0acb..b3413b77311 100644 --- a/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/SideEffectApiControllerTest.java +++ b/health-services/referralmanagement/src/test/java/org/egov/referralmanagement/web/controllers/SideEffectApiControllerTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.egov.common.helper.RequestInfoTestBuilder; +import org.egov.common.models.core.SearchResponse; import org.egov.common.models.referralmanagement.sideeffect.SideEffect; import org.egov.common.models.referralmanagement.sideeffect.SideEffectBulkResponse; import org.egov.common.models.referralmanagement.sideeffect.SideEffectRequest; @@ -161,7 +162,10 @@ void shouldAcceptSearchRequestAndReturnSideEffect() throws Exception { ArgumentMatchers.any(Integer.class), ArgumentMatchers.any(String.class), ArgumentMatchers.any(Long.class), - ArgumentMatchers.any(Boolean.class))).thenReturn(Arrays.asList(SideEffectTestBuilder.builder().withId().withAuditDetails().build())); + ArgumentMatchers.any(Boolean.class))).thenReturn( + SearchResponse.builder() + .response(Arrays.asList(SideEffectTestBuilder.builder().withId().withAuditDetails().build())) + .build()); final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post( "/side-effect/v1/_search?limit=10&offset=100&tenantId=default&lastChangedSince=1234322&includeDeleted=false") diff --git a/health-services/stock/CHANGELOG.md b/health-services/stock/CHANGELOG.md index 814307cdc09..83d0dd54070 100644 --- a/health-services/stock/CHANGELOG.md +++ b/health-services/stock/CHANGELOG.md @@ -1,9 +1,5 @@ All notable changes to this module will be documented in this file. -## To be released -- In StockSearch, productVariantId, waybillNumber updated to accept list of search entities instead of single entity -- In StockReconciliationSearch, facilityId, productVariantId updated to accept list of search entities instead of single entity - ## 1.1.2 - 2024-02-26 - Enhance inventory flow with sender id and receiver id added. diff --git a/health-services/stock/pom.xml b/health-services/stock/pom.xml index a6d29a41ba7..8306e56cc59 100644 --- a/health-services/stock/pom.xml +++ b/health-services/stock/pom.xml @@ -7,14 +7,15 @@ stock 1.1.2 - 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,12 +45,12 @@ 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 @@ -69,11 +70,17 @@ 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 @@ -90,6 +97,7 @@ org.projectlombok lombok + ${lombok.version} true @@ -97,11 +105,6 @@ com.fasterxml.jackson.datatype jackson-datatype-jsr310 - - - javax.validation - validation-api - diff --git a/health-services/stock/src/main/java/org/egov/stock/config/MainConfiguration.java b/health-services/stock/src/main/java/org/egov/stock/config/MainConfiguration.java index b067e1cb2ab..01fd5d00559 100644 --- a/health-services/stock/src/main/java/org/egov/stock/config/MainConfiguration.java +++ b/health-services/stock/src/main/java/org/egov/stock/config/MainConfiguration.java @@ -24,7 +24,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/stock/src/main/java/org/egov/stock/repository/rowmapper/StockReconciliationRowMapper.java b/health-services/stock/src/main/java/org/egov/stock/repository/rowmapper/StockReconciliationRowMapper.java index 831c8f4e331..813246f8a2b 100644 --- a/health-services/stock/src/main/java/org/egov/stock/repository/rowmapper/StockReconciliationRowMapper.java +++ b/health-services/stock/src/main/java/org/egov/stock/repository/rowmapper/StockReconciliationRowMapper.java @@ -1,16 +1,16 @@ package org.egov.stock.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.stock.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.stock.StockReconciliation; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Component; -import java.sql.ResultSet; -import java.sql.SQLException; - @Component public class StockReconciliationRowMapper implements RowMapper { diff --git a/health-services/stock/src/main/java/org/egov/stock/repository/rowmapper/StockRowMapper.java b/health-services/stock/src/main/java/org/egov/stock/repository/rowmapper/StockRowMapper.java index d011f3301a4..d8d417b4fc0 100644 --- a/health-services/stock/src/main/java/org/egov/stock/repository/rowmapper/StockRowMapper.java +++ b/health-services/stock/src/main/java/org/egov/stock/repository/rowmapper/StockRowMapper.java @@ -3,7 +3,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import digit.models.coremodels.AuditDetails; -import org.egov.common.models.stock.AdditionalFields; +import org.egov.common.models.core.AdditionalFields; import org.egov.common.models.stock.ReferenceIdType; import org.egov.common.models.stock.SenderReceiverType; import org.egov.common.models.stock.Stock; diff --git a/health-services/stock/src/main/java/org/egov/stock/service/StockReconciliationService.java b/health-services/stock/src/main/java/org/egov/stock/service/StockReconciliationService.java index 718c8389a53..1765e34c015 100644 --- a/health-services/stock/src/main/java/org/egov/stock/service/StockReconciliationService.java +++ b/health-services/stock/src/main/java/org/egov/stock/service/StockReconciliationService.java @@ -10,6 +10,7 @@ import org.egov.stock.config.StockReconciliationConfiguration; import org.egov.stock.repository.StockReconciliationRepository; import org.egov.stock.service.enrichment.StockReconciliationEnrichmentService; +import org.egov.stock.validator.stockreconciliation.SrExistentEntityValidator; import org.egov.stock.validator.stockreconciliation.SrFacilityIdValidator; import org.egov.stock.validator.stockreconciliation.SrIsDeletedValidator; import org.egov.stock.validator.stockreconciliation.SrNonExistentValidator; @@ -18,7 +19,7 @@ import org.egov.stock.validator.stockreconciliation.SrReferenceIdValidator; import org.egov.stock.validator.stockreconciliation.SrRowVersionValidator; import org.egov.stock.validator.stockreconciliation.SrUniqueEntityValidator; -import org.egov.stock.web.models.StockReconciliationSearchRequest; +import org.egov.common.models.stock.StockReconciliationSearchRequest; import org.springframework.stereotype.Service; import org.springframework.util.ReflectionUtils; @@ -56,6 +57,7 @@ public class StockReconciliationService { private final Predicate> isApplicableForCreate = validator -> validator.getClass().equals(SrProductVariantIdValidator.class) + || validator.getClass().equals(SrExistentEntityValidator.class) || validator.getClass().equals(SrFacilityIdValidator.class) || validator.getClass().equals(SrReferenceIdValidator.class); diff --git a/health-services/stock/src/main/java/org/egov/stock/service/StockService.java b/health-services/stock/src/main/java/org/egov/stock/service/StockService.java index 7876d60ac63..97ac13ff46b 100644 --- a/health-services/stock/src/main/java/org/egov/stock/service/StockService.java +++ b/health-services/stock/src/main/java/org/egov/stock/service/StockService.java @@ -1,33 +1,23 @@ package org.egov.stock.service; -import static org.egov.common.utils.CommonUtils.getIdFieldName; -import static org.egov.common.utils.CommonUtils.getIdMethod; -import static org.egov.common.utils.CommonUtils.handleErrors; -import static org.egov.common.utils.CommonUtils.havingTenantId; -import static org.egov.common.utils.CommonUtils.includeDeleted; -import static org.egov.common.utils.CommonUtils.isSearchByIdOnly; -import static org.egov.common.utils.CommonUtils.lastChangedSince; -import static org.egov.common.utils.CommonUtils.populateErrorDetails; -import static org.egov.common.utils.CommonUtils.validate; -import static org.egov.stock.Constants.GET_STOCK; -import static org.egov.stock.Constants.SET_STOCK; -import static org.egov.stock.Constants.VALIDATION_ERROR; - 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.ds.Tuple; import org.egov.common.models.ErrorDetails; import org.egov.common.models.stock.Stock; import org.egov.common.models.stock.StockBulkRequest; import org.egov.common.models.stock.StockRequest; +import org.egov.common.models.stock.StockSearchRequest; import org.egov.common.validator.Validator; import org.egov.stock.config.StockConfiguration; import org.egov.stock.repository.StockRepository; import org.egov.stock.service.enrichment.StockEnrichmentService; +import org.egov.stock.validator.stock.SExistentEntityValidator; import org.egov.stock.validator.stock.SIsDeletedValidator; import org.egov.stock.validator.stock.SNonExistentValidator; import org.egov.stock.validator.stock.SNullIdValidator; @@ -37,11 +27,21 @@ import org.egov.stock.validator.stock.SSenderIdReceiverIdEqualsValidator; import org.egov.stock.validator.stock.SUniqueEntityValidator; import org.egov.stock.validator.stock.StocktransferPartiesValidator; -import org.egov.stock.web.models.StockSearchRequest; import org.springframework.stereotype.Service; import org.springframework.util.ReflectionUtils; -import lombok.extern.slf4j.Slf4j; +import static org.egov.common.utils.CommonUtils.getIdFieldName; +import static org.egov.common.utils.CommonUtils.getIdMethod; +import static org.egov.common.utils.CommonUtils.handleErrors; +import static org.egov.common.utils.CommonUtils.havingTenantId; +import static org.egov.common.utils.CommonUtils.includeDeleted; +import static org.egov.common.utils.CommonUtils.isSearchByIdOnly; +import static org.egov.common.utils.CommonUtils.lastChangedSince; +import static org.egov.common.utils.CommonUtils.populateErrorDetails; +import static org.egov.common.utils.CommonUtils.validate; +import static org.egov.stock.Constants.GET_STOCK; +import static org.egov.stock.Constants.SET_STOCK; +import static org.egov.stock.Constants.VALIDATION_ERROR; @Service @@ -58,6 +58,7 @@ public class StockService { private final Predicate> isApplicableForCreate = validator -> validator.getClass().equals(SProductVariantIdValidator.class) + || validator.getClass().equals(SExistentEntityValidator.class) || validator.getClass().equals(SSenderIdReceiverIdEqualsValidator.class) || validator.getClass().equals(StocktransferPartiesValidator.class) || validator.getClass().equals(SReferenceIdValidator.class); diff --git a/health-services/stock/src/main/java/org/egov/stock/validator/stock/SExistentEntityValidator.java b/health-services/stock/src/main/java/org/egov/stock/validator/stock/SExistentEntityValidator.java new file mode 100644 index 00000000000..2db82a921ac --- /dev/null +++ b/health-services/stock/src/main/java/org/egov/stock/validator/stock/SExistentEntityValidator.java @@ -0,0 +1,77 @@ +package org.egov.stock.validator.stock; + +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.stock.Stock; +import org.egov.common.models.stock.StockBulkRequest; +import org.egov.common.models.stock.StockSearch; +import org.egov.common.validator.Validator; +import org.egov.stock.repository.StockRepository; +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 Stock entities with the given client reference IDs. + * This validator checks if the provided Stock entities already exist in the database based on their client reference IDs. + * + * @author kanishq-egov + */ +public class SExistentEntityValidator implements Validator { + + private final StockRepository stockRepository; + + /** + * Constructor to initialize the StockRepository dependency. + * + * @param stockRepository The repository for Stock entities. + */ + public SExistentEntityValidator(StockRepository stockRepository) { + this.stockRepository = stockRepository; + } + + /** + * Validates the existence of Stock entities with the given client reference IDs. + * + * @param request The bulk request containing Stock entities. + * @return A map containing Stock entities and their associated error details. + */ + @Override + public Map> validate(StockBulkRequest request) { + // Map to hold Stock entities and their error details + Map> errorDetailsMap = new HashMap<>(); + // Get the list of Stock entities from the request + List entities = request.getStock(); + // Extract client reference IDs from Stock entities without errors + List clientReferenceIdList = entities.stream() + .filter(notHavingErrors()) + .map(Stock::getClientReferenceId) + .collect(Collectors.toList()); + // Create a search object for querying entities by client reference IDs + StockSearch stockSearch = StockSearch.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 = stockRepository.findById( + clientReferenceIdList, + Boolean.FALSE, + getIdFieldName(stockSearch) + ); + // 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/stock/src/main/java/org/egov/stock/validator/stockreconciliation/SrExistentEntityValidator.java b/health-services/stock/src/main/java/org/egov/stock/validator/stockreconciliation/SrExistentEntityValidator.java new file mode 100644 index 00000000000..e804a150db2 --- /dev/null +++ b/health-services/stock/src/main/java/org/egov/stock/validator/stockreconciliation/SrExistentEntityValidator.java @@ -0,0 +1,77 @@ +package org.egov.stock.validator.stockreconciliation; + +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.stock.StockReconciliation; +import org.egov.common.models.stock.StockReconciliationBulkRequest; +import org.egov.common.models.stock.StockReconciliationSearch; +import org.egov.common.validator.Validator; +import org.egov.stock.repository.StockReconciliationRepository; +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 StockReconciliation entities with the given client reference IDs. + * This validator checks if the provided StockReconciliation entities already exist in the database based on their client reference IDs. + * + * @author kanishq-egov + */ +public class SrExistentEntityValidator implements Validator { + + private final StockReconciliationRepository stockReconciliationRepository; + + /** + * Constructor to initialize the StockReconciliationRepository dependency. + * + * @param stockReconciliationRepository The repository for StockReconciliation entities. + */ + public SrExistentEntityValidator(StockReconciliationRepository stockReconciliationRepository) { + this.stockReconciliationRepository = stockReconciliationRepository; + } + + /** + * Validates the existence of StockReconciliation entities with the given client reference IDs. + * + * @param request The bulk request containing StockReconciliation entities. + * @return A map containing StockReconciliation entities and their associated error details. + */ + @Override + public Map> validate(StockReconciliationBulkRequest request) { + // Map to hold StockReconciliation entities and their error details + Map> errorDetailsMap = new HashMap<>(); + // Get the list of StockReconciliation entities from the request + List entities = request.getStockReconciliation(); + // Extract client reference IDs from StockReconciliation entities without errors + List clientReferenceIdList = entities.stream() + .filter(notHavingErrors()) + .map(StockReconciliation::getClientReferenceId) + .collect(Collectors.toList()); + // Create a search object for querying entities by client reference IDs + StockReconciliationSearch stockReconciliationSearch = StockReconciliationSearch.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 = stockReconciliationRepository.findById( + clientReferenceIdList, + Boolean.FALSE, + getIdFieldName(stockReconciliationSearch) + ); + // 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/stock/src/main/java/org/egov/stock/web/controllers/StockApiController.java b/health-services/stock/src/main/java/org/egov/stock/web/controllers/StockApiController.java index 5fb0aef98b4..913213dd191 100644 --- a/health-services/stock/src/main/java/org/egov/stock/web/controllers/StockApiController.java +++ b/health-services/stock/src/main/java/org/egov/stock/web/controllers/StockApiController.java @@ -1,36 +1,34 @@ package org.egov.stock.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.stock.Stock; import org.egov.common.models.stock.StockBulkRequest; import org.egov.common.models.stock.StockBulkResponse; import org.egov.common.models.stock.StockRequest; import org.egov.common.models.stock.StockResponse; +import org.egov.common.models.stock.StockSearchRequest; import org.egov.common.producer.Producer; import org.egov.common.utils.ResponseInfoFactory; import org.egov.stock.config.StockConfiguration; import org.egov.stock.service.StockService; -import org.egov.stock.web.models.StockSearchRequest; 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.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-08T11:49:06.320+05:30") @Controller @RequestMapping("") @@ -77,13 +75,21 @@ public ResponseEntity stockV1CreatePost(@ApiParam(value = "Capture } @RequestMapping(value = "/v1/_search", method = RequestMethod.POST) - public ResponseEntity stockV1SearchPost(@ApiParam(value = "Capture details of Stock Transfer.", required = true) @Valid @RequestBody StockSearchRequest 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 stock = stockService.search(request, limit, offset, tenantId, lastChangedSince, includeDeleted); + public ResponseEntity stockV1SearchPost( + @Valid @ModelAttribute URLParams urlParams, + @ApiParam(value = "Capture details of Stock Transfer.", required = true) @Valid @RequestBody StockSearchRequest stockSearchRequest + ) throws Exception { + + List stock = stockService.search( + stockSearchRequest, + urlParams.getLimit(), + urlParams.getOffset(), + urlParams.getTenantId(), + urlParams.getLastChangedSince(), + urlParams.getIncludeDeleted() + ); StockBulkResponse response = StockBulkResponse.builder().responseInfo(ResponseInfoFactory - .createResponseInfo(request.getRequestInfo(), true)).stock(stock).build(); + .createResponseInfo(stockSearchRequest.getRequestInfo(), true)).stock(stock).build(); return ResponseEntity.status(HttpStatus.OK).body(response); } diff --git a/health-services/stock/src/main/java/org/egov/stock/web/controllers/StockReconciliationApiController.java b/health-services/stock/src/main/java/org/egov/stock/web/controllers/StockReconciliationApiController.java index 96633e81891..e612c3b692f 100644 --- a/health-services/stock/src/main/java/org/egov/stock/web/controllers/StockReconciliationApiController.java +++ b/health-services/stock/src/main/java/org/egov/stock/web/controllers/StockReconciliationApiController.java @@ -1,32 +1,30 @@ package org.egov.stock.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.stock.StockReconciliation; import org.egov.common.models.stock.StockReconciliationBulkRequest; import org.egov.common.models.stock.StockReconciliationBulkResponse; import org.egov.common.models.stock.StockReconciliationRequest; import org.egov.common.models.stock.StockReconciliationResponse; +import org.egov.common.models.stock.StockReconciliationSearchRequest; import org.egov.common.producer.Producer; import org.egov.common.utils.ResponseInfoFactory; import org.egov.stock.config.StockReconciliationConfiguration; import org.egov.stock.service.StockReconciliationService; -import org.egov.stock.web.models.StockReconciliationSearchRequest; 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; @Controller @RequestMapping("") @@ -74,14 +72,21 @@ public ResponseEntity stockReconciliationV1CreatePost(@ApiParam(va } @RequestMapping(value = "/reconciliation/v1/_search", method = RequestMethod.POST) - public ResponseEntity stockReconciliationV1SearchPost(@ApiParam(value = "Capture details of Stock Reconciliation.", required = true) @Valid @RequestBody StockReconciliationSearchRequest 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 stock = stockReconciliationService.search(request, limit, offset, tenantId, lastChangedSince, includeDeleted); + public ResponseEntity stockReconciliationV1SearchPost( + @Valid @ModelAttribute URLParams urlParams, + @ApiParam(value = "Capture details of Stock Reconciliation.", required = true) @Valid @RequestBody StockReconciliationSearchRequest stockReconciliationSearchRequest + ) throws Exception { + + List stock = stockReconciliationService.search( + stockReconciliationSearchRequest, + urlParams.getLimit(), + urlParams.getOffset(), + urlParams.getTenantId(), + urlParams.getLastChangedSince(), + urlParams.getIncludeDeleted() + ); StockReconciliationBulkResponse response = StockReconciliationBulkResponse.builder().responseInfo(ResponseInfoFactory - .createResponseInfo(request.getRequestInfo(), true)).stockReconciliation(stock).build(); + .createResponseInfo(stockReconciliationSearchRequest.getRequestInfo(), true)).stockReconciliation(stock).build(); return ResponseEntity.status(HttpStatus.OK).body(response); } diff --git a/health-services/stock/src/main/java/org/egov/stock/web/models/StockReconciliationSearch.java b/health-services/stock/src/main/java/org/egov/stock/web/models/StockReconciliationSearch.java deleted file mode 100644 index e4eea6f7ed1..00000000000 --- a/health-services/stock/src/main/java/org/egov/stock/web/models/StockReconciliationSearch.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.egov.stock.web.models; - -import java.util.List; -import javax.validation.Valid; - -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.data.query.annotations.Table; -import org.springframework.validation.annotation.Validated; - -/** - * StockReconciliationSearch - */ -@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) -@Table(name = "stock_reconciliation_log") -public class StockReconciliationSearch { - @JsonProperty("id") - @Valid - private List id = null; - - @JsonProperty("clientReferenceId") - private List clientReferenceId = null; - - @JsonProperty("facilityId") - private List facilityId = null; - - @JsonProperty("productVariantId") - private List productVariantId = null; -} - diff --git a/health-services/stock/src/main/java/org/egov/stock/web/models/StockReconciliationSearchRequest.java b/health-services/stock/src/main/java/org/egov/stock/web/models/StockReconciliationSearchRequest.java deleted file mode 100644 index e09efe6db86..00000000000 --- a/health-services/stock/src/main/java/org/egov/stock/web/models/StockReconciliationSearchRequest.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.egov.stock.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; - -/** - * StockReconciliationSearchRequest - */ -@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 StockReconciliationSearchRequest { - @JsonProperty("RequestInfo") - @NotNull - @Valid - private org.egov.common.contract.request.RequestInfo requestInfo = null; - - @JsonProperty("StockReconciliation") - @NotNull - @Valid - private StockReconciliationSearch stockReconciliation = null; - - -} - diff --git a/health-services/stock/src/main/java/org/egov/stock/web/models/StockSearch.java b/health-services/stock/src/main/java/org/egov/stock/web/models/StockSearch.java deleted file mode 100644 index 38b1c4a2e6d..00000000000 --- a/health-services/stock/src/main/java/org/egov/stock/web/models/StockSearch.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.egov.stock.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.data.query.annotations.Table; -import org.egov.common.models.stock.TransactionReason; -import org.egov.common.models.stock.TransactionType; -import org.springframework.validation.annotation.Validated; - -import javax.validation.Valid; -import javax.validation.constraints.Size; -import java.util.List; - -/** - * StockSearch - */ -@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) -@Table(name="stock") -public class StockSearch { - - @JsonProperty("id") - private List id = null; - - @JsonProperty("clientReferenceId") - private List clientReferenceId = null; - - @JsonProperty("facilityId") - @Size(min=2, max=64) - private String facilityId = null; - - @JsonProperty("productVariantId") - private List productVariantId = null; - - @JsonProperty("referenceId") - private String referenceId = null; - - @JsonProperty("wayBillNumber") - private List wayBillNumber = null; - - @JsonProperty("referenceIdType") - @Size(min=2, max=64) - private String referenceIdType = null; - - @JsonProperty("transactionType") - @Valid - private TransactionType transactionType = null; - - @JsonProperty("transactionReason") - @Valid - private TransactionReason transactionReason = null; - - @JsonProperty("transactingPartyId") - @Size(min=2, max=64) - private String transactingPartyId = null; - - @JsonProperty("transactingPartyType") - private String transactingPartyType = null; -} - diff --git a/health-services/stock/src/main/resources/application.properties b/health-services/stock/src/main/resources/application.properties index 5f192d7bdf8..47372ce87b1 100644 --- a/health-services/stock/src/main/resources/application.properties +++ b/health-services/stock/src/main/resources/application.properties @@ -65,6 +65,7 @@ egov.user.integration.enabled=true egov.user.host=https://dev.digit.org egov.user.context.path=/user/users egov.create.user.path=/_createnovalidate +egov.create.user.url=/_createnovalidate egov.search.user.url=/user/_search egov.update.user.url=/_updatenovalidate diff --git a/health-services/stock/src/test/java/org/egov/stock/helper/StockReconciliationTestBuilder.java b/health-services/stock/src/test/java/org/egov/stock/helper/StockReconciliationTestBuilder.java index d7cfc4c247d..e841f6af674 100644 --- a/health-services/stock/src/test/java/org/egov/stock/helper/StockReconciliationTestBuilder.java +++ b/health-services/stock/src/test/java/org/egov/stock/helper/StockReconciliationTestBuilder.java @@ -1,15 +1,16 @@ package org.egov.stock.helper; import org.egov.common.helper.AuditDetailsTestBuilder; +import org.egov.common.models.household.Household; import org.egov.common.models.stock.StockReconciliation; public class StockReconciliationTestBuilder { - private final StockReconciliation.StockReconciliationBuilder builder; + private final StockReconciliation.StockReconciliationBuilder builder; public StockReconciliationTestBuilder() { - this.builder = StockReconciliation.builder(); + this.builder = (StockReconciliation.StockReconciliationBuilder) StockReconciliation.builder(); } public static StockReconciliationTestBuilder builder() { diff --git a/health-services/stock/src/test/java/org/egov/stock/helper/StockTestBuilder.java b/health-services/stock/src/test/java/org/egov/stock/helper/StockTestBuilder.java index fd83333e42e..7499c8e92f4 100644 --- a/health-services/stock/src/test/java/org/egov/stock/helper/StockTestBuilder.java +++ b/health-services/stock/src/test/java/org/egov/stock/helper/StockTestBuilder.java @@ -10,10 +10,10 @@ public class StockTestBuilder { - private final Stock.StockBuilder builder; + private final Stock.StockBuilder builder; public StockTestBuilder() { - this.builder = Stock.builder(); + this.builder = (Stock.StockBuilder) Stock.builder(); } public static StockTestBuilder builder() { diff --git a/health-services/transformer/CHANGELOG.md b/health-services/transformer/CHANGELOG.md index 645e12b40e1..37c764ad279 100644 --- a/health-services/transformer/CHANGELOG.md +++ b/health-services/transformer/CHANGELOG.md @@ -1,5 +1,8 @@ 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 - Base version diff --git a/health-services/transformer/pom.xml b/health-services/transformer/pom.xml index ea3bb03ab4b..842ee04fa12 100644 --- a/health-services/transformer/pom.xml +++ b/health-services/transformer/pom.xml @@ -5,16 +5,17 @@ transformer jar transformer - 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 @@ -46,6 +47,7 @@ org.projectlombok lombok + ${lombok.version} true @@ -57,22 +59,34 @@ org.egov.common health-services-models - 1.0.6-SNAPSHOT + 1.0.20-SNAPSHOT + compile + + + org.egov.common + health-services-common + 1.0.16-SNAPSHOT compile org.egov.services tracer - 2.1.4-SNAPSHOT + 2.9.0-SNAPSHOT - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 + org.postgresql + postgresql + 42.7.1 - - javax.validation - validation-api + junit + junit + 4.13.2 + test + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 diff --git a/health-services/transformer/src/main/java/org/egov/transformer/boundary/BoundaryMapper.java b/health-services/transformer/src/main/java/org/egov/transformer/boundary/BoundaryMapper.java index b9b0f2b0ee3..e6fbfbd4eb8 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/boundary/BoundaryMapper.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/boundary/BoundaryMapper.java @@ -1,17 +1,16 @@ package org.egov.transformer.boundary; -import org.egov.common.models.transformer.upstream.Boundary; +import org.egov.common.models.core.Boundary; public class BoundaryMapper { public static BoundaryNode from(Boundary boundary) { return BoundaryNode.builder() - .name(boundary.getName()) + .id(boundary.getId()) .code(boundary.getCode()) - .label(boundary.getLabel()) - .latitude(boundary.getLatitude()) - .longitude(boundary.getLongitude()) + .tenantId(boundary.getTenantId()) + .geometry(boundary.getGeometry()) .build(); } diff --git a/health-services/transformer/src/main/java/org/egov/transformer/boundary/BoundaryNode.java b/health-services/transformer/src/main/java/org/egov/transformer/boundary/BoundaryNode.java index f9189e869a1..72e14c5b9ed 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/boundary/BoundaryNode.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/boundary/BoundaryNode.java @@ -1,5 +1,6 @@ package org.egov.transformer.boundary; +import com.fasterxml.jackson.databind.JsonNode; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -10,9 +11,8 @@ @NoArgsConstructor @Builder public class BoundaryNode { + private String id; + private String tenantId; private String code; - private String name; - private String label; - private String latitude; - private String longitude; + private JsonNode geometry; } diff --git a/health-services/transformer/src/main/java/org/egov/transformer/boundary/TreeGenerator.java b/health-services/transformer/src/main/java/org/egov/transformer/boundary/TreeGenerator.java deleted file mode 100644 index 4a96ed10f95..00000000000 --- a/health-services/transformer/src/main/java/org/egov/transformer/boundary/TreeGenerator.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.egov.transformer.boundary; - - -import org.egov.common.models.transformer.upstream.Boundary; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; - -@Component -public class TreeGenerator { - - - public BoundaryTree generateTree(Boundary boundary) { - BoundaryTree boundaryTree = new BoundaryTree(); - boundaryTree.setBoundaryNode(BoundaryMapper.from(boundary)); - if (boundary.getChildren() != null && !boundary.getChildren().isEmpty()) { - List boundaryTrees = new ArrayList<>(); - boundaryTree.setBoundaryTrees(boundaryTrees); - for (Boundary child : boundary.getChildren()) { - BoundaryTree resultTree = generateTree(child); - resultTree.setParent(boundaryTree); - boundaryTrees.add(resultTree); - } - } - return boundaryTree; - } - - public BoundaryTree search(BoundaryTree boundaryTree, String code) { - if (code.equals(boundaryTree.getBoundaryNode().getCode())) { - return boundaryTree; - } - BoundaryTree bt = null; - if (boundaryTree.getBoundaryTrees() != null && !boundaryTree.getBoundaryTrees().isEmpty()) { - for (BoundaryTree child : boundaryTree.getBoundaryTrees()) { - bt = search(child, code); - if (bt != null) { - break; - } - } - } - return bt; - } -} diff --git a/health-services/transformer/src/main/java/org/egov/transformer/config/MainConfiguration.java b/health-services/transformer/src/main/java/org/egov/transformer/config/MainConfiguration.java index 9c7debc9f31..050c1ea7217 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/config/MainConfiguration.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/config/MainConfiguration.java @@ -1,5 +1,10 @@ package org.egov.transformer.config; +import java.util.List; +import java.util.Map; +import java.util.TimeZone; +import java.util.stream.Collectors; + import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.PropertyAccessor; @@ -7,6 +12,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.egov.common.models.project.Project; import org.egov.common.models.project.ProjectStaff; @@ -23,14 +29,14 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import javax.annotation.PostConstruct; -import java.util.List; -import java.util.Map; -import java.util.TimeZone; -import java.util.stream.Collectors; - @Import({TracerConfiguration.class}) @Configuration @ComponentScan(basePackages = {"org.egov"}) @@ -40,6 +46,9 @@ public class MainConfiguration { @Value("${app.timezone}") private String timeZone; + @Value("${spring.redis.host}") + private String redisHost; + @PostConstruct public void initialize() { TimeZone.setDefault(TimeZone.getTimeZone(timeZone)); @@ -130,4 +139,26 @@ public Map>> getOperationTransfor log.info(map.toString()); return map; } + + @Bean + public RedisConnectionFactory redisConnectionFactory() { + RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); + redisStandaloneConfiguration.setHostName(redisHost); + return new JedisConnectionFactory(redisStandaloneConfiguration); + } + + @Bean + public RedisTemplate redisTemplate(@Qualifier("redisObjectMapper") ObjectMapper redisObjectMapper, + RedisConnectionFactory redisConnectionFactory) { + Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(redisObjectMapper, Object.class); + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(redisConnectionFactory); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(serializer); + redisTemplate.setHashKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashValueSerializer(serializer); + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } + } \ No newline at end of file diff --git a/health-services/transformer/src/main/java/org/egov/transformer/config/TransformerProperties.java b/health-services/transformer/src/main/java/org/egov/transformer/config/TransformerProperties.java index 2801294e64f..1a577a98fb7 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/config/TransformerProperties.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/config/TransformerProperties.java @@ -74,5 +74,16 @@ public class TransformerProperties { @Value("${boundary.label.name.administrativeProvince}") private String administrativeProvince; + @Value("${egov.boundary.host}") + private String boundaryServiceHost; + + @Value("${egov.boundary.search.url}") + private String boundarySearchUrl; + + @Value("${egov.boundary.relationship.search.url}") + private String boundaryRelationshipSearchUrl; + + @Value("${egov.boundary.hierarchy.name}") + private String boundaryHierarchyName; } diff --git a/health-services/transformer/src/main/java/org/egov/transformer/http/client/ServiceRequestClient.java b/health-services/transformer/src/main/java/org/egov/transformer/http/client/ServiceRequestClient.java index edde27c1486..b3a36bcb10b 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/http/client/ServiceRequestClient.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/http/client/ServiceRequestClient.java @@ -11,7 +11,7 @@ import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; -@Repository +//@Repository @Slf4j public class ServiceRequestClient { diff --git a/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/BoundaryRequest.java b/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/BoundaryRequest.java new file mode 100644 index 00000000000..3e128bcd434 --- /dev/null +++ b/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/BoundaryRequest.java @@ -0,0 +1,38 @@ +package org.egov.transformer.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/transformer/src/main/java/org/egov/transformer/models/boundary/BoundaryResponse.java b/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/BoundaryResponse.java new file mode 100644 index 00000000000..afcdfa94736 --- /dev/null +++ b/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/BoundaryResponse.java @@ -0,0 +1,44 @@ +package org.egov.transformer.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/transformer/src/main/java/org/egov/transformer/models/boundary/BoundarySearchCriteria.java b/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/BoundarySearchCriteria.java new file mode 100644 index 00000000000..cfcd2c81732 --- /dev/null +++ b/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/BoundarySearchCriteria.java @@ -0,0 +1,37 @@ +package org.egov.transformer.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/transformer/src/main/java/org/egov/transformer/models/boundary/BoundarySearchResponse.java b/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/BoundarySearchResponse.java new file mode 100644 index 00000000000..244af7e5a27 --- /dev/null +++ b/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/BoundarySearchResponse.java @@ -0,0 +1,33 @@ +package org.egov.transformer.models.boundary; + +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.springframework.validation.annotation.Validated; + +/** + * BoundarySearchResponse + */ +@Validated + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class BoundarySearchResponse { + + @JsonProperty("ResponseInfo") + @Valid + private ResponseInfo responseInfo = null; + + @JsonProperty("TenantBoundary") + @Valid + private List tenantBoundary = null; + +} diff --git a/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/EnrichedBoundary.java b/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/EnrichedBoundary.java new file mode 100644 index 00000000000..8b85a96e3a5 --- /dev/null +++ b/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/EnrichedBoundary.java @@ -0,0 +1,43 @@ +package org.egov.transformer.models.boundary; + +import java.util.List; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.validation.annotation.Validated; + +/** + * EnrichedBoundary + */ +@Validated + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class EnrichedBoundary { + + @JsonProperty("id") + private String id = null; + + @JsonProperty("code") + @NotNull + private String code = null; + + @JsonProperty("boundaryType") + private String boundaryType = null; + + @JsonProperty("children") + @Valid + private List children = null; + + @JsonIgnore + private String parent = null; + +} diff --git a/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/HierarchyRelation.java b/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/HierarchyRelation.java new file mode 100644 index 00000000000..b1faf8f5f98 --- /dev/null +++ b/health-services/transformer/src/main/java/org/egov/transformer/models/boundary/HierarchyRelation.java @@ -0,0 +1,34 @@ +package org.egov.transformer.models.boundary; + +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.springframework.validation.annotation.Validated; + +/** + * HierarchyRelation + */ +@Validated + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class HierarchyRelation { + + @JsonProperty("tenantId") + private String tenantId = null; + + @JsonProperty("hierarchyType") + private String hierarchyType = null; + + @JsonProperty("boundary") + @Valid + private List boundary = null; + +} diff --git a/health-services/transformer/src/main/java/org/egov/transformer/producer/Producer.java b/health-services/transformer/src/main/java/org/egov/transformer/producer/Producer.java index 009ccc4c089..0d5eef066df 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/producer/Producer.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/producer/Producer.java @@ -7,7 +7,7 @@ // NOTE: If tracer is disabled change CustomKafkaTemplate to KafkaTemplate in autowiring -@Service + @Slf4j public class Producer { diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/BoundaryService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/BoundaryService.java deleted file mode 100644 index 61591ce91c2..00000000000 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/BoundaryService.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.egov.transformer.service; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.jayway.jsonpath.Configuration; -import com.jayway.jsonpath.DocumentContext; -import com.jayway.jsonpath.JsonPath; -import com.jayway.jsonpath.Option; -import lombok.extern.slf4j.Slf4j; -import net.minidev.json.JSONArray; -import net.minidev.json.JSONObject; -import org.egov.common.contract.request.RequestInfo; -import org.egov.common.models.transformer.upstream.Boundary; -import org.egov.tracer.model.CustomException; -import org.egov.transformer.boundary.BoundaryTree; -import org.egov.transformer.boundary.TreeGenerator; -import org.egov.transformer.config.TransformerProperties; -import org.egov.transformer.http.client.ServiceRequestClient; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; - -import java.util.Arrays; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -@Component -@Slf4j -public class BoundaryService { - - private final TransformerProperties transformerProperties; - - private final ServiceRequestClient serviceRequestClient; - - private final ObjectMapper objectMapper; - - private final TreeGenerator treeGenerator; - - private static final Map> boundaryListMap = new ConcurrentHashMap<>(); - - public BoundaryService(TransformerProperties transformerProperties, - ServiceRequestClient serviceRequestClient, - ObjectMapper objectMapper, TreeGenerator treeGenerator) { - this.transformerProperties = transformerProperties; - this.serviceRequestClient = serviceRequestClient; - this.objectMapper = objectMapper; - this.treeGenerator = treeGenerator; - } - - public List getBoundary(String code, String hierarchyTypeCode, String tenantId) { - if (boundaryListMap.containsKey(code)) { - log.info("getting boudary data for code {} from cache", code); - return boundaryListMap.get(code); - } - List boundaryList = searchBoundary(code, hierarchyTypeCode, tenantId); - if (!boundaryList.isEmpty()) { - boundaryListMap.put(code, boundaryList); - } else { - boundaryList = Collections.emptyList(); - } - return boundaryList; - } - - public BoundaryTree generateTree(Boundary boundary) { - return treeGenerator.generateTree(boundary); - } - - public BoundaryTree search(BoundaryTree boundaryTree, String code) { - return treeGenerator.search(boundaryTree, code); - } - - private List searchBoundary(String code, String hierarchyTypeCode, String tenantId) { - - LinkedHashMap response; - try { - StringBuilder uri = new StringBuilder(); - uri.append(transformerProperties.getLocationHost()) - .append(transformerProperties.getLocationSearchUrl()) - .append("?limit=").append(transformerProperties.getSearchApiLimit()) - .append("&offset=0") - .append("&tenantId=").append(tenantId); - if (hierarchyTypeCode != null) { - uri.append("&hierarchyTypeCode=").append(hierarchyTypeCode); - } - uri.append("&code=").append(code); - response = serviceRequestClient.fetchResult(uri, - RequestInfo.builder().build(), - LinkedHashMap.class); - } catch (Exception e) { - log.error("error while calling boundary service", e); - throw new CustomException("BOUNDARY_ERROR", "error while calling boundary service"); - } - if (response != null) { - if (CollectionUtils.isEmpty(response)) { - log.error("empty response received from boundary service"); - throw new CustomException("BOUNDARY_ERROR", "the response from location service is empty or null"); - } - Configuration cf = Configuration.builder().options(Option.ALWAYS_RETURN_LIST).build(); - String jsonString = new JSONObject(response).toString(); - DocumentContext context = JsonPath.using(cf).parse(jsonString); - JSONArray jsonArray = context.read("$.TenantBoundary[?(@.hierarchyType.code == 'ADMIN')].boundary"); - if (jsonArray != null) { - String str = jsonArray.get(0).toString(); - try { - return Arrays.asList(objectMapper - .readValue(str, - Boundary[].class)); - } catch (JsonProcessingException e) { - log.error("error in paring json", e); - throw new CustomException("JSON_ERROR", "error in parsing json"); - } - } - log.warn("boundary list is empty"); - } - return Collections.emptyList(); - } -} diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/FacilityService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/FacilityService.java index 17caf3ec5da..91f8a4aa68c 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/FacilityService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/FacilityService.java @@ -1,5 +1,11 @@ package org.egov.transformer.service; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; @@ -9,15 +15,9 @@ import org.egov.common.models.facility.FacilitySearch; import org.egov.common.models.facility.FacilitySearchRequest; import org.egov.transformer.config.TransformerProperties; -import org.egov.transformer.http.client.ServiceRequestClient; +import org.egov.common.http.client.ServiceRequestClient; import org.springframework.stereotype.Service; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - @Service @Slf4j public class FacilityService { diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/MdmsService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/MdmsService.java index 7599cd82242..f29309f74de 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/MdmsService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/MdmsService.java @@ -2,7 +2,7 @@ import lombok.extern.slf4j.Slf4j; import org.egov.tracer.model.CustomException; -import org.egov.transformer.http.client.ServiceRequestClient; +import org.egov.common.http.client.ServiceRequestClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectIndexV1TransformationService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectIndexV1TransformationService.java index 674d2ccdbe6..62b453eaf66 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectIndexV1TransformationService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectIndexV1TransformationService.java @@ -3,7 +3,7 @@ import lombok.extern.slf4j.Slf4j; import org.egov.common.models.project.Project; import org.egov.transformer.config.TransformerProperties; -import org.egov.transformer.producer.Producer; +import org.egov.common.producer.Producer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectService.java index 3853e41b460..603906733c7 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectService.java @@ -1,5 +1,14 @@ package org.egov.transformer.service; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Deque; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; @@ -14,20 +23,13 @@ import org.egov.common.models.project.Project; import org.egov.common.models.project.ProjectRequest; import org.egov.common.models.project.ProjectResponse; -import org.egov.common.models.transformer.upstream.Boundary; import org.egov.tracer.model.CustomException; -import org.egov.transformer.boundary.BoundaryNode; -import org.egov.transformer.boundary.BoundaryTree; import org.egov.transformer.config.TransformerProperties; -import org.egov.transformer.http.client.ServiceRequestClient; +import org.egov.common.http.client.ServiceRequestClient; +import org.egov.transformer.models.boundary.BoundarySearchResponse; +import org.egov.transformer.models.boundary.EnrichedBoundary; import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; +import org.springframework.util.CollectionUtils; import static org.egov.transformer.Constants.INTERNAL_SERVER_ERROR; import static org.egov.transformer.Constants.MDMS_RESPONSE; @@ -43,19 +45,16 @@ public class ProjectService { private final ObjectMapper objectMapper; - private final BoundaryService boundaryService; - private final MdmsService mdmsService; private static final Map projectMap = new ConcurrentHashMap<>(); public ProjectService(TransformerProperties transformerProperties, ServiceRequestClient serviceRequestClient, - ObjectMapper objectMapper, BoundaryService boundaryService, MdmsService mdmsService) { + ObjectMapper objectMapper, MdmsService mdmsService) { this.transformerProperties = transformerProperties; this.serviceRequestClient = serviceRequestClient; this.objectMapper = objectMapper; - this.boundaryService = boundaryService; this.mdmsService = mdmsService; } @@ -92,24 +91,73 @@ public Project getProjectByName(String projectName, String tenantId) { return project; } - public Map getBoundaryLabelToNameMapByProjectId(String projectId, String tenantId) { + public Map getBoundaryCodeToNameMapByProjectId(String projectId, String tenantId) { Project project = getProject(projectId, tenantId); String locationCode = project.getAddress().getBoundary(); - return getBoundaryLabelToNameMap(locationCode, tenantId); + return getBoundaryCodeToNameMap(locationCode, tenantId); } - public Map getBoundaryLabelToNameMap(String locationCode, String tenantId) { - List boundaryList = boundaryService.getBoundary(locationCode, "ADMIN", - tenantId); - BoundaryTree boundaryTree = boundaryService.generateTree(boundaryList.get(0)); - BoundaryTree locationTree = boundaryService.search(boundaryTree, locationCode); - List parentNodes = locationTree.getParentNodes(); - Map resultMap = parentNodes.stream().collect(Collectors - .toMap(BoundaryNode::getLabel, BoundaryNode::getName)); - resultMap.put(locationTree.getBoundaryNode().getLabel(), locationTree.getBoundaryNode().getName()); - return resultMap; + public Map getBoundaryCodeToNameMap(String locationCode, String tenantId) { + List boundaries = new ArrayList<>(); + try { + // Fetch boundary details from the service + log.debug("Fetching boundary relation details for tenantId: {}, boundary: {}", tenantId, locationCode); + BoundarySearchResponse boundarySearchResponse = serviceRequestClient.fetchResult( + new StringBuilder(transformerProperties.getBoundaryServiceHost() + + transformerProperties.getBoundaryRelationshipSearchUrl() + +"?includeParents=true&tenantId=" + tenantId + + "&hierarchyType=" + transformerProperties.getBoundaryHierarchyName() + + "&codes=" + locationCode), + RequestInfo.builder().build(), + BoundarySearchResponse.class + ); + log.debug("Boundary Relationship details fetched successfully for tenantId: {}", tenantId); + + List enrichedBoundaries = boundarySearchResponse.getTenantBoundary().stream() + .filter(hierarchyRelation -> !CollectionUtils.isEmpty(hierarchyRelation.getBoundary())) + .flatMap(hierarchyRelation -> hierarchyRelation.getBoundary().stream()) + .collect(Collectors.toList()); + + getAllBoundaryCodes(enrichedBoundaries, boundaries); + + } 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 boundaries.stream() + .collect(Collectors.toMap( + EnrichedBoundary::getBoundaryType, + boundary -> boundary.getCode().substring(boundary.getCode().lastIndexOf('_') + 1) + )); } + private void getAllBoundaryCodes(List enrichedBoundaries, List boundaries) { + if (enrichedBoundaries == null || enrichedBoundaries.isEmpty()) { + return; + } + + for (EnrichedBoundary root : enrichedBoundaries) { + if (root != null) { + Deque stack = new ArrayDeque<>(); + stack.push(root); + + while (!stack.isEmpty()) { + EnrichedBoundary current = stack.pop(); + if (current != null) { + boundaries.add(current); + if (current.getChildren() != null) { + stack.addAll(current.getChildren()); + } + } + } + } + } + } + + + private List searchProjectByName(String projectName, String tenantId) { ProjectRequest request = ProjectRequest.builder() diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectStaffIndexV1TransformationService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectStaffIndexV1TransformationService.java index 199ef6d248c..b9f9f68109c 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectStaffIndexV1TransformationService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectStaffIndexV1TransformationService.java @@ -3,7 +3,7 @@ import lombok.extern.slf4j.Slf4j; import org.egov.common.models.project.ProjectStaff; import org.egov.transformer.config.TransformerProperties; -import org.egov.transformer.producer.Producer; +import org.egov.common.producer.Producer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectStaffTransformationService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectStaffTransformationService.java index 9527ee5848a..d4966a6512f 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectStaffTransformationService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectStaffTransformationService.java @@ -5,7 +5,7 @@ import org.egov.transformer.config.TransformerProperties; import org.egov.transformer.enums.Operation; import org.egov.transformer.models.downstream.ProjectStaffIndexV1; -import org.egov.transformer.producer.Producer; +import org.egov.common.producer.Producer; import org.egov.transformer.service.transformer.Transformer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -67,7 +67,7 @@ static class ProjectStaffIndexV1Transformer implements @Override public List transform(ProjectStaff projectStaff) { Map boundaryLabelToNameMap = projectService - .getBoundaryLabelToNameMapByProjectId(projectStaff.getProjectId(), projectStaff.getTenantId()); + .getBoundaryCodeToNameMapByProjectId(projectStaff.getProjectId(), projectStaff.getTenantId()); log.info("boundary labels {}", boundaryLabelToNameMap.toString()); return Collections.singletonList(ProjectStaffIndexV1.builder() .id(projectStaff.getId()) diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectTaskIndexV1TransformationService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectTaskIndexV1TransformationService.java index 4d94b935419..87b877472b9 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectTaskIndexV1TransformationService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectTaskIndexV1TransformationService.java @@ -3,7 +3,7 @@ import lombok.extern.slf4j.Slf4j; import org.egov.common.models.project.Task; import org.egov.transformer.config.TransformerProperties; -import org.egov.transformer.producer.Producer; +import org.egov.common.producer.Producer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectTaskTransformationService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectTaskTransformationService.java index d4aa3898406..286b416649f 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectTaskTransformationService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectTaskTransformationService.java @@ -5,7 +5,7 @@ import org.egov.transformer.config.TransformerProperties; import org.egov.transformer.enums.Operation; import org.egov.transformer.models.downstream.ProjectTaskIndexV1; -import org.egov.transformer.producer.Producer; +import org.egov.common.producer.Producer; import org.egov.transformer.service.transformer.Transformer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -68,10 +68,10 @@ public List transform(Task task) { Map boundaryLabelToNameMap = null; if (task.getAddress().getLocality() != null && task.getAddress().getLocality().getCode() != null) { boundaryLabelToNameMap = projectService - .getBoundaryLabelToNameMap(task.getAddress().getLocality().getCode(), task.getTenantId()); + .getBoundaryCodeToNameMap(task.getAddress().getLocality().getCode(), task.getTenantId()); } else { boundaryLabelToNameMap = projectService - .getBoundaryLabelToNameMapByProjectId(task.getProjectId(), task.getTenantId()); + .getBoundaryCodeToNameMapByProjectId(task.getProjectId(), task.getTenantId()); } log.info("boundary labels {}", boundaryLabelToNameMap.toString()); Map finalBoundaryLabelToNameMap = boundaryLabelToNameMap; diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectTransformationService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectTransformationService.java index fae2d3667f8..a9e1d11dde7 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectTransformationService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/ProjectTransformationService.java @@ -6,7 +6,7 @@ import org.egov.transformer.config.TransformerProperties; import org.egov.transformer.enums.Operation; import org.egov.transformer.models.downstream.ProjectIndexV1; -import org.egov.transformer.producer.Producer; +import org.egov.common.producer.Producer; import org.egov.transformer.service.transformer.Transformer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -70,7 +70,7 @@ static class ProjectIndexV1Transformer implements @Override public List transform(Project project) { Map boundaryLabelToNameMap = projectService - .getBoundaryLabelToNameMap(project.getAddress().getBoundary(), project.getTenantId()); + .getBoundaryCodeToNameMap(project.getAddress().getBoundary(), project.getTenantId()); log.info("boundary labels {}", boundaryLabelToNameMap.toString()); List targets = project.getTargets(); if (targets == null || targets.isEmpty()) { diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/ServiceDefinitionService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/ServiceDefinitionService.java index 012d95c4687..ef694f513f8 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/ServiceDefinitionService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/ServiceDefinitionService.java @@ -1,22 +1,22 @@ package org.egov.transformer.service; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + import lombok.extern.slf4j.Slf4j; import org.egov.common.contract.request.RequestInfo; import org.egov.common.contract.request.User; import org.egov.tracer.model.CustomException; import org.egov.transformer.config.TransformerProperties; -import org.egov.transformer.http.client.ServiceRequestClient; +import org.egov.common.http.client.ServiceRequestClient; import org.egov.transformer.models.upstream.ServiceDefinition; import org.egov.transformer.models.upstream.ServiceDefinitionCriteria; import org.egov.transformer.models.upstream.ServiceDefinitionResponse; import org.egov.transformer.models.upstream.ServiceDefinitionSearchRequest; import org.springframework.stereotype.Component; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - @Component @Slf4j public class ServiceDefinitionService { diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/ServiceTaskIndexV1TransformationService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/ServiceTaskIndexV1TransformationService.java index 859cf0f63a6..403756acfe6 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/ServiceTaskIndexV1TransformationService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/ServiceTaskIndexV1TransformationService.java @@ -3,7 +3,7 @@ import lombok.extern.slf4j.Slf4j; import org.egov.transformer.config.TransformerProperties; import org.egov.transformer.models.upstream.Service; -import org.egov.transformer.producer.Producer; +import org.egov.common.producer.Producer; import org.springframework.stereotype.Component; import java.util.List; diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/ServiceTaskTransformationService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/ServiceTaskTransformationService.java index 4bdb2ddfd6c..3d743e98750 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/ServiceTaskTransformationService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/ServiceTaskTransformationService.java @@ -7,7 +7,7 @@ import org.egov.transformer.models.downstream.ServiceIndexV1; import org.egov.transformer.models.upstream.Service; import org.egov.transformer.models.upstream.ServiceDefinition; -import org.egov.transformer.producer.Producer; +import org.egov.common.producer.Producer; import org.egov.transformer.service.transformer.Transformer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -77,7 +77,7 @@ public List transform(Service service) { String projectName = parts[0]; String supervisorLevel = parts[2]; String projectId = projectService.getProjectByName(projectName, service.getTenantId()).getId(); - Map boundaryLabelToNameMap = projectService.getBoundaryLabelToNameMapByProjectId(projectId, service.getTenantId()); + Map boundaryLabelToNameMap = projectService.getBoundaryCodeToNameMapByProjectId(projectId, service.getTenantId()); log.info("boundary labels {}", boundaryLabelToNameMap.toString()); return Collections.singletonList(ServiceIndexV1.builder() diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/StockIndexV1TransformationService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/StockIndexV1TransformationService.java index 268ce898c8c..e0b4ac41750 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/StockIndexV1TransformationService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/StockIndexV1TransformationService.java @@ -3,7 +3,7 @@ import lombok.extern.slf4j.Slf4j; import org.egov.common.models.stock.Stock; import org.egov.transformer.config.TransformerProperties; -import org.egov.transformer.producer.Producer; +import org.egov.common.producer.Producer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/health-services/transformer/src/main/java/org/egov/transformer/service/StockTransformationService.java b/health-services/transformer/src/main/java/org/egov/transformer/service/StockTransformationService.java index 2044dbe1658..7bc8e963fc0 100644 --- a/health-services/transformer/src/main/java/org/egov/transformer/service/StockTransformationService.java +++ b/health-services/transformer/src/main/java/org/egov/transformer/service/StockTransformationService.java @@ -2,11 +2,13 @@ import lombok.extern.slf4j.Slf4j; import org.egov.common.models.facility.Facility; +import org.egov.common.models.stock.ReferenceIdType; +import org.egov.common.models.stock.SenderReceiverType; import org.egov.common.models.stock.Stock; import org.egov.transformer.config.TransformerProperties; import org.egov.transformer.enums.Operation; import org.egov.transformer.models.downstream.StockIndexV1; -import org.egov.transformer.producer.Producer; +import org.egov.common.producer.Producer; import org.egov.transformer.service.transformer.Transformer; import org.springframework.stereotype.Component; @@ -74,22 +76,25 @@ static class StockIndexV1Transformer implements @Override public List transform(Stock stock) { Map boundaryLabelToNameMap = null; - Facility facility = facilityService.findFacilityById(stock.getFacilityId(), stock.getTenantId()); - if (facility.getAddress().getLocality() != null && facility.getAddress().getLocality().getCode() != null) { + Facility facility = null; + if (stock.getSenderType().equals(SenderReceiverType.WAREHOUSE)) { + facility = facilityService.findFacilityById(stock.getSenderId(), stock.getTenantId()); + } + if (facility != null && facility.getAddress().getLocality() != null && facility.getAddress().getLocality().getCode() != null) { boundaryLabelToNameMap = projectService - .getBoundaryLabelToNameMap(facility.getAddress().getLocality().getCode(), stock.getTenantId()); + .getBoundaryCodeToNameMap(facility.getAddress().getLocality().getCode(), stock.getTenantId()); } else { - if (stock.getReferenceIdType().equals(PROJECT)) { + if (stock.getReferenceIdType().equals(ReferenceIdType.PROJECT)) { boundaryLabelToNameMap = projectService - .getBoundaryLabelToNameMapByProjectId(stock.getReferenceId(), stock.getTenantId()); + .getBoundaryCodeToNameMapByProjectId(stock.getReferenceId(), stock.getTenantId()); } } return Collections.singletonList(StockIndexV1.builder() .id(stock.getId()) .productVariant(stock.getProductVariantId()) - .facilityId(stock.getFacilityId()) - .facilityName(facility.getName()) + .facilityId(stock.getSenderId()) + .facilityName(facility != null ? facility.getName() : stock.getSenderId()) .physicalCount(stock.getQuantity()) .eventType(stock.getTransactionType()) .reason(stock.getTransactionReason()) diff --git a/health-services/transformer/src/main/resources/application.properties b/health-services/transformer/src/main/resources/application.properties index bfa6972506b..cab2e828256 100644 --- a/health-services/transformer/src/main/resources/application.properties +++ b/health-services/transformer/src/main/resources/application.properties @@ -102,4 +102,10 @@ boundary.label.name.province="Province" boundary.label.name.district="District" boundary.label.name.administrativeProvince="AdministrativeProvince" boundary.label.name.locality="Locality" -boundary.label.name.village="Village" \ No newline at end of file +boundary.label.name.village="Village" + +# BOUNDARY SERVICE +egov.boundary.host=http://localhost:8081 +egov.boundary.search.url=/boundary-service/boundary/_search +egov.boundary.relationship.search.url=/boundary-service/boundary-relationships/_search +egov.boundary.hierarchy.name=HCM-Moz-Hierarchy diff --git a/health-services/transformer/src/test/java/org/egov/transformer/location/TreeGeneratorTest.java b/health-services/transformer/src/test/java/org/egov/transformer/location/TreeGeneratorTest.java deleted file mode 100644 index 438bc1c70d7..00000000000 --- a/health-services/transformer/src/test/java/org/egov/transformer/location/TreeGeneratorTest.java +++ /dev/null @@ -1,169 +0,0 @@ -package org.egov.transformer.location; - -import lombok.extern.slf4j.Slf4j; -import org.egov.common.models.transformer.upstream.Boundary; -import org.egov.transformer.boundary.BoundaryNode; -import org.egov.transformer.boundary.BoundaryTree; -import org.egov.transformer.boundary.TreeGenerator; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - -@Slf4j -class TreeGeneratorTest { - - private TreeGenerator treeGenerator; - - @BeforeEach - void setUp() { - treeGenerator = new TreeGenerator(); - } - - private static List getTestBoundaryList() { - List boundaryList = new ArrayList<>(); - boundaryList.add(Boundary.builder() - .code("LC00001") - .name("Tete") - .label("Province") - .children(Arrays.asList(Boundary.builder() - .code("LC00002") - .name("Angónia") - .label("District") - .children(Arrays.asList(Boundary.builder() - .code("LC00003") - .name("Ulongué") - .label("AdministrativeProvince") - .children(Arrays.asList(Boundary.builder() - .code("LC00004") - .name("TAU L1") - .label("Locality") - .build(), - Boundary.builder() - .code("LC00007") - .name("TAU L2 V1") - .label("Village") - .children(Arrays.asList()) - .build())) - .build(), - Boundary.builder() - .code("LC000010") - .name("Dómuè") - .label("AdministrativeProvince") - .build())) - .build())) - .build()); - return boundaryList; - } - - @Test - void shouldGenerateATreeWithNodeHavingNoChildren() { - List boundaryList = new ArrayList<>(); - boundaryList.add(Boundary.builder() - .code("LC00001") - .name("Tete") - .label("Province") - .build()); - BoundaryTree boundaryTree = treeGenerator.generateTree(boundaryList.get(0)); - assertEquals("LC00001", boundaryTree.getBoundaryNode().getCode()); - assertNull(boundaryTree.getParent()); - assertNull(boundaryTree.getBoundaryTrees()); - } - - @Test - void shouldGenerateATreeWithNodeHavingOneChild() { - List boundaryList = new ArrayList<>(); - boundaryList.add(Boundary.builder() - .code("LC00001") - .name("Tete") - .label("Province") - .children(Arrays.asList(Boundary.builder() - .code("LC00002") - .name("Angónia") - .label("District") - .build())) - .build()); - BoundaryTree boundaryTree = treeGenerator.generateTree(boundaryList.get(0)); - assertTrue(boundaryTree.getBoundaryTrees().stream() - .anyMatch(b -> b.getBoundaryNode().getCode().equals("LC00002"))); - assertEquals("LC00001", boundaryTree.getBoundaryTrees() - .stream().findFirst().get().getParent().getBoundaryNode().getCode()); - } - - @Test - void shouldGenerateATreeWithNodeHavingTwoChildrenOfAChild() { - List boundaryList = new ArrayList<>(); - boundaryList.add(Boundary.builder() - .code("LC00001") - .name("Tete") - .label("Province") - .children(Arrays.asList(Boundary.builder() - .code("LC00002") - .name("Angónia") - .label("District") - .children(Arrays.asList(Boundary.builder() - .code("LC00003") - .name("Ulongué") - .label("AdministrativeProvince") - .build(), - Boundary.builder() - .code("LC000010") - .name("Dómuè") - .label("AdministrativeProvince") - .build())) - .build())) - .build()); - BoundaryTree boundaryTree = treeGenerator.generateTree(boundaryList.get(0)); - assertTrue(boundaryTree.getBoundaryTrees().stream() - .filter(b -> b.getBoundaryNode().getCode().equals("LC00002")).findFirst() - .filter(b -> b.getBoundaryTrees().stream().findAny().isPresent()).isPresent()); - assertEquals("LC00002", boundaryTree.getBoundaryTrees().stream() - .filter(b -> b.getBoundaryNode().getCode().equals("LC00002")) - .flatMap(b -> b.getBoundaryTrees().stream() - .filter(b2 -> b2.getBoundaryNode().getCode().equals("LC000010"))) - .findFirst() - .get().getParent().getBoundaryNode().getCode()); - } - - @Test - void shouldGenerateATreeWithNodeHavingTwoChildrenOfAChildAndTwoChildrenOfOneChildrenOfAChild() { - List boundaryList = getTestBoundaryList(); - BoundaryTree boundaryTree = treeGenerator.generateTree(boundaryList.get(0)); - assertTrue(boundaryTree.getBoundaryTrees().stream() - .filter(b -> b.getBoundaryNode().getCode().equals("LC00002")) - .map(b -> b.getBoundaryTrees().stream() - .filter(b2 -> b2.getBoundaryNode().getCode().equals("LC00003")) - .map(b3 -> b3.getBoundaryTrees().size() == 2)).findAny().isPresent()); - } - - @Test - void shouldReturnTrueIfAGivenBoundaryNodeExistsInTheTree() { - List boundaryList = getTestBoundaryList(); - BoundaryTree boundaryTree = treeGenerator.generateTree(boundaryList.get(0)); - assertNotNull(treeGenerator.search(boundaryTree, "LC00004")); - } - - @Test - void shouldReturnFalseIfAGivenBoundaryNodeDoesNotExistInTheTree() { - List boundaryList = getTestBoundaryList(); - BoundaryTree boundaryTree = treeGenerator.generateTree(boundaryList.get(0)); - assertNull(treeGenerator.search(boundaryTree, "LC00005")); - } - - @Test - void shouldReturnAFlattenedListOfAllTheParentNodesOfABoundaryNode() { - List boundaryList = getTestBoundaryList(); - BoundaryTree root = treeGenerator.generateTree(boundaryList.get(0)); - BoundaryTree found = treeGenerator.search(root, "LC00004"); - List parentNodes = found.getParentNodes(); - assertEquals(3, parentNodes.size()); - log.info(parentNodes.toString()); - } -} \ No newline at end of file