diff --git a/search-service/config/detekt/baseline.xml b/search-service/config/detekt/baseline.xml
index 0ee11ab05..06b12920f 100644
--- a/search-service/config/detekt/baseline.xml
+++ b/search-service/config/detekt/baseline.xml
@@ -12,21 +12,25 @@
LongMethod:EntityAccessControlHandler.kt$EntityAccessControlHandler$@PostMapping("/{subjectId}/attrs", consumes = [MediaType.APPLICATION_JSON_VALUE, JSON_LD_CONTENT_TYPE]) suspend fun addRightsOnEntities( @RequestHeader httpHeaders: HttpHeaders, @PathVariable subjectId: String, @RequestBody requestBody: Mono<String> ): ResponseEntity<*>
LongMethod:PatchAttributeTests.kt$PatchAttributeTests.Companion$@JvmStatic fun mergePatchProvider(): Stream<Arguments>
LongMethod:PatchAttributeTests.kt$PatchAttributeTests.Companion$@JvmStatic fun partialUpdatePatchProvider(): Stream<Arguments>
- LongMethod:QueryServiceTests.kt$QueryServiceTests$@Test fun `it should query temporal entities as requested by query params`()
- LongMethod:QueryServiceTests.kt$QueryServiceTests$@Test fun `it should return an empty list for an attribute if it has no temporal values`()
+ LongMethod:TemporalQueryServiceTests.kt$TemporalQueryServiceTests$@Test fun `it should query temporal entities as requested by query params`()
+ LongMethod:TemporalQueryServiceTests.kt$TemporalQueryServiceTests$@Test fun `it should return an empty list for an attribute if it has no temporal values`()
LongMethod:TemporalScopeBuilderTests.kt$TemporalScopeBuilderTests$@Test fun `it should build an aggregated temporal representation of scopes`()
LongMethod:V0_29__JsonLd_migration.kt$V0_29__JsonLd_migration$override fun migrate(context: Context)
LongParameterList:AttributeInstance.kt$AttributeInstance.Companion$( temporalEntityAttribute: UUID, instanceId: URI = generateRandomInstanceId(), timeAndProperty: Pair<ZonedDateTime, TemporalProperty>, value: Triple<String?, Double?, WKTCoordinates?>, payload: ExpandedAttributeInstance, sub: String? )
LongParameterList:AttributeInstance.kt$AttributeInstance.Companion$( temporalEntityAttribute: UUID, instanceId: URI = generateRandomInstanceId(), timeProperty: TemporalProperty? = TemporalProperty.OBSERVED_AT, modifiedAt: ZonedDateTime? = null, attributeMetadata: AttributeMetadata, payload: ExpandedAttributeInstance, time: ZonedDateTime, sub: String? = null )
+ LongParameterList:EntityAttributeService.kt$EntityAttributeService$( entityId: URI, attributeName: ExpandedTerm, attributeMetadata: AttributeMetadata, createdAt: ZonedDateTime, attributePayload: ExpandedAttributeInstance, sub: Sub? )
+ LongParameterList:EntityAttributeService.kt$EntityAttributeService$( entityUri: URI, ngsiLdAttributes: List<NgsiLdAttribute>, expandedAttributes: ExpandedAttributes, createdAt: ZonedDateTime, observedAt: ZonedDateTime?, sub: Sub? )
+ LongParameterList:EntityAttributeService.kt$EntityAttributeService$( entityUri: URI, ngsiLdAttributes: List<NgsiLdAttribute>, expandedAttributes: ExpandedAttributes, disallowOverwrite: Boolean, createdAt: ZonedDateTime, sub: Sub? )
+ LongParameterList:EntityAttributeService.kt$EntityAttributeService$( tea: TemporalEntityAttribute, attributeName: ExpandedTerm, attributeMetadata: AttributeMetadata, mergedAt: ZonedDateTime, observedAt: ZonedDateTime?, attributePayload: ExpandedAttributeInstance, sub: Sub? )
+ LongParameterList:EntityAttributeService.kt$EntityAttributeService$( temporalEntityAttribute: TemporalEntityAttribute, ngsiLdAttribute: NgsiLdAttribute, attributeMetadata: AttributeMetadata, createdAt: ZonedDateTime, attributePayload: ExpandedAttributeInstance, sub: Sub? )
LongParameterList:EntityEventService.kt$EntityEventService$( updatedDetails: UpdatedDetails, sub: String?, tenantName: String, entityId: URI, entityTypesAndPayload: Pair<List<ExpandedTerm>, String>, serializedAttribute: Pair<ExpandedTerm, String>, overwrite: Boolean )
- LongParameterList:TemporalEntityAttributeService.kt$TemporalEntityAttributeService$( entityId: URI, attributeName: ExpandedTerm, attributeMetadata: AttributeMetadata, createdAt: ZonedDateTime, attributePayload: ExpandedAttributeInstance, sub: Sub? )
- LongParameterList:TemporalEntityAttributeService.kt$TemporalEntityAttributeService$( entityUri: URI, ngsiLdAttributes: List<NgsiLdAttribute>, expandedAttributes: ExpandedAttributes, createdAt: ZonedDateTime, observedAt: ZonedDateTime?, sub: Sub? )
- LongParameterList:TemporalEntityAttributeService.kt$TemporalEntityAttributeService$( entityUri: URI, ngsiLdAttributes: List<NgsiLdAttribute>, expandedAttributes: ExpandedAttributes, disallowOverwrite: Boolean, createdAt: ZonedDateTime, sub: Sub? )
- LongParameterList:TemporalEntityAttributeService.kt$TemporalEntityAttributeService$( tea: TemporalEntityAttribute, attributeName: ExpandedTerm, attributeMetadata: AttributeMetadata, mergedAt: ZonedDateTime, observedAt: ZonedDateTime?, attributePayload: ExpandedAttributeInstance, sub: Sub? )
- LongParameterList:TemporalEntityAttributeService.kt$TemporalEntityAttributeService$( temporalEntityAttribute: TemporalEntityAttribute, ngsiLdAttribute: NgsiLdAttribute, attributeMetadata: AttributeMetadata, createdAt: ZonedDateTime, attributePayload: ExpandedAttributeInstance, sub: Sub? )
LongParameterList:V0_29__JsonLd_migration.kt$V0_29__JsonLd_migration$( entityId: URI, attributeName: ExpandedTerm, datasetId: URI?, attributePayload: ExpandedAttributeInstance, ngsiLdAttributeInstance: NgsiLdAttributeInstance, defaultCreatedAt: ZonedDateTime )
+ MaxLineLength:TemporalEntityHandlerTests.kt$TemporalEntityHandlerTests$coEvery { temporalQueryService.queryTemporalEntities(any(), any()) } returns Either.Right(Triple(emptyList(), 2, null))
+ MaxLineLength:TemporalEntityOperationsHandlerTests.kt$TemporalEntityOperationsHandlerTests$coEvery { temporalQueryService.queryTemporalEntities(any(), any()) } returns Either.Right(Triple(emptyList(), 2, null))
+ MaximumLineLength:TemporalEntityHandlerTests.kt$TemporalEntityHandlerTests$
+ MaximumLineLength:TemporalEntityOperationsHandlerTests.kt$TemporalEntityOperationsHandlerTests$
NestedBlockDepth:V0_29__JsonLd_migration.kt$V0_29__JsonLd_migration$override fun migrate(context: Context)
- SwallowedException:EntitiesQueryUtils.kt$e: IllegalArgumentException
+ SwallowedException:TemporalQueryUtils.kt$e: IllegalArgumentException
TooManyFunctions:EntityPayloadService.kt$EntityPayloadService
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/SearchServiceApplication.kt b/search-service/src/main/kotlin/com/egm/stellio/search/SearchServiceApplication.kt
index 3067df6df..f0b10e6a5 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/SearchServiceApplication.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/SearchServiceApplication.kt
@@ -5,7 +5,7 @@ import org.springframework.boot.context.properties.ConfigurationPropertiesScan
import org.springframework.boot.runApplication
@SpringBootApplication(scanBasePackages = ["com.egm.stellio.search", "com.egm.stellio.shared"])
-@ConfigurationPropertiesScan("com.egm.stellio.search.config", "com.egm.stellio.shared.config")
+@ConfigurationPropertiesScan("com.egm.stellio.search.common.config", "com.egm.stellio.shared.config")
class SearchServiceApplication
@Suppress("SpreadOperator")
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/listener/IAMListener.kt b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/listener/IAMListener.kt
similarity index 94%
rename from search-service/src/main/kotlin/com/egm/stellio/search/listener/IAMListener.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/authorization/listener/IAMListener.kt
index ad68c4960..ef21964f6 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/listener/IAMListener.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/listener/IAMListener.kt
@@ -1,17 +1,17 @@
-package com.egm.stellio.search.listener
+package com.egm.stellio.search.authorization.listener
import arrow.core.Either
import arrow.core.flattenOption
import arrow.core.left
import arrow.core.raise.either
import arrow.core.right
-import com.egm.stellio.search.authorization.EntityAccessRightsService
-import com.egm.stellio.search.authorization.SubjectReferential
-import com.egm.stellio.search.authorization.SubjectReferentialService
-import com.egm.stellio.search.authorization.toSubjectInfo
-import com.egm.stellio.search.config.SearchProperties
-import com.egm.stellio.search.service.EntityEventService
-import com.egm.stellio.search.service.EntityPayloadService
+import com.egm.stellio.search.authorization.model.SubjectReferential
+import com.egm.stellio.search.authorization.model.toSubjectInfo
+import com.egm.stellio.search.authorization.service.EntityAccessRightsService
+import com.egm.stellio.search.authorization.service.SubjectReferentialService
+import com.egm.stellio.search.common.config.SearchProperties
+import com.egm.stellio.search.entity.service.EntityEventService
+import com.egm.stellio.search.entity.service.EntityPayloadService
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.AuthContextModel.AUTH_TERM_IS_MEMBER_OF
import com.egm.stellio.shared.util.AuthContextModel.AUTH_TERM_ROLES
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/EntityAccessRights.kt b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/EntityAccessRights.kt
similarity index 98%
rename from search-service/src/main/kotlin/com/egm/stellio/search/authorization/EntityAccessRights.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/EntityAccessRights.kt
index f222d051c..022110962 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/EntityAccessRights.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/EntityAccessRights.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.model
import com.egm.stellio.shared.model.ExpandedAttributeInstances
import com.egm.stellio.shared.model.ExpandedTerm
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/Group.kt b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/Group.kt
similarity index 95%
rename from search-service/src/main/kotlin/com/egm/stellio/search/authorization/Group.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/Group.kt
index a664c6bf1..c9599753c 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/Group.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/Group.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.model
import com.egm.stellio.shared.util.AuthContextModel.AUTH_PROP_NAME
import com.egm.stellio.shared.util.AuthContextModel.AUTH_REL_IS_MEMBER_OF
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/SubjectAccessRight.kt b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/SubjectAccessRight.kt
similarity index 80%
rename from search-service/src/main/kotlin/com/egm/stellio/search/authorization/SubjectAccessRight.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/SubjectAccessRight.kt
index c9e163335..363e757a8 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/SubjectAccessRight.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/SubjectAccessRight.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.model
import com.egm.stellio.shared.util.AccessRight
import java.net.URI
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/SubjectReferential.kt b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/SubjectReferential.kt
similarity index 92%
rename from search-service/src/main/kotlin/com/egm/stellio/search/authorization/SubjectReferential.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/SubjectReferential.kt
index 98b15672f..e781e628c 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/SubjectReferential.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/SubjectReferential.kt
@@ -1,6 +1,6 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.model
-import com.egm.stellio.search.util.deserializeAsMap
+import com.egm.stellio.search.common.util.deserializeAsMap
import com.egm.stellio.shared.util.GlobalRole
import com.egm.stellio.shared.util.JsonLdUtils.JSONLD_VALUE_TERM
import com.egm.stellio.shared.util.JsonUtils
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/User.kt b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/User.kt
similarity index 97%
rename from search-service/src/main/kotlin/com/egm/stellio/search/authorization/User.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/User.kt
index 8999a36fd..46cebf398 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/User.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/model/User.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.model
import com.egm.stellio.shared.util.AuthContextModel.AUTH_PROP_FAMILY_NAME
import com.egm.stellio.shared.util.AuthContextModel.AUTH_PROP_GIVEN_NAME
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/AuthorizationService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/AuthorizationService.kt
similarity index 93%
rename from search-service/src/main/kotlin/com/egm/stellio/search/authorization/AuthorizationService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/AuthorizationService.kt
index ec2bc3c5c..1aead2e42 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/AuthorizationService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/AuthorizationService.kt
@@ -1,8 +1,8 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.service
import arrow.core.Either
import arrow.core.Option
-import com.egm.stellio.search.model.EntitiesQuery
+import com.egm.stellio.search.entity.model.EntitiesQuery
import com.egm.stellio.shared.model.APIException
import com.egm.stellio.shared.model.ExpandedEntity
import com.egm.stellio.shared.util.Sub
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/DisabledAuthorizationService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/DisabledAuthorizationService.kt
similarity index 95%
rename from search-service/src/main/kotlin/com/egm/stellio/search/authorization/DisabledAuthorizationService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/DisabledAuthorizationService.kt
index dff262042..21da63b1e 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/DisabledAuthorizationService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/DisabledAuthorizationService.kt
@@ -1,9 +1,9 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.service
import arrow.core.Either
import arrow.core.Option
import arrow.core.right
-import com.egm.stellio.search.model.EntitiesQuery
+import com.egm.stellio.search.entity.model.EntitiesQuery
import com.egm.stellio.shared.model.APIException
import com.egm.stellio.shared.model.ExpandedEntity
import com.egm.stellio.shared.util.Sub
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/EnabledAuthorizationService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/EnabledAuthorizationService.kt
similarity index 98%
rename from search-service/src/main/kotlin/com/egm/stellio/search/authorization/EnabledAuthorizationService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/EnabledAuthorizationService.kt
index dc21a84eb..4c927d91a 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/EnabledAuthorizationService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/EnabledAuthorizationService.kt
@@ -1,9 +1,9 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.service
import arrow.core.*
import arrow.core.raise.either
import arrow.fx.coroutines.parMap
-import com.egm.stellio.search.model.EntitiesQuery
+import com.egm.stellio.search.entity.model.EntitiesQuery
import com.egm.stellio.shared.model.APIException
import com.egm.stellio.shared.model.AccessDeniedException
import com.egm.stellio.shared.model.ExpandedEntity
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/EntityAccessRightsService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/EntityAccessRightsService.kt
similarity index 97%
rename from search-service/src/main/kotlin/com/egm/stellio/search/authorization/EntityAccessRightsService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/EntityAccessRightsService.kt
index f7921a402..3bb1d5838 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/EntityAccessRightsService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/EntityAccessRightsService.kt
@@ -1,10 +1,11 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.service
import arrow.core.*
import arrow.core.raise.either
-import com.egm.stellio.search.authorization.EntityAccessRights.SubjectRightInfo
-import com.egm.stellio.search.service.EntityPayloadService
-import com.egm.stellio.search.util.*
+import com.egm.stellio.search.authorization.model.EntityAccessRights
+import com.egm.stellio.search.authorization.model.EntityAccessRights.SubjectRightInfo
+import com.egm.stellio.search.common.util.*
+import com.egm.stellio.search.entity.service.EntityPayloadService
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.*
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/SubjectReferentialService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/SubjectReferentialService.kt
similarity index 97%
rename from search-service/src/main/kotlin/com/egm/stellio/search/authorization/SubjectReferentialService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/SubjectReferentialService.kt
index ba9bbc8dc..5cd0c844f 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/authorization/SubjectReferentialService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/service/SubjectReferentialService.kt
@@ -1,10 +1,13 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.service
import arrow.core.Either
import arrow.core.Option
import arrow.core.Some
import arrow.core.getOrElse
-import com.egm.stellio.search.util.*
+import com.egm.stellio.search.authorization.model.Group
+import com.egm.stellio.search.authorization.model.SubjectReferential
+import com.egm.stellio.search.authorization.model.User
+import com.egm.stellio.search.common.util.*
import com.egm.stellio.shared.model.APIException
import com.egm.stellio.shared.model.AccessDeniedException
import com.egm.stellio.shared.util.*
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/web/EntityAccessControlHandler.kt b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/web/EntityAccessControlHandler.kt
similarity index 95%
rename from search-service/src/main/kotlin/com/egm/stellio/search/web/EntityAccessControlHandler.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/authorization/web/EntityAccessControlHandler.kt
index 1e4532ebf..a3bacc360 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/web/EntityAccessControlHandler.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/authorization/web/EntityAccessControlHandler.kt
@@ -1,11 +1,15 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.authorization.web
import arrow.core.*
import arrow.core.raise.either
-import com.egm.stellio.search.authorization.*
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.service.EntityPayloadService
-import com.egm.stellio.search.util.composeEntitiesQuery
+import com.egm.stellio.search.authorization.service.AuthorizationService
+import com.egm.stellio.search.authorization.service.EntityAccessRightsService
+import com.egm.stellio.search.entity.model.NotUpdatedDetails
+import com.egm.stellio.search.entity.model.UpdateAttributeResult
+import com.egm.stellio.search.entity.model.UpdateOperationResult
+import com.egm.stellio.search.entity.model.updateResultFromDetailedResult
+import com.egm.stellio.search.entity.service.EntityPayloadService
+import com.egm.stellio.search.entity.util.composeEntitiesQuery
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.*
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/config/KafkaConfig.kt b/search-service/src/main/kotlin/com/egm/stellio/search/common/config/KafkaConfig.kt
similarity index 95%
rename from search-service/src/main/kotlin/com/egm/stellio/search/config/KafkaConfig.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/common/config/KafkaConfig.kt
index dc315993f..1f82df6b5 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/config/KafkaConfig.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/common/config/KafkaConfig.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.config
+package com.egm.stellio.search.common.config
import org.springframework.boot.autoconfigure.kafka.ConcurrentKafkaListenerContainerFactoryConfigurer
import org.springframework.context.annotation.Bean
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/config/SearchProperties.kt b/search-service/src/main/kotlin/com/egm/stellio/search/common/config/SearchProperties.kt
similarity index 83%
rename from search-service/src/main/kotlin/com/egm/stellio/search/config/SearchProperties.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/common/config/SearchProperties.kt
index 8de9ac5f1..9c7528233 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/config/SearchProperties.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/common/config/SearchProperties.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.config
+package com.egm.stellio.search.common.config
import org.springframework.boot.context.properties.ConfigurationProperties
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/config/WebConfig.kt b/search-service/src/main/kotlin/com/egm/stellio/search/common/config/WebConfig.kt
similarity index 93%
rename from search-service/src/main/kotlin/com/egm/stellio/search/config/WebConfig.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/common/config/WebConfig.kt
index b55387b80..8e98dbc65 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/config/WebConfig.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/common/config/WebConfig.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.config
+package com.egm.stellio.search.common.config
import org.springframework.context.annotation.Configuration
import org.springframework.http.codec.ServerCodecConfigurer
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/Query.kt b/search-service/src/main/kotlin/com/egm/stellio/search/common/model/Query.kt
similarity index 97%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/Query.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/common/model/Query.kt
index 4c7167977..32ab3d5e5 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/Query.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/common/model/Query.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.common.model
import arrow.core.Either
import arrow.core.left
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/support/ApiTestsBootstrapper.kt b/search-service/src/main/kotlin/com/egm/stellio/search/common/support/ApiTestsBootstrapper.kt
similarity index 95%
rename from search-service/src/main/kotlin/com/egm/stellio/search/support/ApiTestsBootstrapper.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/common/support/ApiTestsBootstrapper.kt
index 9ef861aa3..cfd605c61 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/support/ApiTestsBootstrapper.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/common/support/ApiTestsBootstrapper.kt
@@ -1,7 +1,7 @@
-package com.egm.stellio.search.support
+package com.egm.stellio.search.common.support
-import com.egm.stellio.search.authorization.SubjectReferential
-import com.egm.stellio.search.authorization.SubjectReferentialService
+import com.egm.stellio.search.authorization.model.SubjectReferential
+import com.egm.stellio.search.authorization.service.SubjectReferentialService
import com.egm.stellio.shared.util.GlobalRole
import com.egm.stellio.shared.util.SubjectType
import io.r2dbc.postgresql.codec.Json
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/tenant/DatabaseMigration.kt b/search-service/src/main/kotlin/com/egm/stellio/search/common/tenant/DatabaseMigration.kt
similarity index 97%
rename from search-service/src/main/kotlin/com/egm/stellio/search/tenant/DatabaseMigration.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/common/tenant/DatabaseMigration.kt
index 355724f2c..1d9647a4b 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/tenant/DatabaseMigration.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/common/tenant/DatabaseMigration.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.tenant
+package com.egm.stellio.search.common.tenant
import com.egm.stellio.shared.config.ApplicationProperties
import jakarta.annotation.PostConstruct
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/tenant/DatabaseTenantConfig.kt b/search-service/src/main/kotlin/com/egm/stellio/search/common/tenant/DatabaseTenantConfig.kt
similarity index 98%
rename from search-service/src/main/kotlin/com/egm/stellio/search/tenant/DatabaseTenantConfig.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/common/tenant/DatabaseTenantConfig.kt
index e4186f54f..755e56a03 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/tenant/DatabaseTenantConfig.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/common/tenant/DatabaseTenantConfig.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.tenant
+package com.egm.stellio.search.common.tenant
import com.egm.stellio.shared.config.ApplicationProperties
import io.r2dbc.spi.ConnectionFactories
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/tenant/DatabaseTenantConnectionFactory.kt b/search-service/src/main/kotlin/com/egm/stellio/search/common/tenant/DatabaseTenantConnectionFactory.kt
similarity index 96%
rename from search-service/src/main/kotlin/com/egm/stellio/search/tenant/DatabaseTenantConnectionFactory.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/common/tenant/DatabaseTenantConnectionFactory.kt
index 2f2198326..c90cf5865 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/tenant/DatabaseTenantConnectionFactory.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/common/tenant/DatabaseTenantConnectionFactory.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.tenant
+package com.egm.stellio.search.common.tenant
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.NonexistentTenantException
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/util/DBConversionUtils.kt b/search-service/src/main/kotlin/com/egm/stellio/search/common/util/DBConversionUtils.kt
similarity index 82%
rename from search-service/src/main/kotlin/com/egm/stellio/search/util/DBConversionUtils.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/common/util/DBConversionUtils.kt
index d81b48770..b90fa6abc 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/util/DBConversionUtils.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/common/util/DBConversionUtils.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.util
+package com.egm.stellio.search.common.util
import com.egm.stellio.shared.model.ExpandedAttributeInstance
import com.egm.stellio.shared.util.JsonUtils.deserializeAsMap
@@ -33,3 +33,17 @@ fun Json.deserializeExpandedPayload(): Map> = this.asString().
fun Json.deserializeAsMap(): Map = this.asString().deserializeAsMap()
fun ExpandedAttributeInstance.toJson(): Json = Json.of(serializeObject(this))
+
+fun valueToDoubleOrNull(value: Any): Double? =
+ when (value) {
+ is Double -> value
+ is Int -> value.toDouble()
+ else -> null
+ }
+
+fun valueToStringOrNull(value: Any): String? =
+ when (value) {
+ is String -> value
+ is Boolean -> value.toString()
+ else -> null
+ }
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/util/DBQueryUtils.kt b/search-service/src/main/kotlin/com/egm/stellio/search/common/util/DBQueryUtils.kt
similarity index 98%
rename from search-service/src/main/kotlin/com/egm/stellio/search/util/DBQueryUtils.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/common/util/DBQueryUtils.kt
index 2114dab2b..cab99490c 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/util/DBQueryUtils.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/common/util/DBQueryUtils.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.util
+package com.egm.stellio.search.common.util
import arrow.core.Either
import arrow.core.left
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeDetails.kt b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/AttributeDetails.kt
similarity index 78%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeDetails.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/AttributeDetails.kt
index ac7f6f5ee..c7705ac82 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeDetails.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/AttributeDetails.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.discovery.model
import java.net.URI
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeList.kt b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/AttributeList.kt
similarity index 84%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeList.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/AttributeList.kt
index 42814cbd9..7cd511b88 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeList.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/AttributeList.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.discovery.model
import com.egm.stellio.shared.util.toUri
import java.net.URI
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeTypeInfo.kt b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/AttributeTypeInfo.kt
similarity index 83%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeTypeInfo.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/AttributeTypeInfo.kt
index 24048d0ce..388387bda 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeTypeInfo.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/AttributeTypeInfo.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.discovery.model
import java.net.URI
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/EntityType.kt b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/EntityType.kt
similarity index 77%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/EntityType.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/EntityType.kt
index cade8ab18..14f4cf3b5 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/EntityType.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/EntityType.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.discovery.model
import java.net.URI
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/EntityTypeInfo.kt b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/EntityTypeInfo.kt
similarity index 94%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/EntityTypeInfo.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/EntityTypeInfo.kt
index 0f940695c..9b5c3eb1f 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/EntityTypeInfo.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/EntityTypeInfo.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.discovery.model
import java.net.URI
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/EntityTypeList.kt b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/EntityTypeList.kt
similarity index 84%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/EntityTypeList.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/EntityTypeList.kt
index 8a6f092a3..c6c2041e5 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/EntityTypeList.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/model/EntityTypeList.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.discovery.model
import com.egm.stellio.shared.util.toUri
import java.net.URI
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/service/AttributeService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/service/AttributeService.kt
similarity index 88%
rename from search-service/src/main/kotlin/com/egm/stellio/search/service/AttributeService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/discovery/service/AttributeService.kt
index 363cdf661..eb9aecf56 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/service/AttributeService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/service/AttributeService.kt
@@ -1,17 +1,17 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.discovery.service
import arrow.core.Either
import arrow.core.flatten
import arrow.core.left
import arrow.core.right
-import com.egm.stellio.search.model.AttributeDetails
-import com.egm.stellio.search.model.AttributeList
-import com.egm.stellio.search.model.AttributeType
-import com.egm.stellio.search.model.AttributeTypeInfo
-import com.egm.stellio.search.util.allToMappedList
-import com.egm.stellio.search.util.toInt
-import com.egm.stellio.search.util.toList
-import com.egm.stellio.search.util.toUri
+import com.egm.stellio.search.common.util.allToMappedList
+import com.egm.stellio.search.common.util.toInt
+import com.egm.stellio.search.common.util.toList
+import com.egm.stellio.search.common.util.toUri
+import com.egm.stellio.search.discovery.model.AttributeDetails
+import com.egm.stellio.search.discovery.model.AttributeList
+import com.egm.stellio.search.discovery.model.AttributeType
+import com.egm.stellio.search.discovery.model.AttributeTypeInfo
import com.egm.stellio.shared.model.APIException
import com.egm.stellio.shared.model.ExpandedTerm
import com.egm.stellio.shared.model.ResourceNotFoundException
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/service/EntityTypeService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/service/EntityTypeService.kt
similarity index 93%
rename from search-service/src/main/kotlin/com/egm/stellio/search/service/EntityTypeService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/discovery/service/EntityTypeService.kt
index 40b6c1092..b1a515eac 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/service/EntityTypeService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/service/EntityTypeService.kt
@@ -1,12 +1,12 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.discovery.service
import arrow.core.Either
import arrow.core.left
import arrow.core.right
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.util.allToMappedList
-import com.egm.stellio.search.util.toInt
-import com.egm.stellio.search.util.toUri
+import com.egm.stellio.search.common.util.allToMappedList
+import com.egm.stellio.search.common.util.toInt
+import com.egm.stellio.search.common.util.toUri
+import com.egm.stellio.search.discovery.model.*
import com.egm.stellio.shared.model.APIException
import com.egm.stellio.shared.model.ExpandedTerm
import com.egm.stellio.shared.model.ResourceNotFoundException
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/web/AttributeHandler.kt b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/web/AttributeHandler.kt
similarity index 95%
rename from search-service/src/main/kotlin/com/egm/stellio/search/web/AttributeHandler.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/discovery/web/AttributeHandler.kt
index 29a05e0b1..06783a2b2 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/web/AttributeHandler.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/web/AttributeHandler.kt
@@ -1,7 +1,7 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.discovery.web
import arrow.core.raise.either
-import com.egm.stellio.search.service.AttributeService
+import com.egm.stellio.search.discovery.service.AttributeService
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.util.*
import com.egm.stellio.shared.util.JsonLdUtils.expandJsonLdTerm
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/web/EntityTypeHandler.kt b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/web/EntityTypeHandler.kt
similarity index 95%
rename from search-service/src/main/kotlin/com/egm/stellio/search/web/EntityTypeHandler.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/discovery/web/EntityTypeHandler.kt
index 01a15cc0f..7b079329d 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/web/EntityTypeHandler.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/discovery/web/EntityTypeHandler.kt
@@ -1,7 +1,7 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.discovery.web
import arrow.core.raise.either
-import com.egm.stellio.search.service.EntityTypeService
+import com.egm.stellio.search.discovery.service.EntityTypeService
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.util.*
import com.egm.stellio.shared.util.JsonLdUtils.expandJsonLdTerm
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/listener/ObservationEventListener.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/listener/ObservationEventListener.kt
similarity index 97%
rename from search-service/src/main/kotlin/com/egm/stellio/search/listener/ObservationEventListener.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/listener/ObservationEventListener.kt
index f04afeeaa..b99220462 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/listener/ObservationEventListener.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/listener/ObservationEventListener.kt
@@ -1,10 +1,10 @@
-package com.egm.stellio.search.listener
+package com.egm.stellio.search.entity.listener
import arrow.core.Either
import arrow.core.left
import arrow.core.raise.either
-import com.egm.stellio.search.service.EntityEventService
-import com.egm.stellio.search.service.EntityPayloadService
+import com.egm.stellio.search.entity.service.EntityEventService
+import com.egm.stellio.search.entity.service.EntityPayloadService
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.JsonLdUtils.expandAttribute
import com.egm.stellio.shared.util.JsonLdUtils.expandJsonLdEntity
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeMetadata.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/model/AttributeMetadata.kt
similarity index 90%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeMetadata.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/model/AttributeMetadata.kt
index e7c60d060..a697217b6 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeMetadata.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/model/AttributeMetadata.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.entity.model
import com.egm.stellio.shared.model.WKTCoordinates
import java.net.URI
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/EntitiesQuery.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/model/EntitiesQuery.kt
similarity index 93%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/EntitiesQuery.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/model/EntitiesQuery.kt
index d7d3706a5..9a1e80113 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/EntitiesQuery.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/model/EntitiesQuery.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.entity.model
import com.egm.stellio.shared.model.EntityTypeSelection
import com.egm.stellio.shared.model.ExpandedTerm
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/EntityPayload.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/model/EntityPayload.kt
similarity index 97%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/EntityPayload.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/model/EntityPayload.kt
index 5f8d986d7..1a5d29de3 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/EntityPayload.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/model/EntityPayload.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.entity.model
import com.egm.stellio.shared.model.ExpandedTerm
import com.egm.stellio.shared.util.AuthContextModel
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/OperationType.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/model/OperationType.kt
similarity index 89%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/OperationType.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/model/OperationType.kt
index b1a0045c0..f7c824f11 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/OperationType.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/model/OperationType.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.entity.model
/**
* Used to manage the different types of updates on existing attributes depending on the current operation.
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/TemporalEntityAttribute.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/model/TemporalEntityAttribute.kt
similarity index 96%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/TemporalEntityAttribute.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/model/TemporalEntityAttribute.kt
index a04f1da97..e2d4d6b2e 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/TemporalEntityAttribute.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/model/TemporalEntityAttribute.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.entity.model
import com.egm.stellio.shared.model.ExpandedTerm
import com.egm.stellio.shared.util.JsonLdUtils.NGSILD_GEOPROPERTY_TYPE
@@ -66,7 +66,7 @@ data class TemporalEntityAttribute(
/**
* Returns the key of the member for the simplified representation of the attribute, as defined in 4.5.9
*/
- fun toSimpliedRepresentationKey(): String =
+ fun toSimplifiedRepresentationKey(): String =
when (this) {
Property -> NGSILD_PROPERTY_VALUES
Relationship -> NGSILD_RELATIONSHIP_OBJECTS
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/UpdateResult.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/model/UpdateResult.kt
similarity index 98%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/UpdateResult.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/model/UpdateResult.kt
index ddb61f626..9ccf6a575 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/UpdateResult.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/model/UpdateResult.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.entity.model
import com.fasterxml.jackson.annotation.JsonIgnore
import com.fasterxml.jackson.annotation.JsonValue
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/service/TemporalEntityAttributeService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityAttributeService.kt
similarity index 98%
rename from search-service/src/main/kotlin/com/egm/stellio/search/service/TemporalEntityAttributeService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityAttributeService.kt
index bbcc52997..815ef8d9f 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/service/TemporalEntityAttributeService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityAttributeService.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.entity.service
import arrow.core.Either
import arrow.core.flatMap
@@ -7,8 +7,12 @@ import arrow.core.raise.either
import arrow.core.raise.ensure
import arrow.core.right
import arrow.fx.coroutines.parMap
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.util.*
+import com.egm.stellio.search.common.util.*
+import com.egm.stellio.search.entity.model.*
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
+import com.egm.stellio.search.temporal.model.AttributeInstance
+import com.egm.stellio.search.temporal.service.AttributeInstanceService
+import com.egm.stellio.search.temporal.util.*
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.*
import com.egm.stellio.shared.util.AttributeType
@@ -35,7 +39,7 @@ import java.time.ZonedDateTime
import java.util.UUID
@Service
-class TemporalEntityAttributeService(
+class EntityAttributeService(
private val databaseClient: DatabaseClient,
private val attributeInstanceService: AttributeInstanceService
) {
@@ -117,7 +121,7 @@ class TemporalEntityAttributeService(
* To be removed at some point later.
*/
@Transactional
- suspend fun createEntityTemporalReferences(
+ suspend fun createEntityAttributes(
payload: String,
contexts: List,
sub: String? = null
@@ -127,12 +131,12 @@ class TemporalEntityAttributeService(
val ngsiLdEntity = expandedEntity.toNgsiLdEntity().bind()
ngsiLdEntity.prepareTemporalAttributes()
.map {
- createEntityTemporalReferences(ngsiLdEntity, expandedEntity, it, createdAt, sub).bind()
+ createEntityAttributes(ngsiLdEntity, expandedEntity, it, createdAt, sub).bind()
}.bind()
}
@Transactional
- suspend fun createEntityTemporalReferences(
+ suspend fun createEntityAttributes(
ngsiLdEntity: NgsiLdEntity,
expandedEntity: ExpandedEntity,
attributesMetadata: List>,
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/service/EntityEventService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityEventService.kt
similarity index 97%
rename from search-service/src/main/kotlin/com/egm/stellio/search/service/EntityEventService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityEventService.kt
index e84f688a5..8dc9124fc 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/service/EntityEventService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityEventService.kt
@@ -1,10 +1,10 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.entity.service
import arrow.core.Either
-import com.egm.stellio.search.model.EntityPayload
-import com.egm.stellio.search.model.UpdateOperationResult
-import com.egm.stellio.search.model.UpdateResult
-import com.egm.stellio.search.model.UpdatedDetails
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.model.UpdateOperationResult
+import com.egm.stellio.search.entity.model.UpdateResult
+import com.egm.stellio.search.entity.model.UpdatedDetails
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.JsonLdUtils.JSONLD_TYPE
import com.egm.stellio.shared.util.JsonUtils.serializeObject
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/service/EntityOperationService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityOperationService.kt
similarity index 96%
rename from search-service/src/main/kotlin/com/egm/stellio/search/service/EntityOperationService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityOperationService.kt
index 809a2c7f1..7b35a8e65 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/service/EntityOperationService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityOperationService.kt
@@ -1,13 +1,13 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.entity.service
import arrow.core.Either
import arrow.core.left
import arrow.core.raise.either
import arrow.core.right
-import com.egm.stellio.search.authorization.AuthorizationService
-import com.egm.stellio.search.model.EntityPayload
-import com.egm.stellio.search.model.UpdateResult
-import com.egm.stellio.search.web.*
+import com.egm.stellio.search.authorization.service.AuthorizationService
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.model.UpdateResult
+import com.egm.stellio.search.entity.web.*
import com.egm.stellio.shared.model.APIException
import com.egm.stellio.shared.model.BadRequestDataException
import com.egm.stellio.shared.util.Sub
@@ -21,7 +21,7 @@ import java.net.URI
@Component
class EntityOperationService(
private val entityPayloadService: EntityPayloadService,
- private val temporalEntityAttributeService: TemporalEntityAttributeService,
+ private val entityAttributeService: EntityAttributeService,
private val authorizationService: AuthorizationService,
private val entityEventService: EntityEventService
) {
@@ -234,7 +234,7 @@ class EntityOperationService(
sub: Sub?
): Either = either {
val (jsonLdEntity, ngsiLdEntity) = entity
- temporalEntityAttributeService.deleteTemporalAttributesOfEntity(ngsiLdEntity.id).bind()
+ entityAttributeService.deleteTemporalAttributesOfEntity(ngsiLdEntity.id).bind()
entityPayloadService.appendAttributes(
ngsiLdEntity.id,
jsonLdEntity.getModifiableMembers(),
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/service/EntityPayloadService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityPayloadService.kt
similarity index 93%
rename from search-service/src/main/kotlin/com/egm/stellio/search/service/EntityPayloadService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityPayloadService.kt
index 58c9bc2d5..a0ab386b2 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/service/EntityPayloadService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityPayloadService.kt
@@ -1,14 +1,16 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.entity.service
import arrow.core.Either
import arrow.core.flatMap
import arrow.core.left
import arrow.core.raise.either
import arrow.core.right
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.model.OperationType.*
+import com.egm.stellio.search.common.util.*
+import com.egm.stellio.search.entity.model.*
+import com.egm.stellio.search.entity.model.OperationType.*
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
import com.egm.stellio.search.scope.ScopeService
-import com.egm.stellio.search.util.*
+import com.egm.stellio.search.temporal.util.prepareTemporalAttributes
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.*
import com.egm.stellio.shared.util.AuthContextModel.SpecificAccessPolicy
@@ -29,7 +31,7 @@ import java.time.ZonedDateTime
@Service
class EntityPayloadService(
private val databaseClient: DatabaseClient,
- private val temporalEntityAttributeService: TemporalEntityAttributeService,
+ private val entityAttributeService: EntityAttributeService,
private val scopeService: ScopeService
) {
private val logger = LoggerFactory.getLogger(javaClass)
@@ -45,7 +47,7 @@ class EntityPayloadService(
logger.debug("Creating entity {}", ngsiLdEntity.id)
createEntityPayload(ngsiLdEntity, expandedEntity, createdAt, sub = sub).bind()
- temporalEntityAttributeService.createEntityTemporalReferences(
+ entityAttributeService.createEntityAttributes(
ngsiLdEntity,
expandedEntity,
attributesMetadata,
@@ -94,7 +96,7 @@ class EntityPayloadService(
val mergedAt = ngsiLdDateTime()
val coreUpdateResult = updateCoreAttributes(entityId, coreAttrs, mergedAt, MERGE_ENTITY).bind()
- val attrsUpdateResult = temporalEntityAttributeService.mergeEntityAttributes(
+ val attrsUpdateResult = entityAttributeService.mergeEntityAttributes(
entityId,
otherAttrs.toMap().toNgsiLdAttributes().bind(),
expandedAttributes,
@@ -106,7 +108,7 @@ class EntityPayloadService(
val updateResult = coreUpdateResult.mergeWith(attrsUpdateResult)
// update modifiedAt in entity if at least one attribute has been merged
if (updateResult.hasSuccessfulUpdate()) {
- val teas = temporalEntityAttributeService.getForEntity(entityId, emptySet(), emptySet())
+ val teas = entityAttributeService.getForEntity(entityId, emptySet(), emptySet())
updateState(entityId, mergedAt, teas).bind()
}
updateResult
@@ -123,10 +125,10 @@ class EntityPayloadService(
val attributesMetadata = ngsiLdEntity.prepareTemporalAttributes().bind()
logger.debug("Replacing entity {}", ngsiLdEntity.id)
- temporalEntityAttributeService.deleteTemporalAttributesOfEntity(entityId)
+ entityAttributeService.deleteTemporalAttributesOfEntity(entityId)
replaceEntityPayload(ngsiLdEntity, expandedEntity, replacedAt, sub).bind()
- temporalEntityAttributeService.createEntityTemporalReferences(
+ entityAttributeService.createEntityAttributes(
ngsiLdEntity,
expandedEntity,
attributesMetadata,
@@ -479,7 +481,7 @@ class EntityPayloadService(
if (disallowOverwrite) APPEND_ATTRIBUTES
else APPEND_ATTRIBUTES_OVERWRITE_ALLOWED
val coreUpdateResult = updateCoreAttributes(entityUri, coreAttrs, createdAt, operationType).bind()
- val attrsUpdateResult = temporalEntityAttributeService.appendEntityAttributes(
+ val attrsUpdateResult = entityAttributeService.appendEntityAttributes(
entityUri,
otherAttrs.toMap().toNgsiLdAttributes().bind(),
expandedAttributes,
@@ -491,7 +493,7 @@ class EntityPayloadService(
val updateResult = coreUpdateResult.mergeWith(attrsUpdateResult)
// update modifiedAt in entity if at least one attribute has been added
if (updateResult.hasSuccessfulUpdate()) {
- val teas = temporalEntityAttributeService.getForEntity(entityUri, emptySet(), emptySet())
+ val teas = entityAttributeService.getForEntity(entityUri, emptySet(), emptySet())
updateState(entityUri, createdAt, teas).bind()
}
updateResult
@@ -508,7 +510,7 @@ class EntityPayloadService(
val createdAt = ngsiLdDateTime()
val coreUpdateResult = updateCoreAttributes(entityUri, coreAttrs, createdAt, UPDATE_ATTRIBUTES).bind()
- val attrsUpdateResult = temporalEntityAttributeService.updateEntityAttributes(
+ val attrsUpdateResult = entityAttributeService.updateEntityAttributes(
entityUri,
otherAttrs.toMap().toNgsiLdAttributes().bind(),
expandedAttributes,
@@ -519,7 +521,7 @@ class EntityPayloadService(
val updateResult = coreUpdateResult.mergeWith(attrsUpdateResult)
// update modifiedAt in entity if at least one attribute has been added
if (updateResult.hasSuccessfulUpdate()) {
- val teas = temporalEntityAttributeService.getForEntity(entityUri, emptySet(), emptySet())
+ val teas = entityAttributeService.getForEntity(entityUri, emptySet(), emptySet())
updateState(entityUri, createdAt, teas).bind()
}
updateResult
@@ -532,14 +534,14 @@ class EntityPayloadService(
sub: Sub?
): Either = either {
val modifiedAt = ngsiLdDateTime()
- val updateResult = temporalEntityAttributeService.partialUpdateEntityAttribute(
+ val updateResult = entityAttributeService.partialUpdateEntityAttribute(
entityId,
expandedAttribute,
modifiedAt,
sub
).bind()
if (updateResult.isSuccessful()) {
- val teas = temporalEntityAttributeService.getForEntity(entityId, emptySet(), emptySet())
+ val teas = entityAttributeService.getForEntity(entityId, emptySet(), emptySet())
updateState(entityId, modifiedAt, teas).bind()
}
updateResult
@@ -558,7 +560,7 @@ class EntityPayloadService(
val jsonLdAttribute = mapOf(attributeName to listOf(expandedAttributeInstance))
val ngsiLdAttribute = jsonLdAttribute.toNgsiLdAttributes().bind()[0]
- temporalEntityAttributeService.upsertEntityAttributes(
+ entityAttributeService.upsertEntityAttributes(
entityId,
ngsiLdAttribute,
jsonLdAttribute,
@@ -570,7 +572,7 @@ class EntityPayloadService(
updateState(
entityId,
createdAt,
- temporalEntityAttributeService.getForEntity(entityId, emptySet(), emptySet())
+ entityAttributeService.getForEntity(entityId, emptySet(), emptySet())
).bind()
}
@@ -583,7 +585,7 @@ class EntityPayloadService(
val ngsiLdAttribute = listOf(expandedAttribute).toMap().toNgsiLdAttributes().bind()[0]
val replacedAt = ngsiLdDateTime()
- val updateResult = temporalEntityAttributeService.replaceEntityAttribute(
+ val updateResult = entityAttributeService.replaceEntityAttribute(
entityId,
ngsiLdAttribute,
expandedAttribute,
@@ -593,7 +595,7 @@ class EntityPayloadService(
// update modifiedAt in entity if at least one attribute has been added
if (updateResult.hasSuccessfulUpdate()) {
- val teas = temporalEntityAttributeService.getForEntity(entityId, emptySet(), emptySet())
+ val teas = entityAttributeService.getForEntity(entityId, emptySet(), emptySet())
updateState(entityId, replacedAt, teas).bind()
}
updateResult
@@ -673,7 +675,7 @@ class EntityPayloadService(
}
.bind()
- temporalEntityAttributeService.deleteTemporalAttributesOfEntity(entityId).bind()
+ entityAttributeService.deleteTemporalAttributesOfEntity(entityId).bind()
scopeService.deleteHistory(entityId).bind()
entity
}
@@ -688,12 +690,12 @@ class EntityPayloadService(
when (attributeName) {
NGSILD_SCOPE_PROPERTY -> scopeService.delete(entityId).bind()
else -> {
- temporalEntityAttributeService.checkEntityAndAttributeExistence(
+ entityAttributeService.checkEntityAndAttributeExistence(
entityId,
attributeName,
datasetId
).bind()
- temporalEntityAttributeService.deleteTemporalAttribute(
+ entityAttributeService.deleteTemporalAttribute(
entityId,
attributeName,
datasetId,
@@ -704,7 +706,7 @@ class EntityPayloadService(
updateState(
entityId,
ngsiLdDateTime(),
- temporalEntityAttributeService.getForEntity(entityId, emptySet(), emptySet())
+ entityAttributeService.getForEntity(entityId, emptySet(), emptySet())
).bind()
}
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityQueryService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityQueryService.kt
new file mode 100644
index 000000000..fd8012b99
--- /dev/null
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/service/EntityQueryService.kt
@@ -0,0 +1,44 @@
+package com.egm.stellio.search.entity.service
+
+import arrow.core.Either
+import arrow.core.raise.either
+import arrow.core.right
+import com.egm.stellio.search.common.util.deserializeAsMap
+import com.egm.stellio.search.entity.model.EntitiesQuery
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.shared.model.APIException
+import com.egm.stellio.shared.model.ExpandedEntity
+import org.springframework.stereotype.Service
+import java.net.URI
+
+@Service
+class EntityQueryService(
+ private val entityPayloadService: EntityPayloadService,
+) {
+ suspend fun queryEntity(entityId: URI): Either =
+ either {
+ val entityPayload = entityPayloadService.retrieve(entityId).bind()
+ toJsonLdEntity(entityPayload)
+ }
+
+ suspend fun queryEntities(
+ entitiesQuery: EntitiesQuery,
+ accessRightFilter: () -> String?
+ ): Either, Int>> = either {
+ val entitiesIds = entityPayloadService.queryEntities(entitiesQuery, accessRightFilter)
+ val count = entityPayloadService.queryEntitiesCount(entitiesQuery, accessRightFilter).bind()
+
+ // we can have an empty list of entities with a non-zero count (e.g., offset too high)
+ if (entitiesIds.isEmpty())
+ return@either Pair, Int>(emptyList(), count)
+
+ val entitiesPayloads = entityPayloadService.retrieve(entitiesIds).map { toJsonLdEntity(it) }
+
+ Pair(entitiesPayloads, count).right().bind()
+ }
+
+ private fun toJsonLdEntity(entityPayload: EntityPayload): ExpandedEntity {
+ val deserializedEntity = entityPayload.payload.deserializeAsMap()
+ return ExpandedEntity(deserializedEntity)
+ }
+}
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/entity/util/EntitiesQueryUtils.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/util/EntitiesQueryUtils.kt
new file mode 100644
index 000000000..1c32efcf5
--- /dev/null
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/util/EntitiesQueryUtils.kt
@@ -0,0 +1,105 @@
+package com.egm.stellio.search.entity.util
+
+import arrow.core.*
+import arrow.core.raise.either
+import com.egm.stellio.search.common.model.Query
+import com.egm.stellio.search.entity.model.EntitiesQuery
+import com.egm.stellio.shared.config.ApplicationProperties
+import com.egm.stellio.shared.model.APIException
+import com.egm.stellio.shared.model.BadRequestDataException
+import com.egm.stellio.shared.util.*
+import org.springframework.util.MultiValueMap
+
+fun composeEntitiesQuery(
+ defaultPagination: ApplicationProperties.Pagination,
+ requestParams: MultiValueMap,
+ contexts: List
+): Either = either {
+ val ids = requestParams.getFirst(QUERY_PARAM_ID)?.split(",").orEmpty().toListOfUri().toSet()
+ val typeSelection = expandTypeSelection(requestParams.getFirst(QUERY_PARAM_TYPE), contexts)
+ val idPattern = validateIdPattern(requestParams.getFirst(QUERY_PARAM_ID_PATTERN)).bind()
+
+ /**
+ * Decoding query parameters is not supported by default so a call to a decode function was added query
+ * with the right parameters values
+ */
+ val q = requestParams.getFirst(QUERY_PARAM_Q)?.decode()
+ val scopeQ = requestParams.getFirst(QUERY_PARAM_SCOPEQ)
+ val attrs = parseAndExpandRequestParameter(requestParams.getFirst(QUERY_PARAM_ATTRS), contexts)
+ val datasetId = parseRequestParameter(requestParams.getFirst(QUERY_PARAM_DATASET_ID))
+ val paginationQuery = parsePaginationParameters(
+ requestParams,
+ defaultPagination.limitDefault,
+ defaultPagination.limitMax
+ ).bind()
+
+ val geoQuery = parseGeoQueryParameters(requestParams.toSingleValueMap(), contexts).bind()
+
+ EntitiesQuery(
+ ids = ids,
+ typeSelection = typeSelection,
+ idPattern = idPattern,
+ q = q,
+ scopeQ = scopeQ,
+ paginationQuery = paginationQuery,
+ attrs = attrs,
+ datasetId = datasetId,
+ geoQuery = geoQuery,
+ contexts = contexts
+ )
+}
+
+fun EntitiesQuery.validateMinimalQueryEntitiesParameters(): Either = either {
+ if (
+ geoQuery == null &&
+ q.isNullOrEmpty() &&
+ typeSelection.isNullOrEmpty() &&
+ attrs.isEmpty()
+ )
+ return@either BadRequestDataException(
+ "One of 'type', 'attrs', 'q', 'geoQ' must be provided in the query"
+ ).left().bind()
+
+ this@validateMinimalQueryEntitiesParameters
+}
+
+fun composeEntitiesQueryFromPostRequest(
+ defaultPagination: ApplicationProperties.Pagination,
+ query: Query,
+ requestParams: MultiValueMap,
+ contexts: List
+): Either = either {
+ val entitySelector = query.entities?.get(0)
+ val typeSelection = expandTypeSelection(entitySelector?.typeSelection, contexts)
+ val idPattern = validateIdPattern(entitySelector?.idPattern).bind()
+ val attrs = query.attrs.orEmpty().map { JsonLdUtils.expandJsonLdTerm(it.trim(), contexts) }.toSet()
+ val datasetId = query.datasetId.orEmpty().toSet()
+ val geoQuery = if (query.geoQ != null) {
+ val geoQueryElements = mapOf(
+ "geometry" to query.geoQ.geometry,
+ "coordinates" to query.geoQ.coordinates.toString(),
+ "georel" to query.geoQ.georel,
+ "geoproperty" to query.geoQ.geoproperty
+ )
+ parseGeoQueryParameters(geoQueryElements, contexts).bind()
+ } else null
+
+ val paginationQuery = parsePaginationParameters(
+ requestParams,
+ defaultPagination.limitDefault,
+ defaultPagination.limitMax
+ ).bind()
+
+ EntitiesQuery(
+ ids = setOfNotNull(entitySelector?.id),
+ typeSelection = typeSelection,
+ idPattern = idPattern,
+ q = query.q?.decode(),
+ scopeQ = query.scopeQ,
+ paginationQuery = paginationQuery,
+ attrs = attrs,
+ datasetId = datasetId,
+ geoQuery = geoQuery,
+ contexts = contexts
+ )
+}
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/web/BatchAPIResponses.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/web/BatchAPIResponses.kt
similarity index 95%
rename from search-service/src/main/kotlin/com/egm/stellio/search/web/BatchAPIResponses.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/web/BatchAPIResponses.kt
index 421b50bcc..f1c2d3414 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/web/BatchAPIResponses.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/web/BatchAPIResponses.kt
@@ -1,6 +1,6 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.entity.web
-import com.egm.stellio.search.model.UpdateResult
+import com.egm.stellio.search.entity.model.UpdateResult
import com.egm.stellio.shared.model.APIException
import com.egm.stellio.shared.model.ExpandedEntity
import com.egm.stellio.shared.model.NgsiLdEntity
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/web/EntityHandler.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/web/EntityHandler.kt
similarity index 97%
rename from search-service/src/main/kotlin/com/egm/stellio/search/web/EntityHandler.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/web/EntityHandler.kt
index 179278523..044d76875 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/web/EntityHandler.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/web/EntityHandler.kt
@@ -1,15 +1,15 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.entity.web
import arrow.core.getOrElse
import arrow.core.left
import arrow.core.raise.either
import arrow.core.right
-import com.egm.stellio.search.authorization.AuthorizationService
-import com.egm.stellio.search.service.EntityEventService
-import com.egm.stellio.search.service.EntityPayloadService
-import com.egm.stellio.search.service.QueryService
-import com.egm.stellio.search.util.composeEntitiesQuery
-import com.egm.stellio.search.util.validateMinimalQueryEntitiesParameters
+import com.egm.stellio.search.authorization.service.AuthorizationService
+import com.egm.stellio.search.entity.service.EntityEventService
+import com.egm.stellio.search.entity.service.EntityPayloadService
+import com.egm.stellio.search.entity.service.EntityQueryService
+import com.egm.stellio.search.entity.util.composeEntitiesQuery
+import com.egm.stellio.search.entity.util.validateMinimalQueryEntitiesParameters
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.*
@@ -36,7 +36,7 @@ import java.util.Optional
class EntityHandler(
private val applicationProperties: ApplicationProperties,
private val entityPayloadService: EntityPayloadService,
- private val queryService: QueryService,
+ private val queryService: EntityQueryService,
private val authorizationService: AuthorizationService,
private val entityEventService: EntityEventService
) : BaseHandler() {
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/web/EntityOperationHandler.kt b/search-service/src/main/kotlin/com/egm/stellio/search/entity/web/EntityOperationHandler.kt
similarity index 96%
rename from search-service/src/main/kotlin/com/egm/stellio/search/web/EntityOperationHandler.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/entity/web/EntityOperationHandler.kt
index 92a7152a9..3681077dc 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/web/EntityOperationHandler.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/entity/web/EntityOperationHandler.kt
@@ -1,14 +1,14 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.entity.web
import arrow.core.*
import arrow.core.raise.either
-import com.egm.stellio.search.authorization.AuthorizationService
-import com.egm.stellio.search.model.Query
-import com.egm.stellio.search.service.EntityOperationService
-import com.egm.stellio.search.service.EntityPayloadService
-import com.egm.stellio.search.service.QueryService
-import com.egm.stellio.search.util.composeEntitiesQueryFromPostRequest
-import com.egm.stellio.search.util.validateMinimalQueryEntitiesParameters
+import com.egm.stellio.search.authorization.service.AuthorizationService
+import com.egm.stellio.search.common.model.Query
+import com.egm.stellio.search.entity.service.EntityOperationService
+import com.egm.stellio.search.entity.service.EntityPayloadService
+import com.egm.stellio.search.entity.service.EntityQueryService
+import com.egm.stellio.search.entity.util.composeEntitiesQueryFromPostRequest
+import com.egm.stellio.search.entity.util.validateMinimalQueryEntitiesParameters
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.*
@@ -34,7 +34,7 @@ class EntityOperationHandler(
private val applicationProperties: ApplicationProperties,
private val entityOperationService: EntityOperationService,
private val entityPayloadService: EntityPayloadService,
- private val queryService: QueryService,
+ private val queryService: EntityQueryService,
private val authorizationService: AuthorizationService
) {
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/scope/ScopeInstanceResult.kt b/search-service/src/main/kotlin/com/egm/stellio/search/scope/ScopeInstanceResult.kt
index a8208d3e1..9c2d1cf3c 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/scope/ScopeInstanceResult.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/scope/ScopeInstanceResult.kt
@@ -1,6 +1,6 @@
package com.egm.stellio.search.scope
-import com.egm.stellio.search.model.TemporalQuery
+import com.egm.stellio.search.temporal.model.TemporalQuery
import java.net.URI
import java.time.ZonedDateTime
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/scope/ScopeService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/scope/ScopeService.kt
index d876dfc9d..8300c0429 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/scope/ScopeService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/scope/ScopeService.kt
@@ -4,10 +4,14 @@ import arrow.core.Either
import arrow.core.left
import arrow.core.raise.either
import arrow.core.right
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.model.AttributeInstance.TemporalProperty
-import com.egm.stellio.search.model.TemporalEntityAttribute.AttributeValueType
-import com.egm.stellio.search.util.*
+import com.egm.stellio.search.common.util.*
+import com.egm.stellio.search.entity.model.*
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute.AttributeValueType
+import com.egm.stellio.search.temporal.model.AttributeInstance.TemporalProperty
+import com.egm.stellio.search.temporal.model.TemporalEntitiesQuery
+import com.egm.stellio.search.temporal.model.TemporalQuery
+import com.egm.stellio.search.temporal.util.WHOLE_TIME_RANGE_DURATION
+import com.egm.stellio.search.temporal.util.composeAggregationSelectClause
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.INCONSISTENT_VALUES_IN_AGGREGATION_MESSAGE
import com.egm.stellio.shared.util.JsonLdUtils
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/scope/TemporalScopeBuilder.kt b/search-service/src/main/kotlin/com/egm/stellio/search/scope/TemporalScopeBuilder.kt
index f4f37d764..ab32d5c72 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/scope/TemporalScopeBuilder.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/scope/TemporalScopeBuilder.kt
@@ -1,8 +1,8 @@
package com.egm.stellio.search.scope
-import com.egm.stellio.search.model.EntityPayload
-import com.egm.stellio.search.model.TemporalEntitiesQuery
-import com.egm.stellio.search.model.TemporalQuery
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.temporal.model.TemporalEntitiesQuery
+import com.egm.stellio.search.temporal.model.TemporalQuery
import com.egm.stellio.shared.util.JsonLdUtils.JSONLD_LIST
import com.egm.stellio.shared.util.JsonLdUtils.JSONLD_TYPE
import com.egm.stellio.shared.util.JsonLdUtils.JSONLD_VALUE
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeInstance.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/AttributeInstance.kt
similarity index 95%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeInstance.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/AttributeInstance.kt
index afdfe71fc..a70f6fe19 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeInstance.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/AttributeInstance.kt
@@ -1,6 +1,7 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.temporal.model
-import com.egm.stellio.search.util.toJson
+import com.egm.stellio.search.common.util.toJson
+import com.egm.stellio.search.entity.model.AttributeMetadata
import com.egm.stellio.shared.model.ExpandedAttributeInstance
import com.egm.stellio.shared.model.WKTCoordinates
import com.egm.stellio.shared.util.JsonLdUtils.NGSILD_INSTANCE_ID_PROPERTY
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeInstanceResult.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/AttributeInstanceResult.kt
similarity index 96%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeInstanceResult.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/AttributeInstanceResult.kt
index 1d32f7ab0..3e3f1dbf3 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/AttributeInstanceResult.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/AttributeInstanceResult.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.temporal.model
import java.time.ZonedDateTime
import java.util.UUID
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/EntityTemporalResult.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/EntityTemporalResult.kt
similarity index 57%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/EntityTemporalResult.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/EntityTemporalResult.kt
index e37414feb..8e98fd8d5 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/EntityTemporalResult.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/EntityTemporalResult.kt
@@ -1,7 +1,8 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.temporal.model
+import com.egm.stellio.search.entity.model.EntityPayload
import com.egm.stellio.search.scope.ScopeInstanceResult
-import com.egm.stellio.search.util.TemporalEntityAttributeInstancesResult
+import com.egm.stellio.search.temporal.util.TemporalEntityAttributeInstancesResult
data class EntityTemporalResult(
val entityPayload: EntityPayload,
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/TemporalEntitiesQuery.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/TemporalEntitiesQuery.kt
similarity index 90%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/TemporalEntitiesQuery.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/TemporalEntitiesQuery.kt
index 6063f3a10..adc92fce3 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/TemporalEntitiesQuery.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/TemporalEntitiesQuery.kt
@@ -1,5 +1,6 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.temporal.model
+import com.egm.stellio.search.entity.model.EntitiesQuery
import java.time.Duration
import java.time.Period
import java.time.temporal.TemporalAmount
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/model/TemporalQuery.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/TemporalQuery.kt
similarity index 96%
rename from search-service/src/main/kotlin/com/egm/stellio/search/model/TemporalQuery.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/TemporalQuery.kt
index e54f245e3..e3e016ead 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/model/TemporalQuery.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/model/TemporalQuery.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.temporal.model
import java.time.ZonedDateTime
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/service/AttributeInstanceService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/service/AttributeInstanceService.kt
similarity index 96%
rename from search-service/src/main/kotlin/com/egm/stellio/search/service/AttributeInstanceService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/service/AttributeInstanceService.kt
index e887e0f3b..194611270 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/service/AttributeInstanceService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/service/AttributeInstanceService.kt
@@ -1,14 +1,19 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.temporal.service
import arrow.core.Either
import arrow.core.left
import arrow.core.raise.either
import arrow.core.right
import arrow.fx.coroutines.parMap
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.model.AggregatedAttributeInstanceResult.AggregateResult
-import com.egm.stellio.search.model.TemporalQuery.Timerel
-import com.egm.stellio.search.util.*
+import com.egm.stellio.search.common.util.*
+import com.egm.stellio.search.entity.model.AttributeMetadata
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
+import com.egm.stellio.search.temporal.model.*
+import com.egm.stellio.search.temporal.model.AggregatedAttributeInstanceResult.AggregateResult
+import com.egm.stellio.search.temporal.model.TemporalQuery.Timerel
+import com.egm.stellio.search.temporal.util.WHOLE_TIME_RANGE_DURATION
+import com.egm.stellio.search.temporal.util.composeAggregationSelectClause
+import com.egm.stellio.search.temporal.util.toTemporalAttributeMetadata
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.INCONSISTENT_VALUES_IN_AGGREGATION_MESSAGE
import com.egm.stellio.shared.util.attributeOrInstanceNotFoundMessage
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/service/TemporalPaginationService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/service/TemporalPaginationService.kt
similarity index 80%
rename from search-service/src/main/kotlin/com/egm/stellio/search/service/TemporalPaginationService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/service/TemporalPaginationService.kt
index 772bacd29..ec7aadea8 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/service/TemporalPaginationService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/service/TemporalPaginationService.kt
@@ -1,9 +1,10 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.temporal.service
-import com.egm.stellio.search.model.AggregatedAttributeInstanceResult
-import com.egm.stellio.search.model.AttributeInstanceResult
-import com.egm.stellio.search.model.TemporalEntitiesQuery
-import com.egm.stellio.search.model.TemporalQuery
+import com.egm.stellio.search.temporal.model.AggregatedAttributeInstanceResult
+import com.egm.stellio.search.temporal.model.AttributeInstanceResult
+import com.egm.stellio.search.temporal.model.TemporalEntitiesQuery
+import com.egm.stellio.search.temporal.model.TemporalQuery
+import com.egm.stellio.search.temporal.util.TemporalEntityAttributeInstancesResult
import java.time.ZonedDateTime
typealias Range = Pair
@@ -11,9 +12,9 @@ typealias Range = Pair
object TemporalPaginationService {
fun getRangeAndPaginatedTEA(
- teaWithInstances: TEAWithInstances,
+ teaWithInstances: TemporalEntityAttributeInstancesResult,
query: TemporalEntitiesQuery,
- ): Pair {
+ ): Pair {
val temporalQuery = query.temporalQuery
if (temporalQuery.isLastNTheLimit()) {
return teaWithInstances to null
@@ -32,7 +33,7 @@ object TemporalPaginationService {
}
private fun getAttributesWhoReachedLimit(
- teaWithInstances: TEAWithInstances,
+ teaWithInstances: TemporalEntityAttributeInstancesResult,
query: TemporalEntitiesQuery
): List> =
teaWithInstances.values.filter { instances ->
@@ -76,9 +77,9 @@ object TemporalPaginationService {
}
private fun filterInRange(
- teaWithInstances: TEAWithInstances,
+ teaWithInstances: TemporalEntityAttributeInstancesResult,
range: Range,
- ): TEAWithInstances =
+ ): TemporalEntityAttributeInstancesResult =
teaWithInstances.mapValues { (_, value) ->
value.filter { range.contain(it.getComparableTime()) }
}
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/service/QueryService.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/service/TemporalQueryService.kt
similarity index 81%
rename from search-service/src/main/kotlin/com/egm/stellio/search/service/QueryService.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/service/TemporalQueryService.kt
index bf0c20426..7bae98657 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/service/QueryService.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/service/TemporalQueryService.kt
@@ -1,16 +1,19 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.temporal.service
import arrow.core.Either
import arrow.core.getOrElse
import arrow.core.left
import arrow.core.raise.either
import arrow.core.right
-import com.egm.stellio.search.model.*
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
+import com.egm.stellio.search.entity.service.EntityAttributeService
+import com.egm.stellio.search.entity.service.EntityPayloadService
import com.egm.stellio.search.scope.ScopeService
-import com.egm.stellio.search.service.TemporalPaginationService.getRangeAndPaginatedTEA
-import com.egm.stellio.search.util.TemporalEntityBuilder
-import com.egm.stellio.search.util.deserializeAsMap
-import com.egm.stellio.search.web.Range
+import com.egm.stellio.search.temporal.model.*
+import com.egm.stellio.search.temporal.service.TemporalPaginationService.getRangeAndPaginatedTEA
+import com.egm.stellio.search.temporal.util.TemporalEntityAttributeInstancesResult
+import com.egm.stellio.search.temporal.util.TemporalEntityBuilder
+import com.egm.stellio.search.temporal.web.Range
import com.egm.stellio.shared.model.APIException
import com.egm.stellio.shared.model.ExpandedEntity
import com.egm.stellio.shared.model.ResourceNotFoundException
@@ -21,36 +24,13 @@ import org.springframework.stereotype.Service
import java.net.URI
import java.time.ZonedDateTime
-typealias TEAWithInstances = Map>
-
@Service
-class QueryService(
+class TemporalQueryService(
private val entityPayloadService: EntityPayloadService,
private val scopeService: ScopeService,
private val attributeInstanceService: AttributeInstanceService,
- private val temporalEntityAttributeService: TemporalEntityAttributeService
+ private val entityAttributeService: EntityAttributeService
) {
- suspend fun queryEntity(entityId: URI): Either =
- either {
- val entityPayload = entityPayloadService.retrieve(entityId).bind()
- toJsonLdEntity(entityPayload)
- }
-
- suspend fun queryEntities(
- entitiesQuery: EntitiesQuery,
- accessRightFilter: () -> String?
- ): Either, Int>> = either {
- val entitiesIds = entityPayloadService.queryEntities(entitiesQuery, accessRightFilter)
- val count = entityPayloadService.queryEntitiesCount(entitiesQuery, accessRightFilter).bind()
-
- // we can have an empty list of entities with a non-zero count (e.g., offset too high)
- if (entitiesIds.isEmpty())
- return@either Pair, Int>(emptyList(), count)
-
- val entitiesPayloads = entityPayloadService.retrieve(entitiesIds).map { toJsonLdEntity(it) }
-
- Pair(entitiesPayloads, count).right().bind()
- }
suspend fun queryTemporalEntity(
entityId: URI,
@@ -58,7 +38,7 @@ class QueryService(
): Either> = either {
val attrs = temporalEntitiesQuery.entitiesQuery.attrs
val datasetIds = temporalEntitiesQuery.entitiesQuery.datasetId
- val temporalEntityAttributes = temporalEntityAttributeService.getForEntity(entityId, attrs, datasetIds).let {
+ val temporalEntityAttributes = entityAttributeService.getForEntity(entityId, attrs, datasetIds).let {
if (it.isEmpty())
ResourceNotFoundException(
entityOrAttrsNotFoundMessage(entityId.toString(), temporalEntitiesQuery.entitiesQuery.attrs)
@@ -139,7 +119,7 @@ class QueryService(
if (entitiesIds.isEmpty())
return@either Triple, Int, Range?>(emptyList(), count, null)
- val temporalEntityAttributes = temporalEntityAttributeService.getForTemporalEntities(
+ val temporalEntityAttributes = entityAttributeService.getForTemporalEntities(
entitiesIds,
temporalEntitiesQuery.entitiesQuery
)
@@ -193,7 +173,7 @@ class QueryService(
temporalEntityAttributes: List,
temporalEntitiesQuery: TemporalEntitiesQuery,
origin: ZonedDateTime? = null
- ): Either = either {
+ ): Either = either {
// split the group according to attribute type as this currently triggers 2 different queries
// then do one search for each type of attribute (fewer queries for improved performance)
temporalEntityAttributes
@@ -229,8 +209,8 @@ class QueryService(
private fun fillWithTEAWithEmptyInstances(
temporalEntityAttributes: List,
- temporalEntityAttributesWithInstances: TEAWithInstances
- ): TEAWithInstances {
+ temporalEntityAttributesWithInstances: TemporalEntityAttributeInstancesResult
+ ): TemporalEntityAttributeInstancesResult {
// filter the temporal entity attributes for which there are no attribute instances
val temporalEntityAttributesWithoutInstances =
temporalEntityAttributes.filter {
@@ -241,9 +221,4 @@ class QueryService(
temporalEntityAttributesWithoutInstances.map { it to emptyList() }
)
}
-
- private fun toJsonLdEntity(entityPayload: EntityPayload): ExpandedEntity {
- val deserializedEntity = entityPayload.payload.deserializeAsMap()
- return ExpandedEntity(deserializedEntity)
- }
}
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/util/AttributeInstanceUtils.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/AttributeInstanceUtils.kt
similarity index 93%
rename from search-service/src/main/kotlin/com/egm/stellio/search/util/AttributeInstanceUtils.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/AttributeInstanceUtils.kt
index c26cea08b..65c20962b 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/util/AttributeInstanceUtils.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/AttributeInstanceUtils.kt
@@ -1,12 +1,14 @@
-package com.egm.stellio.search.util
+package com.egm.stellio.search.temporal.util
import arrow.core.Either
import arrow.core.left
import arrow.core.raise.either
import arrow.core.right
-import com.egm.stellio.search.model.AttributeMetadata
-import com.egm.stellio.search.model.TemporalEntityAttribute
-import com.egm.stellio.search.model.TemporalEntityAttribute.AttributeValueType
+import com.egm.stellio.search.common.util.deserializeAsMap
+import com.egm.stellio.search.common.util.valueToDoubleOrNull
+import com.egm.stellio.search.entity.model.AttributeMetadata
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute.AttributeValueType
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.JsonLdUtils.JSONLD_LANGUAGE
import com.egm.stellio.shared.util.JsonLdUtils.NGSILD_JSONPROPERTY_VALUE
@@ -22,20 +24,6 @@ import java.time.LocalDate
import java.time.LocalTime
import java.time.ZonedDateTime
-fun valueToDoubleOrNull(value: Any): Double? =
- when (value) {
- is Double -> value
- is Int -> value.toDouble()
- else -> null
- }
-
-fun valueToStringOrNull(value: Any): String? =
- when (value) {
- is String -> value
- is Boolean -> value.toString()
- else -> null
- }
-
fun NgsiLdEntity.prepareTemporalAttributes(): Either>> {
val ngsiLdEntity = this
return either {
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/util/DBAggregationUtils.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/DBAggregationUtils.kt
similarity index 96%
rename from search-service/src/main/kotlin/com/egm/stellio/search/util/DBAggregationUtils.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/DBAggregationUtils.kt
index a3bc977da..62394d558 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/util/DBAggregationUtils.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/DBAggregationUtils.kt
@@ -1,7 +1,7 @@
-package com.egm.stellio.search.util
+package com.egm.stellio.search.temporal.util
-import com.egm.stellio.search.model.TemporalEntityAttribute.AttributeValueType
-import com.egm.stellio.search.model.TemporalQuery
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute.AttributeValueType
+import com.egm.stellio.search.temporal.model.TemporalQuery
fun aggrMethodToSqlAggregate(
aggregate: TemporalQuery.Aggregate,
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/util/TemporalEntityBuilder.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/TemporalEntityBuilder.kt
similarity index 98%
rename from search-service/src/main/kotlin/com/egm/stellio/search/util/TemporalEntityBuilder.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/TemporalEntityBuilder.kt
index e396c052d..2e0315140 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/util/TemporalEntityBuilder.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/TemporalEntityBuilder.kt
@@ -1,7 +1,8 @@
-package com.egm.stellio.search.util
+package com.egm.stellio.search.temporal.util
-import com.egm.stellio.search.model.*
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
import com.egm.stellio.search.scope.TemporalScopeBuilder
+import com.egm.stellio.search.temporal.model.*
import com.egm.stellio.shared.model.ExpandedEntity
import com.egm.stellio.shared.model.ExpandedTerm
import com.egm.stellio.shared.util.AuthContextModel.AUTH_PROP_SUB
@@ -121,7 +122,7 @@ object TemporalEntityBuilder {
it.key.datasetId?.let { datasetId ->
attributeInstance[NGSILD_DATASET_ID_PROPERTY] = buildNonReifiedPropertyValue(datasetId.toString())
}
- val valuesKey = it.key.attributeType.toSimpliedRepresentationKey()
+ val valuesKey = it.key.attributeType.toSimplifiedRepresentationKey()
attributeInstance[valuesKey] =
buildExpandedTemporalValue(it.value) { attributeInstanceResult ->
attributeInstanceResult as SimplifiedAttributeInstanceResult
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/util/TemporalQueryParamsUtils.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/TemporalQueryParamsUtils.kt
similarity index 88%
rename from search-service/src/main/kotlin/com/egm/stellio/search/util/TemporalQueryParamsUtils.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/TemporalQueryParamsUtils.kt
index ffb995ef4..26f2e461e 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/util/TemporalQueryParamsUtils.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/TemporalQueryParamsUtils.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.util
+package com.egm.stellio.search.temporal.util
const val TIMEREL_PARAM = "timerel"
const val TIMEAT_PARAM = "timeAt"
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/util/EntitiesQueryUtils.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/TemporalQueryUtils.kt
similarity index 62%
rename from search-service/src/main/kotlin/com/egm/stellio/search/util/EntitiesQueryUtils.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/TemporalQueryUtils.kt
index 4c1790d83..6a537f11c 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/util/EntitiesQueryUtils.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/util/TemporalQueryUtils.kt
@@ -1,112 +1,25 @@
-package com.egm.stellio.search.util
+package com.egm.stellio.search.temporal.util
import arrow.core.*
import arrow.core.raise.either
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.model.TemporalQuery.Aggregate
-import com.egm.stellio.search.model.TemporalQuery.Timerel
+import com.egm.stellio.search.common.model.Query
+import com.egm.stellio.search.entity.util.composeEntitiesQuery
+import com.egm.stellio.search.entity.util.composeEntitiesQueryFromPostRequest
+import com.egm.stellio.search.entity.util.validateMinimalQueryEntitiesParameters
+import com.egm.stellio.search.temporal.model.AttributeInstance
+import com.egm.stellio.search.temporal.model.TemporalEntitiesQuery
+import com.egm.stellio.search.temporal.model.TemporalQuery
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.APIException
import com.egm.stellio.shared.model.BadRequestDataException
-import com.egm.stellio.shared.util.*
+import com.egm.stellio.shared.util.OptionsParamValue
+import com.egm.stellio.shared.util.QUERY_PARAM_OPTIONS
+import com.egm.stellio.shared.util.hasValueInOptionsParam
+import com.egm.stellio.shared.util.parseTimeParameter
import org.springframework.util.MultiValueMap
import org.springframework.util.MultiValueMapAdapter
import java.time.ZonedDateTime
-import java.util.Optional
-
-fun composeEntitiesQuery(
- defaultPagination: ApplicationProperties.Pagination,
- requestParams: MultiValueMap,
- contexts: List
-): Either = either {
- val ids = requestParams.getFirst(QUERY_PARAM_ID)?.split(",").orEmpty().toListOfUri().toSet()
- val typeSelection = expandTypeSelection(requestParams.getFirst(QUERY_PARAM_TYPE), contexts)
- val idPattern = validateIdPattern(requestParams.getFirst(QUERY_PARAM_ID_PATTERN)).bind()
-
- /**
- * Decoding query parameters is not supported by default so a call to a decode function was added query
- * with the right parameters values
- */
- val q = requestParams.getFirst(QUERY_PARAM_Q)?.decode()
- val scopeQ = requestParams.getFirst(QUERY_PARAM_SCOPEQ)
- val attrs = parseAndExpandRequestParameter(requestParams.getFirst(QUERY_PARAM_ATTRS), contexts)
- val datasetId = parseRequestParameter(requestParams.getFirst(QUERY_PARAM_DATASET_ID))
- val paginationQuery = parsePaginationParameters(
- requestParams,
- defaultPagination.limitDefault,
- defaultPagination.limitMax
- ).bind()
-
- val geoQuery = parseGeoQueryParameters(requestParams.toSingleValueMap(), contexts).bind()
-
- EntitiesQuery(
- ids = ids,
- typeSelection = typeSelection,
- idPattern = idPattern,
- q = q,
- scopeQ = scopeQ,
- paginationQuery = paginationQuery,
- attrs = attrs,
- datasetId = datasetId,
- geoQuery = geoQuery,
- contexts = contexts
- )
-}
-
-fun EntitiesQuery.validateMinimalQueryEntitiesParameters(): Either = either {
- if (
- geoQuery == null &&
- q.isNullOrEmpty() &&
- typeSelection.isNullOrEmpty() &&
- attrs.isEmpty()
- )
- return@either BadRequestDataException(
- "One of 'type', 'attrs', 'q', 'geoQ' must be provided in the query"
- ).left().bind()
-
- this@validateMinimalQueryEntitiesParameters
-}
-
-fun composeEntitiesQueryFromPostRequest(
- defaultPagination: ApplicationProperties.Pagination,
- query: Query,
- requestParams: MultiValueMap,
- contexts: List
-): Either = either {
- val entitySelector = query.entities?.get(0)
- val typeSelection = expandTypeSelection(entitySelector?.typeSelection, contexts)
- val idPattern = validateIdPattern(entitySelector?.idPattern).bind()
- val attrs = query.attrs.orEmpty().map { JsonLdUtils.expandJsonLdTerm(it.trim(), contexts) }.toSet()
- val datasetId = query.datasetId.orEmpty().toSet()
- val geoQuery = if (query.geoQ != null) {
- val geoQueryElements = mapOf(
- "geometry" to query.geoQ.geometry,
- "coordinates" to query.geoQ.coordinates.toString(),
- "georel" to query.geoQ.georel,
- "geoproperty" to query.geoQ.geoproperty
- )
- parseGeoQueryParameters(geoQueryElements, contexts).bind()
- } else null
-
- val paginationQuery = parsePaginationParameters(
- requestParams,
- defaultPagination.limitDefault,
- defaultPagination.limitMax
- ).bind()
-
- EntitiesQuery(
- ids = setOfNotNull(entitySelector?.id),
- typeSelection = typeSelection,
- idPattern = idPattern,
- q = query.q?.decode(),
- scopeQ = query.scopeQ,
- paginationQuery = paginationQuery,
- attrs = attrs,
- datasetId = datasetId,
- geoQuery = geoQuery,
- contexts = contexts
- )
-}
+import java.util.*
fun composeTemporalEntitiesQuery(
defaultPagination: ApplicationProperties.Pagination,
@@ -228,15 +141,15 @@ fun buildTemporalQuery(
return BadRequestDataException(it).left()
}
- if (timerel == Timerel.BETWEEN && endTimeAtParam == null)
+ if (timerel == TemporalQuery.Timerel.BETWEEN && endTimeAtParam == null)
return BadRequestDataException("'endTimeAt' request parameter is mandatory if 'timerel' is 'between'").left()
if (withAggregatedValues && aggrMethodsParam == null)
return BadRequestDataException("'aggrMethods' is mandatory if 'aggregatedValues' option is specified").left()
val aggregate = aggrMethodsParam?.split(",")?.map {
- if (Aggregate.isSupportedAggregate(it))
- Aggregate.forMethod(it)!!
+ if (TemporalQuery.Aggregate.isSupportedAggregate(it))
+ TemporalQuery.Aggregate.forMethod(it)!!
else
return BadRequestDataException(
"'$it' is not a recognized aggregation method for 'aggrMethods' parameter"
@@ -264,13 +177,13 @@ fun buildTimerelAndTime(
timerelParam: String?,
timeAtParam: String?,
inQueryEntities: Boolean
-): Either> =
+): Either> =
// when querying a specific temporal entity, timeAt and timerel are optional
if (timerelParam == null && timeAtParam == null && !inQueryEntities) {
Pair(null, null).right()
} else if (timerelParam != null && timeAtParam != null) {
val timeRelResult = try {
- Timerel.valueOf(timerelParam.uppercase()).right()
+ TemporalQuery.Timerel.valueOf(timerelParam.uppercase()).right()
} catch (e: IllegalArgumentException) {
"'timerel' is not valid, it should be one of 'before', 'between', or 'after'".left()
}
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/web/TemporalApiResponses.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/web/TemporalApiResponses.kt
similarity index 94%
rename from search-service/src/main/kotlin/com/egm/stellio/search/web/TemporalApiResponses.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/web/TemporalApiResponses.kt
index aa8646358..4fc12e749 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/web/TemporalApiResponses.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/web/TemporalApiResponses.kt
@@ -1,7 +1,7 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.temporal.web
-import com.egm.stellio.search.model.TemporalEntitiesQuery
-import com.egm.stellio.search.model.TemporalQuery
+import com.egm.stellio.search.temporal.model.TemporalEntitiesQuery
+import com.egm.stellio.search.temporal.model.TemporalQuery
import com.egm.stellio.shared.model.CompactedEntity
import com.egm.stellio.shared.model.toFinalRepresentation
import com.egm.stellio.shared.util.JsonUtils.serializeObject
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/web/TemporalEntityHandler.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityHandler.kt
similarity index 93%
rename from search-service/src/main/kotlin/com/egm/stellio/search/web/TemporalEntityHandler.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityHandler.kt
index 285d6f1d0..1c5a43b59 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/web/TemporalEntityHandler.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityHandler.kt
@@ -1,17 +1,17 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.temporal.web
import arrow.core.Either
import arrow.core.left
import arrow.core.raise.either
import arrow.core.right
-import com.egm.stellio.search.authorization.AuthorizationService
-import com.egm.stellio.search.service.AttributeInstanceService
-import com.egm.stellio.search.service.EntityPayloadService
-import com.egm.stellio.search.service.QueryService
-import com.egm.stellio.search.service.TemporalEntityAttributeService
-import com.egm.stellio.search.util.composeTemporalEntitiesQuery
-import com.egm.stellio.search.web.TemporalApiResponses.buildEntitiesTemporalResponse
-import com.egm.stellio.search.web.TemporalApiResponses.buildEntityTemporalResponse
+import com.egm.stellio.search.authorization.service.AuthorizationService
+import com.egm.stellio.search.entity.service.EntityAttributeService
+import com.egm.stellio.search.entity.service.EntityPayloadService
+import com.egm.stellio.search.temporal.service.AttributeInstanceService
+import com.egm.stellio.search.temporal.service.TemporalQueryService
+import com.egm.stellio.search.temporal.util.composeTemporalEntitiesQuery
+import com.egm.stellio.search.temporal.web.TemporalApiResponses.buildEntitiesTemporalResponse
+import com.egm.stellio.search.temporal.web.TemporalApiResponses.buildEntityTemporalResponse
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.*
@@ -38,8 +38,8 @@ import java.net.URI
class TemporalEntityHandler(
private val entityPayloadService: EntityPayloadService,
private val attributeInstanceService: AttributeInstanceService,
- private val temporalEntityAttributeService: TemporalEntityAttributeService,
- private val queryService: QueryService,
+ private val entityAttributeService: EntityAttributeService,
+ private val temporalQueryService: TemporalQueryService,
private val authorizationService: AuthorizationService,
private val applicationProperties: ApplicationProperties
) : BaseHandler() {
@@ -154,7 +154,7 @@ class TemporalEntityHandler(
val accessRightFilter = authorizationService.computeAccessRightFilter(sub)
- val (temporalEntities, total, range) = queryService.queryTemporalEntities(
+ val (temporalEntities, total, range) = temporalQueryService.queryTemporalEntities(
temporalEntitiesQuery,
accessRightFilter
).bind()
@@ -197,7 +197,7 @@ class TemporalEntityHandler(
val temporalEntitiesQuery =
composeTemporalEntitiesQuery(applicationProperties.pagination, params, contexts).bind()
- val (temporalEntity, range) = queryService.queryTemporalEntity(entityId, temporalEntitiesQuery).bind()
+ val (temporalEntity, range) = temporalQueryService.queryTemporalEntity(entityId, temporalEntitiesQuery).bind()
val compactedEntity = compactEntity(temporalEntity, contexts)
@@ -296,7 +296,7 @@ class TemporalEntityHandler(
attrId.checkNameIsNgsiLdSupported().bind()
val expandedAttrId = expandJsonLdTerm(attrId, contexts)
- temporalEntityAttributeService.checkEntityAndAttributeExistence(
+ entityAttributeService.checkEntityAndAttributeExistence(
entityId,
expandedAttrId,
datasetId
diff --git a/search-service/src/main/kotlin/com/egm/stellio/search/web/TemporalEntityOperationsHandler.kt b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityOperationsHandler.kt
similarity index 80%
rename from search-service/src/main/kotlin/com/egm/stellio/search/web/TemporalEntityOperationsHandler.kt
rename to search-service/src/main/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityOperationsHandler.kt
index d7a105d11..10a314854 100644
--- a/search-service/src/main/kotlin/com/egm/stellio/search/web/TemporalEntityOperationsHandler.kt
+++ b/search-service/src/main/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityOperationsHandler.kt
@@ -1,11 +1,11 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.temporal.web
import arrow.core.raise.either
-import com.egm.stellio.search.authorization.AuthorizationService
-import com.egm.stellio.search.model.Query
-import com.egm.stellio.search.service.QueryService
-import com.egm.stellio.search.util.composeTemporalEntitiesQueryFromPostRequest
-import com.egm.stellio.search.web.TemporalApiResponses.buildEntitiesTemporalResponse
+import com.egm.stellio.search.authorization.service.AuthorizationService
+import com.egm.stellio.search.common.model.Query
+import com.egm.stellio.search.temporal.service.TemporalQueryService
+import com.egm.stellio.search.temporal.util.composeTemporalEntitiesQueryFromPostRequest
+import com.egm.stellio.search.temporal.web.TemporalApiResponses.buildEntitiesTemporalResponse
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.util.*
import com.egm.stellio.shared.util.JsonLdUtils.compactEntities
@@ -20,7 +20,7 @@ import reactor.core.publisher.Mono
@RestController
@RequestMapping("/ngsi-ld/v1/temporal/entityOperations")
class TemporalEntityOperationsHandler(
- private val queryService: QueryService,
+ private val temporalQueryService: TemporalQueryService,
private val authorizationService: AuthorizationService,
private val applicationProperties: ApplicationProperties
) {
@@ -49,7 +49,7 @@ class TemporalEntityOperationsHandler(
val accessRightFilter = authorizationService.computeAccessRightFilter(sub)
- val (temporalEntities, total, range) = queryService.queryTemporalEntities(
+ val (temporalEntities, total, range) = temporalQueryService.queryTemporalEntities(
temporalEntitiesQuery,
accessRightFilter
).bind()
diff --git a/search-service/src/main/kotlin/db/migration/V0_29__JsonLd_migration.kt b/search-service/src/main/kotlin/db/migration/V0_29__JsonLd_migration.kt
index badc28eb9..15e2f10c2 100644
--- a/search-service/src/main/kotlin/db/migration/V0_29__JsonLd_migration.kt
+++ b/search-service/src/main/kotlin/db/migration/V0_29__JsonLd_migration.kt
@@ -1,10 +1,10 @@
package db.migration
import arrow.core.Either
-import com.egm.stellio.search.model.AttributeInstance
-import com.egm.stellio.search.model.TemporalEntityAttribute
-import com.egm.stellio.search.util.guessPropertyValueType
-import com.egm.stellio.search.util.toTemporalAttributeMetadata
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
+import com.egm.stellio.search.temporal.model.AttributeInstance
+import com.egm.stellio.search.temporal.util.guessPropertyValueType
+import com.egm.stellio.search.temporal.util.toTemporalAttributeMetadata
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.AuthContextModel
import com.egm.stellio.shared.util.AuthContextModel.AUTH_PROP_SAP
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/listener/IAMListenerTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/listener/IAMListenerTests.kt
similarity index 96%
rename from search-service/src/test/kotlin/com/egm/stellio/search/listener/IAMListenerTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/authorization/listener/IAMListenerTests.kt
index d867a7b21..4e42fddb8 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/listener/IAMListenerTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/listener/IAMListenerTests.kt
@@ -1,12 +1,12 @@
-package com.egm.stellio.search.listener
+package com.egm.stellio.search.authorization.listener
import arrow.core.right
-import com.egm.stellio.search.authorization.EntityAccessRightsService
-import com.egm.stellio.search.authorization.SubjectReferentialService
-import com.egm.stellio.search.config.SearchProperties
-import com.egm.stellio.search.model.EntityPayload
-import com.egm.stellio.search.service.EntityEventService
-import com.egm.stellio.search.service.EntityPayloadService
+import com.egm.stellio.search.authorization.service.EntityAccessRightsService
+import com.egm.stellio.search.authorization.service.SubjectReferentialService
+import com.egm.stellio.search.common.config.SearchProperties
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.service.EntityEventService
+import com.egm.stellio.search.entity.service.EntityPayloadService
import com.egm.stellio.shared.util.GlobalRole
import com.egm.stellio.shared.util.SubjectType
import com.egm.stellio.shared.util.loadSampleData
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/authorization/AuthorizationServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/service/AuthorizationServiceTests.kt
similarity index 95%
rename from search-service/src/test/kotlin/com/egm/stellio/search/authorization/AuthorizationServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/authorization/service/AuthorizationServiceTests.kt
index 663ed1dbf..febd20e8f 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/authorization/AuthorizationServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/service/AuthorizationServiceTests.kt
@@ -1,7 +1,7 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.service
import arrow.core.None
-import com.egm.stellio.search.model.EntitiesQuery
+import com.egm.stellio.search.entity.model.EntitiesQuery
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.PaginationQuery
import com.egm.stellio.shared.util.AUTHZ_TEST_COMPOUND_CONTEXTS
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/authorization/EnabledAuthorizationServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/service/EnabledAuthorizationServiceTests.kt
similarity index 98%
rename from search-service/src/test/kotlin/com/egm/stellio/search/authorization/EnabledAuthorizationServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/authorization/service/EnabledAuthorizationServiceTests.kt
index 7442ae12e..63f309620 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/authorization/EnabledAuthorizationServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/service/EnabledAuthorizationServiceTests.kt
@@ -1,10 +1,13 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.service
import arrow.core.Either
import arrow.core.Some
import arrow.core.right
-import com.egm.stellio.search.authorization.EntityAccessRights.SubjectRightInfo
-import com.egm.stellio.search.model.EntitiesQuery
+import com.egm.stellio.search.authorization.model.EntityAccessRights
+import com.egm.stellio.search.authorization.model.EntityAccessRights.SubjectRightInfo
+import com.egm.stellio.search.authorization.model.Group
+import com.egm.stellio.search.authorization.model.User
+import com.egm.stellio.search.entity.model.EntitiesQuery
import com.egm.stellio.shared.model.AccessDeniedException
import com.egm.stellio.shared.model.PaginationQuery
import com.egm.stellio.shared.util.*
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/authorization/EntityAccessRightsServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/service/EntityAccessRightsServiceTests.kt
similarity index 98%
rename from search-service/src/test/kotlin/com/egm/stellio/search/authorization/EntityAccessRightsServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/authorization/service/EntityAccessRightsServiceTests.kt
index 1b3b816c4..3bdd458d9 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/authorization/EntityAccessRightsServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/service/EntityAccessRightsServiceTests.kt
@@ -1,9 +1,14 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.service
import arrow.core.Some
import arrow.core.right
-import com.egm.stellio.search.model.EntityPayload
-import com.egm.stellio.search.service.EntityPayloadService
+import com.egm.stellio.search.authorization.getSubjectInfoForClient
+import com.egm.stellio.search.authorization.getSubjectInfoForGroup
+import com.egm.stellio.search.authorization.getSubjectInfoForUser
+import com.egm.stellio.search.authorization.model.SubjectAccessRight
+import com.egm.stellio.search.authorization.model.SubjectReferential
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.service.EntityPayloadService
import com.egm.stellio.search.support.WithTimescaleContainer
import com.egm.stellio.shared.model.AccessDeniedException
import com.egm.stellio.shared.model.ExpandedTerm
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/authorization/SubjectReferentialServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/service/SubjectReferentialServiceTests.kt
similarity index 98%
rename from search-service/src/test/kotlin/com/egm/stellio/search/authorization/SubjectReferentialServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/authorization/service/SubjectReferentialServiceTests.kt
index 3fac48ba3..11a990b98 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/authorization/SubjectReferentialServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/service/SubjectReferentialServiceTests.kt
@@ -1,6 +1,9 @@
-package com.egm.stellio.search.authorization
+package com.egm.stellio.search.authorization.service
import arrow.core.Some
+import com.egm.stellio.search.authorization.getSubjectInfoForGroup
+import com.egm.stellio.search.authorization.getSubjectInfoForUser
+import com.egm.stellio.search.authorization.model.SubjectReferential
import com.egm.stellio.search.support.EMPTY_JSON_PAYLOAD
import com.egm.stellio.search.support.WithTimescaleContainer
import com.egm.stellio.shared.model.AccessDeniedException
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/web/AnonymousUserHandlerTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/web/AnonymousUserHandlerTests.kt
similarity index 66%
rename from search-service/src/test/kotlin/com/egm/stellio/search/web/AnonymousUserHandlerTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/authorization/web/AnonymousUserHandlerTests.kt
index d80f2b957..f618d7631 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/web/AnonymousUserHandlerTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/web/AnonymousUserHandlerTests.kt
@@ -1,11 +1,13 @@
-package com.egm.stellio.search.web
-
-import com.egm.stellio.search.authorization.AuthorizationService
-import com.egm.stellio.search.config.SearchProperties
-import com.egm.stellio.search.service.EntityEventService
-import com.egm.stellio.search.service.EntityPayloadService
-import com.egm.stellio.search.service.QueryService
-import com.egm.stellio.search.service.TemporalEntityAttributeService
+package com.egm.stellio.search.authorization.web
+
+import com.egm.stellio.search.authorization.service.AuthorizationService
+import com.egm.stellio.search.common.config.SearchProperties
+import com.egm.stellio.search.entity.service.EntityAttributeService
+import com.egm.stellio.search.entity.service.EntityEventService
+import com.egm.stellio.search.entity.service.EntityPayloadService
+import com.egm.stellio.search.entity.service.EntityQueryService
+import com.egm.stellio.search.entity.web.EntityHandler
+import com.egm.stellio.search.temporal.service.TemporalQueryService
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.util.AQUAC_HEADER_LINK
import com.ninjasquad.springmockk.MockkBean
@@ -31,10 +33,10 @@ class AnonymousUserHandlerTests {
private lateinit var entityPayloadService: EntityPayloadService
@MockkBean
- private lateinit var temporalEntityAttributeService: TemporalEntityAttributeService
+ private lateinit var entityAttributeService: EntityAttributeService
@MockkBean
- private lateinit var queryService: QueryService
+ private lateinit var queryService: TemporalQueryService
@MockkBean(relaxed = true)
private lateinit var authorizationService: AuthorizationService
@@ -42,6 +44,9 @@ class AnonymousUserHandlerTests {
@MockkBean
private lateinit var entityEventService: EntityEventService
+ @MockkBean
+ private lateinit var entityQueryService: EntityQueryService
+
@Test
@WithAnonymousUser
fun `it should not authorize an anonymous to call the API`() {
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/web/EntityAccessControlHandlerTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/web/EntityAccessControlHandlerTests.kt
similarity index 98%
rename from search-service/src/test/kotlin/com/egm/stellio/search/web/EntityAccessControlHandlerTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/authorization/web/EntityAccessControlHandlerTests.kt
index 7721f753a..d3efd953c 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/web/EntityAccessControlHandlerTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/authorization/web/EntityAccessControlHandlerTests.kt
@@ -1,13 +1,13 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.authorization.web
import arrow.core.left
import arrow.core.right
-import com.egm.stellio.search.authorization.AuthorizationService
-import com.egm.stellio.search.authorization.EntityAccessRights
-import com.egm.stellio.search.authorization.EntityAccessRightsService
-import com.egm.stellio.search.authorization.User
-import com.egm.stellio.search.config.SearchProperties
-import com.egm.stellio.search.service.EntityPayloadService
+import com.egm.stellio.search.authorization.model.EntityAccessRights
+import com.egm.stellio.search.authorization.model.User
+import com.egm.stellio.search.authorization.service.AuthorizationService
+import com.egm.stellio.search.authorization.service.EntityAccessRightsService
+import com.egm.stellio.search.common.config.SearchProperties
+import com.egm.stellio.search.entity.service.EntityPayloadService
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.*
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/service/AttributeServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/discovery/service/AttributeServiceTests.kt
similarity index 95%
rename from search-service/src/test/kotlin/com/egm/stellio/search/service/AttributeServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/discovery/service/AttributeServiceTests.kt
index 324692660..41b3415ce 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/service/AttributeServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/discovery/service/AttributeServiceTests.kt
@@ -1,14 +1,17 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.discovery.service
import arrow.core.Either
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.model.AttributeType
+import com.egm.stellio.search.common.util.execute
+import com.egm.stellio.search.common.util.toUri
+import com.egm.stellio.search.discovery.model.AttributeDetails
+import com.egm.stellio.search.discovery.model.AttributeType
+import com.egm.stellio.search.discovery.model.AttributeTypeInfo
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
import com.egm.stellio.search.support.EMPTY_JSON_PAYLOAD
import com.egm.stellio.search.support.WithKafkaContainer
import com.egm.stellio.search.support.WithTimescaleContainer
import com.egm.stellio.search.support.gimmeEntityPayload
-import com.egm.stellio.search.util.execute
-import com.egm.stellio.search.util.toUri
import com.egm.stellio.shared.model.APIException
import com.egm.stellio.shared.model.ResourceNotFoundException
import com.egm.stellio.shared.util.*
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/service/EntityTypeServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/discovery/service/EntityTypeServiceTests.kt
similarity index 95%
rename from search-service/src/test/kotlin/com/egm/stellio/search/service/EntityTypeServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/discovery/service/EntityTypeServiceTests.kt
index 7e1adb21e..66c3dc665 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/service/EntityTypeServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/discovery/service/EntityTypeServiceTests.kt
@@ -1,14 +1,18 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.discovery.service
import arrow.core.Either
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.model.AttributeType
+import com.egm.stellio.search.common.util.execute
+import com.egm.stellio.search.common.util.toUri
+import com.egm.stellio.search.discovery.model.AttributeInfo
+import com.egm.stellio.search.discovery.model.AttributeType
+import com.egm.stellio.search.discovery.model.EntityType
+import com.egm.stellio.search.discovery.model.EntityTypeInfo
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
import com.egm.stellio.search.support.EMPTY_JSON_PAYLOAD
import com.egm.stellio.search.support.WithKafkaContainer
import com.egm.stellio.search.support.WithTimescaleContainer
import com.egm.stellio.search.support.gimmeEntityPayload
-import com.egm.stellio.search.util.execute
-import com.egm.stellio.search.util.toUri
import com.egm.stellio.shared.model.APIException
import com.egm.stellio.shared.model.ResourceNotFoundException
import com.egm.stellio.shared.util.*
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/web/AttributeHandlerTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/discovery/web/AttributeHandlerTests.kt
similarity index 95%
rename from search-service/src/test/kotlin/com/egm/stellio/search/web/AttributeHandlerTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/discovery/web/AttributeHandlerTests.kt
index 8cf090d52..0c8ee037c 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/web/AttributeHandlerTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/discovery/web/AttributeHandlerTests.kt
@@ -1,13 +1,13 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.discovery.web
import arrow.core.left
import arrow.core.right
-import com.egm.stellio.search.config.SearchProperties
-import com.egm.stellio.search.model.AttributeDetails
-import com.egm.stellio.search.model.AttributeList
-import com.egm.stellio.search.model.AttributeType
-import com.egm.stellio.search.model.AttributeTypeInfo
-import com.egm.stellio.search.service.AttributeService
+import com.egm.stellio.search.common.config.SearchProperties
+import com.egm.stellio.search.discovery.model.AttributeDetails
+import com.egm.stellio.search.discovery.model.AttributeList
+import com.egm.stellio.search.discovery.model.AttributeType
+import com.egm.stellio.search.discovery.model.AttributeTypeInfo
+import com.egm.stellio.search.discovery.service.AttributeService
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.ResourceNotFoundException
import com.egm.stellio.shared.util.*
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/web/EntityTypeHandlerTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/discovery/web/EntityTypeHandlerTests.kt
similarity index 97%
rename from search-service/src/test/kotlin/com/egm/stellio/search/web/EntityTypeHandlerTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/discovery/web/EntityTypeHandlerTests.kt
index 4f8425445..d2f3770a6 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/web/EntityTypeHandlerTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/discovery/web/EntityTypeHandlerTests.kt
@@ -1,11 +1,11 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.discovery.web
import arrow.core.left
import arrow.core.right
-import com.egm.stellio.search.config.SearchProperties
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.model.AttributeType
-import com.egm.stellio.search.service.EntityTypeService
+import com.egm.stellio.search.common.config.SearchProperties
+import com.egm.stellio.search.discovery.model.*
+import com.egm.stellio.search.discovery.model.AttributeType
+import com.egm.stellio.search.discovery.service.EntityTypeService
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.ResourceNotFoundException
import com.egm.stellio.shared.util.*
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/listener/ObservationEventListenerTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/entity/listener/ObservationEventListenerTests.kt
similarity index 95%
rename from search-service/src/test/kotlin/com/egm/stellio/search/listener/ObservationEventListenerTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/entity/listener/ObservationEventListenerTests.kt
index ff5c18f1b..9f5a6dade 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/listener/ObservationEventListenerTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/entity/listener/ObservationEventListenerTests.kt
@@ -1,12 +1,12 @@
-package com.egm.stellio.search.listener
+package com.egm.stellio.search.entity.listener
import arrow.core.right
-import com.egm.stellio.search.model.NotUpdatedDetails
-import com.egm.stellio.search.model.UpdateOperationResult
-import com.egm.stellio.search.model.UpdateResult
-import com.egm.stellio.search.model.UpdatedDetails
-import com.egm.stellio.search.service.EntityEventService
-import com.egm.stellio.search.service.EntityPayloadService
+import com.egm.stellio.search.entity.model.NotUpdatedDetails
+import com.egm.stellio.search.entity.model.UpdateOperationResult
+import com.egm.stellio.search.entity.model.UpdateResult
+import com.egm.stellio.search.entity.model.UpdatedDetails
+import com.egm.stellio.search.entity.service.EntityEventService
+import com.egm.stellio.search.entity.service.EntityPayloadService
import com.egm.stellio.shared.model.ExpandedEntity
import com.egm.stellio.shared.model.NgsiLdEntity
import com.egm.stellio.shared.util.BEEHIVE_TYPE
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/model/EntityModelTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/entity/model/EntityModelTests.kt
similarity index 97%
rename from search-service/src/test/kotlin/com/egm/stellio/search/model/EntityModelTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/entity/model/EntityModelTests.kt
index 89d30032a..3ff05ab8d 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/model/EntityModelTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/entity/model/EntityModelTests.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.entity.model
import com.egm.stellio.search.support.EMPTY_JSON_PAYLOAD
import com.egm.stellio.shared.util.AuthContextModel
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/model/UpdateResultTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/entity/model/UpdateResultTests.kt
similarity index 98%
rename from search-service/src/test/kotlin/com/egm/stellio/search/model/UpdateResultTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/entity/model/UpdateResultTests.kt
index 69cc52ba3..d46951752 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/model/UpdateResultTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/entity/model/UpdateResultTests.kt
@@ -1,4 +1,4 @@
-package com.egm.stellio.search.model
+package com.egm.stellio.search.entity.model
import com.egm.stellio.shared.util.toUri
import org.junit.jupiter.api.Assertions.assertFalse
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/service/EntityEventServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityEventServiceTests.kt
similarity index 98%
rename from search-service/src/test/kotlin/com/egm/stellio/search/service/EntityEventServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityEventServiceTests.kt
index 851f242ef..4f768c839 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/service/EntityEventServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityEventServiceTests.kt
@@ -1,10 +1,10 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.entity.service
import arrow.core.right
-import com.egm.stellio.search.model.EntityPayload
-import com.egm.stellio.search.model.UpdateOperationResult
-import com.egm.stellio.search.model.UpdateResult
-import com.egm.stellio.search.model.UpdatedDetails
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.model.UpdateOperationResult
+import com.egm.stellio.search.entity.model.UpdateResult
+import com.egm.stellio.search.entity.model.UpdatedDetails
import com.egm.stellio.search.support.EMPTY_PAYLOAD
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.AQUAC_COMPOUND_CONTEXT
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/service/EntityOperationServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityOperationServiceTests.kt
similarity index 95%
rename from search-service/src/test/kotlin/com/egm/stellio/search/service/EntityOperationServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityOperationServiceTests.kt
index 27bbc5cbd..9736309fc 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/service/EntityOperationServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityOperationServiceTests.kt
@@ -1,14 +1,14 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.entity.service
import arrow.core.left
import arrow.core.right
-import com.egm.stellio.search.authorization.AuthorizationService
-import com.egm.stellio.search.model.EMPTY_UPDATE_RESULT
-import com.egm.stellio.search.model.EntityPayload
-import com.egm.stellio.search.model.NotUpdatedDetails
-import com.egm.stellio.search.model.UpdateResult
-import com.egm.stellio.search.web.BatchEntityError
-import com.egm.stellio.search.web.BatchEntitySuccess
+import com.egm.stellio.search.authorization.service.AuthorizationService
+import com.egm.stellio.search.entity.model.EMPTY_UPDATE_RESULT
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.model.NotUpdatedDetails
+import com.egm.stellio.search.entity.model.UpdateResult
+import com.egm.stellio.search.entity.web.BatchEntityError
+import com.egm.stellio.search.entity.web.BatchEntitySuccess
import com.egm.stellio.shared.model.BadRequestDataException
import com.egm.stellio.shared.model.ExpandedEntity
import com.egm.stellio.shared.model.InternalErrorException
@@ -35,7 +35,7 @@ class EntityOperationServiceTests {
private lateinit var entityPayloadService: EntityPayloadService
@MockkBean(relaxed = true)
- private lateinit var temporalEntityAttributeService: TemporalEntityAttributeService
+ private lateinit var entityAttributeService: EntityAttributeService
@MockkBean
private lateinit var authorizationService: AuthorizationService
@@ -308,7 +308,7 @@ class EntityOperationServiceTests {
@Test
fun `batch replace should ask to replace entities`() = runTest {
coEvery {
- temporalEntityAttributeService.deleteTemporalAttributesOfEntity(any())
+ entityAttributeService.deleteTemporalAttributesOfEntity(any())
} returns Unit.right()
coEvery {
entityPayloadService.appendAttributes(any(), any(), any(), any())
@@ -329,8 +329,8 @@ class EntityOperationServiceTests {
)
assertTrue(batchOperationResult.errors.isEmpty())
- coVerify { temporalEntityAttributeService.deleteTemporalAttributesOfEntity(firstEntityURI) }
- coVerify { temporalEntityAttributeService.deleteTemporalAttributesOfEntity(secondEntityURI) }
+ coVerify { entityAttributeService.deleteTemporalAttributesOfEntity(firstEntityURI) }
+ coVerify { entityAttributeService.deleteTemporalAttributesOfEntity(secondEntityURI) }
coVerify {
entityPayloadService.appendAttributes(eq(firstEntityURI), any(), false, sub)
}
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/service/EntityQueryServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityPayloadServiceQueryTests.kt
similarity index 97%
rename from search-service/src/test/kotlin/com/egm/stellio/search/service/EntityQueryServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityPayloadServiceQueryTests.kt
index 8afce0713..8faec4ac6 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/service/EntityQueryServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityPayloadServiceQueryTests.kt
@@ -1,10 +1,12 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.entity.service
import arrow.core.right
-import com.egm.stellio.search.model.EntitiesQuery
-import com.egm.stellio.search.model.EntityPayload
+import com.egm.stellio.search.common.config.SearchProperties
+import com.egm.stellio.search.entity.model.EntitiesQuery
+import com.egm.stellio.search.entity.model.EntityPayload
import com.egm.stellio.search.support.WithKafkaContainer
import com.egm.stellio.search.support.WithTimescaleContainer
+import com.egm.stellio.search.temporal.service.AttributeInstanceService
import com.egm.stellio.shared.model.GeoQuery
import com.egm.stellio.shared.model.PaginationQuery
import com.egm.stellio.shared.util.*
@@ -20,6 +22,7 @@ import org.junit.jupiter.api.Test
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.CsvSource
import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.data.r2dbc.core.R2dbcEntityTemplate
import org.springframework.data.relational.core.query.Criteria
@@ -30,7 +33,8 @@ import java.net.URI
@SpringBootTest
@ActiveProfiles("test")
-class EntityQueryServiceTests : WithTimescaleContainer, WithKafkaContainer {
+@EnableConfigurationProperties(SearchProperties::class)
+class EntityPayloadServiceQueryTests : WithTimescaleContainer, WithKafkaContainer {
@Autowired
private lateinit var entityPayloadService: EntityPayloadService
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/service/EntityPayloadServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityPayloadServiceTests.kt
similarity index 91%
rename from search-service/src/test/kotlin/com/egm/stellio/search/service/EntityPayloadServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityPayloadServiceTests.kt
index 6aa967ea6..b969f777a 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/service/EntityPayloadServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityPayloadServiceTests.kt
@@ -1,12 +1,12 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.entity.service
import arrow.core.right
-import com.egm.stellio.search.model.*
+import com.egm.stellio.search.common.util.deserializeAsMap
+import com.egm.stellio.search.entity.model.*
import com.egm.stellio.search.support.EMPTY_PAYLOAD
import com.egm.stellio.search.support.WithKafkaContainer
import com.egm.stellio.search.support.WithTimescaleContainer
import com.egm.stellio.search.support.buildSapAttribute
-import com.egm.stellio.search.util.deserializeAsMap
import com.egm.stellio.shared.model.AlreadyExistsException
import com.egm.stellio.shared.model.ResourceNotFoundException
import com.egm.stellio.shared.util.*
@@ -43,7 +43,7 @@ class EntityPayloadServiceTests : WithTimescaleContainer, WithKafkaContainer {
private lateinit var entityPayloadService: EntityPayloadService
@MockkBean
- private lateinit var temporalEntityAttributeService: TemporalEntityAttributeService
+ private lateinit var entityAttributeService: EntityAttributeService
@Autowired
private lateinit var r2dbcEntityTemplate: R2dbcEntityTemplate
@@ -143,7 +143,7 @@ class EntityPayloadServiceTests : WithTimescaleContainer, WithKafkaContainer {
@Test
fun `it should only create an entity payload for a minimal entity`() = runTest {
coEvery {
- temporalEntityAttributeService.createEntityTemporalReferences(any(), any(), any(), any(), any())
+ entityAttributeService.createEntityAttributes(any(), any(), any(), any(), any())
} returns Unit.right()
val (expandedEntity, ngsiLdEntity) =
@@ -162,7 +162,7 @@ class EntityPayloadServiceTests : WithTimescaleContainer, WithKafkaContainer {
}
coVerify {
- temporalEntityAttributeService.createEntityTemporalReferences(
+ entityAttributeService.createEntityAttributes(
any(),
any(),
emptyList(),
@@ -194,16 +194,16 @@ class EntityPayloadServiceTests : WithTimescaleContainer, WithKafkaContainer {
@Test
fun `it should merge an entity`() = runTest {
coEvery {
- temporalEntityAttributeService.createEntityTemporalReferences(any(), any(), any(), any(), any())
+ entityAttributeService.createEntityAttributes(any(), any(), any(), any(), any())
} returns Unit.right()
coEvery {
- temporalEntityAttributeService.mergeEntityAttributes(any(), any(), any(), any(), any(), any())
+ entityAttributeService.mergeEntityAttributes(any(), any(), any(), any(), any(), any())
} returns UpdateResult(
listOf(UpdatedDetails(INCOMING_PROPERTY, null, UpdateOperationResult.APPENDED)),
emptyList()
).right()
coEvery {
- temporalEntityAttributeService.getForEntity(any(), any(), any())
+ entityAttributeService.getForEntity(any(), any(), any())
} returns emptyList()
val (expandedEntity, ngsiLdEntity) =
@@ -230,14 +230,14 @@ class EntityPayloadServiceTests : WithTimescaleContainer, WithKafkaContainer {
}
coVerify {
- temporalEntityAttributeService.createEntityTemporalReferences(
+ entityAttributeService.createEntityAttributes(
any(),
any(),
emptyList(),
any(),
eq("0123456789-1234-5678-987654321")
)
- temporalEntityAttributeService.mergeEntityAttributes(
+ entityAttributeService.mergeEntityAttributes(
eq(beehiveTestCId),
any(),
any(),
@@ -245,7 +245,7 @@ class EntityPayloadServiceTests : WithTimescaleContainer, WithKafkaContainer {
any(),
eq("0123456789-1234-5678-987654321")
)
- temporalEntityAttributeService.getForEntity(
+ entityAttributeService.getForEntity(
eq(beehiveTestCId),
emptySet(),
emptySet()
@@ -256,16 +256,16 @@ class EntityPayloadServiceTests : WithTimescaleContainer, WithKafkaContainer {
@Test
fun `it should merge an entity with new types`() = runTest {
coEvery {
- temporalEntityAttributeService.createEntityTemporalReferences(any(), any(), any(), any(), any())
+ entityAttributeService.createEntityAttributes(any(), any(), any(), any(), any())
} returns Unit.right()
coEvery {
- temporalEntityAttributeService.mergeEntityAttributes(any(), any(), any(), any(), any(), any())
+ entityAttributeService.mergeEntityAttributes(any(), any(), any(), any(), any(), any())
} returns UpdateResult(
listOf(UpdatedDetails(INCOMING_PROPERTY, null, UpdateOperationResult.APPENDED)),
emptyList()
).right()
coEvery {
- temporalEntityAttributeService.getForEntity(any(), any(), any())
+ entityAttributeService.getForEntity(any(), any(), any())
} returns emptyList()
val (expandedEntity, ngsiLdEntity) =
@@ -298,19 +298,19 @@ class EntityPayloadServiceTests : WithTimescaleContainer, WithKafkaContainer {
@Test
fun `it should merge an entity with new types and scopes`() = runTest {
coEvery {
- temporalEntityAttributeService.createEntityTemporalReferences(any(), any(), any(), any(), any())
+ entityAttributeService.createEntityAttributes(any(), any(), any(), any(), any())
} returns Unit.right()
coEvery {
- temporalEntityAttributeService.mergeEntityAttributes(any(), any(), any(), any(), any(), any())
+ entityAttributeService.mergeEntityAttributes(any(), any(), any(), any(), any(), any())
} returns UpdateResult(
listOf(UpdatedDetails(INCOMING_PROPERTY, null, UpdateOperationResult.APPENDED)),
emptyList()
).right()
coEvery {
- temporalEntityAttributeService.partialUpdateEntityAttribute(any(), any(), any(), any())
+ entityAttributeService.partialUpdateEntityAttribute(any(), any(), any(), any())
} returns EMPTY_UPDATE_RESULT.right()
coEvery {
- temporalEntityAttributeService.getForEntity(any(), any(), any())
+ entityAttributeService.getForEntity(any(), any(), any())
} returns emptyList()
val (expandedEntity, ngsiLdEntity) =
@@ -353,9 +353,9 @@ class EntityPayloadServiceTests : WithTimescaleContainer, WithKafkaContainer {
fun `it should replace an entity`() = runTest {
val beehiveURI = "urn:ngsi-ld:BeeHive:TESTC".toUri()
coEvery {
- temporalEntityAttributeService.createEntityTemporalReferences(any(), any(), any(), any(), any())
+ entityAttributeService.createEntityAttributes(any(), any(), any(), any(), any())
} returns Unit.right()
- coEvery { temporalEntityAttributeService.deleteTemporalAttributesOfEntity(any()) } returns Unit.right()
+ coEvery { entityAttributeService.deleteTemporalAttributesOfEntity(any()) } returns Unit.right()
val (expandedEntity, ngsiLdEntity) =
loadAndPrepareSampleData("beehive_minimal.jsonld").shouldSucceedAndResult()
@@ -382,8 +382,8 @@ class EntityPayloadServiceTests : WithTimescaleContainer, WithKafkaContainer {
}
coVerify {
- temporalEntityAttributeService.deleteTemporalAttributesOfEntity(beehiveURI)
- temporalEntityAttributeService.createEntityTemporalReferences(
+ entityAttributeService.deleteTemporalAttributesOfEntity(beehiveURI)
+ entityAttributeService.createEntityAttributes(
any(),
any(),
emptyList(),
@@ -395,9 +395,9 @@ class EntityPayloadServiceTests : WithTimescaleContainer, WithKafkaContainer {
@Test
fun `it should replace an attribute`() = runTest {
- coEvery { temporalEntityAttributeService.getForEntity(any(), any(), any()) } returns emptyList()
+ coEvery { entityAttributeService.getForEntity(any(), any(), any()) } returns emptyList()
coEvery {
- temporalEntityAttributeService.replaceEntityAttribute(any(), any(), any(), any(), any())
+ entityAttributeService.replaceEntityAttribute(any(), any(), any(), any(), any())
} returns UpdateResult(
updated = listOf(UpdatedDetails(INCOMING_PROPERTY, null, UpdateOperationResult.REPLACED)),
notUpdated = emptyList()
@@ -658,7 +658,7 @@ class EntityPayloadServiceTests : WithTimescaleContainer, WithKafkaContainer {
@Test
fun `it should delete an entity payload`() = runTest {
- coEvery { temporalEntityAttributeService.deleteTemporalAttributesOfEntity(any()) } returns Unit.right()
+ coEvery { entityAttributeService.deleteTemporalAttributesOfEntity(any()) } returns Unit.right()
loadMinimalEntity(entity01Uri, setOf(BEEHIVE_TYPE))
.sampleDataToNgsiLdEntity()
@@ -691,10 +691,10 @@ class EntityPayloadServiceTests : WithTimescaleContainer, WithKafkaContainer {
@Test
fun `it should remove the scopes from an entity`() = runTest {
coEvery {
- temporalEntityAttributeService.addAttribute(any(), any(), any(), any(), any(), any())
+ entityAttributeService.addAttribute(any(), any(), any(), any(), any(), any())
} returns Unit.right()
coEvery {
- temporalEntityAttributeService.getForEntity(any(), any(), any())
+ entityAttributeService.getForEntity(any(), any(), any())
} returns emptyList()
loadSampleData("beehive_with_scope.jsonld")
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityQueryServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityQueryServiceTests.kt
new file mode 100644
index 000000000..9c51a6175
--- /dev/null
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/entity/service/EntityQueryServiceTests.kt
@@ -0,0 +1,86 @@
+package com.egm.stellio.search.entity.service
+
+import arrow.core.left
+import arrow.core.right
+import com.egm.stellio.search.support.*
+import com.egm.stellio.shared.model.ResourceNotFoundException
+import com.egm.stellio.shared.util.*
+import com.ninjasquad.springmockk.MockkBean
+import io.mockk.coEvery
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runTest
+import org.junit.jupiter.api.Assertions.*
+import org.junit.jupiter.api.Test
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.boot.test.context.SpringBootTest
+import org.springframework.test.context.ActiveProfiles
+import java.net.URI
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = [EntityQueryService::class])
+@ActiveProfiles("test")
+@ExperimentalCoroutinesApi
+class EntityQueryServiceTests {
+
+ @Autowired
+ private lateinit var queryService: EntityQueryService
+
+ @MockkBean
+ private lateinit var entityPayloadService: EntityPayloadService
+
+ private val entityUri = "urn:ngsi-ld:BeeHive:TESTC".toUri()
+
+ @Test
+ fun `it should return a JSON-LD entity when querying by id`() = runTest {
+ coEvery { entityPayloadService.retrieve(any()) } returns gimmeEntityPayload().right()
+
+ queryService.queryEntity(entityUri)
+ .shouldSucceedWith {
+ assertEquals(entityUri.toString(), it.id)
+ assertEquals(listOf(BEEHIVE_TYPE), it.types)
+ assertEquals(7, it.members.size)
+ }
+ }
+
+ @Test
+ fun `it should return an API exception if no entity exists with the given id`() = runTest {
+ coEvery { entityPayloadService.retrieve(any()) } returns ResourceNotFoundException("").left()
+
+ queryService.queryEntity(entityUri)
+ .shouldFail {
+ assertTrue(it is ResourceNotFoundException)
+ }
+ }
+
+ @Test
+ fun `it should return a list of JSON-LD entities when querying entities`() = runTest {
+ coEvery { entityPayloadService.queryEntities(any(), any()) } returns listOf(entityUri)
+ coEvery { entityPayloadService.queryEntitiesCount(any(), any()) } returns 1.right()
+ coEvery { entityPayloadService.retrieve(any>()) } returns listOf(gimmeEntityPayload())
+
+ queryService.queryEntities(buildDefaultQueryParams()) { null }
+ .shouldSucceedWith {
+ assertEquals(1, it.second)
+ assertEquals(entityUri.toString(), it.first[0].id)
+ assertEquals(listOf(BEEHIVE_TYPE), it.first[0].types)
+ assertEquals(7, it.first[0].members.size)
+ }
+ }
+
+ @Test
+ fun `it should return an empty list if no entity matched the query`() = runTest {
+ coEvery { entityPayloadService.queryEntities(any(), any()) } returns emptyList()
+ coEvery { entityPayloadService.queryEntitiesCount(any(), any()) } returns 0.right()
+
+ queryService.queryEntities(buildDefaultQueryParams()) { null }
+ .shouldSucceedWith {
+ assertEquals(0, it.second)
+ assertTrue(it.first.isEmpty())
+ }
+ }
+
+ private fun gimmeEntityPayload() =
+ gimmeEntityPayload(
+ entityId = entityUri,
+ payload = loadSampleData("beehive_expanded.jsonld")
+ )
+}
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/service/TemporalEntityAttributeServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/entity/service/TemporalEntityAttributeServiceTests.kt
similarity index 85%
rename from search-service/src/test/kotlin/com/egm/stellio/search/service/TemporalEntityAttributeServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/entity/service/TemporalEntityAttributeServiceTests.kt
index 511b12d5b..6653bc1d3 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/service/TemporalEntityAttributeServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/entity/service/TemporalEntityAttributeServiceTests.kt
@@ -1,10 +1,15 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.entity.service
import arrow.core.right
-import com.egm.stellio.search.model.*
+import com.egm.stellio.search.entity.model.AttributeMetadata
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
+import com.egm.stellio.search.entity.model.UpdateOperationResult
import com.egm.stellio.search.support.EMPTY_JSON_PAYLOAD
import com.egm.stellio.search.support.WithKafkaContainer
import com.egm.stellio.search.support.WithTimescaleContainer
+import com.egm.stellio.search.temporal.model.AttributeInstance
+import com.egm.stellio.search.temporal.service.AttributeInstanceService
import com.egm.stellio.shared.model.ResourceNotFoundException
import com.egm.stellio.shared.model.toNgsiLdAttribute
import com.egm.stellio.shared.model.toNgsiLdAttributes
@@ -38,7 +43,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
@Autowired
@SpykBean
- private lateinit var temporalEntityAttributeService: TemporalEntityAttributeService
+ private lateinit var entityAttributeService: EntityAttributeService
@MockkBean
private lateinit var attributeInstanceService: AttributeInstanceService
@@ -91,10 +96,10 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
val temporalEntityAttributes =
- temporalEntityAttributeService.getForEntity(
+ entityAttributeService.getForEntity(
beehiveTestDId,
setOf(
INCOMING_PROPERTY,
@@ -115,13 +120,13 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(
+ entityAttributeService.createEntityAttributes(
rawEntity,
APIC_COMPOUND_CONTEXTS,
"0123456789-1234-5678-987654321"
).shouldSucceed()
- val teas = temporalEntityAttributeService.getForEntity(beehiveTestCId, emptySet(), emptySet())
+ val teas = entityAttributeService.getForEntity(beehiveTestCId, emptySet(), emptySet())
assertEquals(4, teas.size)
coVerify {
@@ -167,12 +172,12 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(
+ entityAttributeService.createEntityAttributes(
rawEntity,
APIC_COMPOUND_CONTEXTS
).shouldSucceed()
- val teas = temporalEntityAttributeService.getForEntity(beehiveTestCId, emptySet(), emptySet())
+ val teas = entityAttributeService.getForEntity(beehiveTestCId, emptySet(), emptySet())
assertEquals(2, teas.size)
coVerify {
@@ -223,13 +228,13 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
} throws RuntimeException("Unexpected DB error!")
assertThrows("it should have thrown a RuntimeException") {
- temporalEntityAttributeService.createEntityTemporalReferences(
+ entityAttributeService.createEntityAttributes(
rawEntity,
APIC_COMPOUND_CONTEXTS
).shouldSucceed()
}
- val teas = temporalEntityAttributeService.getForEntity(
+ val teas = entityAttributeService.getForEntity(
"urn:ngsi-ld:BeeHive:TESTC".toUri(),
emptySet(),
emptySet()
@@ -243,10 +248,10 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
.shouldSucceed()
- val temporalEntityAttribute = temporalEntityAttributeService.getForEntityAndAttribute(
+ val temporalEntityAttribute = entityAttributeService.getForEntityAndAttribute(
beehiveTestCId,
INCOMING_PROPERTY
).shouldSucceedAndResult()
@@ -255,7 +260,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
val newProperty = loadSampleData("fragments/beehive_new_incoming_property.json")
val expandedAttribute = expandAttribute(newProperty, APIC_COMPOUND_CONTEXTS)
val newNgsiLdProperty = expandedAttribute.toNgsiLdAttribute().shouldSucceedAndResult()
- temporalEntityAttributeService.replaceAttribute(
+ entityAttributeService.replaceAttribute(
temporalEntityAttribute,
newNgsiLdProperty,
AttributeMetadata(
@@ -272,7 +277,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
null
).shouldSucceed()
- temporalEntityAttributeService.getForEntityAndAttribute(
+ entityAttributeService.getForEntityAndAttribute(
beehiveTestCId,
INCOMING_PROPERTY
).shouldSucceedWith {
@@ -291,10 +296,10 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
.shouldSucceed()
- val temporalEntityAttribute = temporalEntityAttributeService.getForEntityAndAttribute(
+ val temporalEntityAttribute = entityAttributeService.getForEntityAndAttribute(
beehiveTestCId,
INCOMING_PROPERTY
).shouldSucceedAndResult()
@@ -302,7 +307,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
val mergedAt = ngsiLdDateTime()
val propertyToMerge = loadSampleData("fragments/beehive_mergeAttribute.json")
val expandedAttribute = expandAttribute(propertyToMerge, APIC_COMPOUND_CONTEXTS)
- temporalEntityAttributeService.mergeAttribute(
+ entityAttributeService.mergeAttribute(
temporalEntityAttribute,
INCOMING_PROPERTY,
AttributeMetadata(
@@ -337,7 +342,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
APIC_COMPOUND_CONTEXTS
)
- temporalEntityAttributeService.getForEntityAndAttribute(
+ entityAttributeService.getForEntityAndAttribute(
beehiveTestCId,
INCOMING_PROPERTY
).shouldSucceedWith {
@@ -355,14 +360,14 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
.shouldSucceed()
val createdAt = ngsiLdDateTime()
val attributesToMerge = loadSampleData("fragments/beehive_mergeAttributes.json")
val expandedAttributes = JsonLdUtils.expandAttributes(attributesToMerge, APIC_COMPOUND_CONTEXTS)
val ngsiLdAttributes = expandedAttributes.toMap().toNgsiLdAttributes().shouldSucceedAndResult()
- temporalEntityAttributeService.mergeEntityAttributes(
+ entityAttributeService.mergeEntityAttributes(
beehiveTestCId,
ngsiLdAttributes,
expandedAttributes,
@@ -379,7 +384,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
assertTrue(newAttributes.containsAll(listOf(OUTGOING_PROPERTY, TEMPERATURE_PROPERTY)))
}
- val teas = temporalEntityAttributeService.getForEntity(
+ val teas = entityAttributeService.getForEntity(
beehiveTestCId,
emptySet(),
emptySet()
@@ -421,7 +426,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
.shouldSucceed()
val createdAt = ngsiLdDateTime()
@@ -429,7 +434,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
val propertyToMerge = loadSampleData("fragments/beehive_mergeAttribute_without_observedAt.json")
val expandedAttributes = JsonLdUtils.expandAttributes(propertyToMerge, APIC_COMPOUND_CONTEXTS)
val ngsiLdAttributes = expandedAttributes.toMap().toNgsiLdAttributes().shouldSucceedAndResult()
- temporalEntityAttributeService.mergeEntityAttributes(
+ entityAttributeService.mergeEntityAttributes(
beehiveTestCId,
ngsiLdAttributes,
expandedAttributes,
@@ -460,7 +465,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
.shouldSucceed()
val replacedAt = ngsiLdDateTime()
@@ -468,7 +473,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
val expandedAttribute = expandAttribute(propertyToReplace, APIC_COMPOUND_CONTEXTS)
val ngsiLdAttribute = expandedAttribute.toNgsiLdAttribute().shouldSucceedAndResult()
- temporalEntityAttributeService.replaceEntityAttribute(
+ entityAttributeService.replaceEntityAttribute(
beehiveTestCId,
ngsiLdAttribute,
expandedAttribute,
@@ -476,7 +481,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
null
).shouldSucceed()
- temporalEntityAttributeService.getForEntityAndAttribute(
+ entityAttributeService.getForEntityAndAttribute(
beehiveTestCId,
INCOMING_PROPERTY
).shouldSucceedWith {
@@ -494,7 +499,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
.shouldSucceed()
val replacedAt = ngsiLdDateTime()
@@ -502,7 +507,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
val expandedAttribute = expandAttribute(propertyToReplace, APIC_COMPOUND_CONTEXTS)
val ngsiLdAttribute = expandedAttribute.toNgsiLdAttribute().shouldSucceedAndResult()
- temporalEntityAttributeService.replaceEntityAttribute(
+ entityAttributeService.replaceEntityAttribute(
beehiveTestCId,
ngsiLdAttribute,
expandedAttribute,
@@ -522,9 +527,9 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
- temporalEntityAttributeService.getForEntityAndAttribute(
+ entityAttributeService.getForEntityAndAttribute(
beehiveTestCId,
INCOMING_PROPERTY
).shouldSucceedWith { assertNotNull(it) }
@@ -536,9 +541,9 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
- temporalEntityAttributeService.getForEntityAndAttribute(
+ entityAttributeService.getForEntityAndAttribute(
beehiveTestCId,
INCOMING_PROPERTY,
"urn:ngsi-ld:Dataset:01234".toUri()
@@ -551,9 +556,9 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
- temporalEntityAttributeService.getForEntityAndAttribute(
+ entityAttributeService.getForEntityAndAttribute(
beehiveTestCId,
INCOMING_PROPERTY,
"urn:ngsi-ld:Dataset:Unknown".toUri()
@@ -569,9 +574,9 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
coEvery { attributeInstanceService.deleteInstancesOfAttribute(any(), any(), any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
- temporalEntityAttributeService.deleteTemporalAttribute(
+ entityAttributeService.deleteTemporalAttribute(
beehiveTestDId,
INCOMING_PROPERTY,
null
@@ -581,7 +586,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
attributeInstanceService.deleteInstancesOfAttribute(eq(beehiveTestDId), eq(INCOMING_PROPERTY), null)
}
- temporalEntityAttributeService.getForEntityAndAttribute(beehiveTestDId, INCOMING_PROPERTY)
+ entityAttributeService.getForEntityAndAttribute(beehiveTestDId, INCOMING_PROPERTY)
.shouldFail { assertInstanceOf(ResourceNotFoundException::class.java, it) }
}
@@ -592,9 +597,9 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
coEvery { attributeInstanceService.deleteAllInstancesOfAttribute(any(), any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
- temporalEntityAttributeService.deleteTemporalAttribute(
+ entityAttributeService.deleteTemporalAttribute(
beehiveTestCId,
INCOMING_PROPERTY,
null,
@@ -605,7 +610,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
attributeInstanceService.deleteAllInstancesOfAttribute(eq(beehiveTestCId), eq(INCOMING_PROPERTY))
}
- temporalEntityAttributeService.getForEntityAndAttribute(beehiveTestCId, INCOMING_PROPERTY)
+ entityAttributeService.getForEntityAndAttribute(beehiveTestCId, INCOMING_PROPERTY)
.shouldFail { assertInstanceOf(ResourceNotFoundException::class.java, it) }
}
@@ -615,9 +620,9 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
- temporalEntityAttributeService.checkEntityAndAttributeExistence(beehiveTestCId, INCOMING_PROPERTY)
+ entityAttributeService.checkEntityAndAttributeExistence(beehiveTestCId, INCOMING_PROPERTY)
.shouldSucceed()
}
@@ -627,9 +632,9 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
- val result = temporalEntityAttributeService.checkEntityAndAttributeExistence(beehiveTestCId, "speed")
+ val result = entityAttributeService.checkEntityAndAttributeExistence(beehiveTestCId, "speed")
result.fold(
{ assertEquals("Attribute speed (default datasetId) was not found", it.message) },
@@ -639,7 +644,7 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
@Test
fun `it should return a left entity not found if entity does not exist`() = runTest {
- temporalEntityAttributeService.checkEntityAndAttributeExistence(
+ entityAttributeService.checkEntityAndAttributeExistence(
"urn:ngsi-ld:Entity:01".toUri(),
"speed"
).fold(
@@ -654,11 +659,11 @@ class TemporalEntityAttributeServiceTests : WithTimescaleContainer, WithKafkaCon
coEvery { attributeInstanceService.create(any()) } returns Unit.right()
- temporalEntityAttributeService.createEntityTemporalReferences(rawEntity, APIC_COMPOUND_CONTEXTS)
+ entityAttributeService.createEntityAttributes(rawEntity, APIC_COMPOUND_CONTEXTS)
.shouldSucceed()
val temporalEntityAttributes =
- temporalEntityAttributeService.getForEntity(
+ entityAttributeService.getForEntity(
beehiveTestCId,
emptySet(),
setOf("urn:ngsi-ld:Dataset:01234")
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/web/EntityHandlerTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/entity/web/EntityHandlerTests.kt
similarity index 99%
rename from search-service/src/test/kotlin/com/egm/stellio/search/web/EntityHandlerTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/entity/web/EntityHandlerTests.kt
index 3f555a4c4..da66d79be 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/web/EntityHandlerTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/entity/web/EntityHandlerTests.kt
@@ -1,13 +1,13 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.entity.web
import arrow.core.left
import arrow.core.right
-import com.egm.stellio.search.authorization.AuthorizationService
-import com.egm.stellio.search.config.SearchProperties
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.service.EntityEventService
-import com.egm.stellio.search.service.EntityPayloadService
-import com.egm.stellio.search.service.QueryService
+import com.egm.stellio.search.authorization.service.AuthorizationService
+import com.egm.stellio.search.common.config.SearchProperties
+import com.egm.stellio.search.entity.model.*
+import com.egm.stellio.search.entity.service.EntityEventService
+import com.egm.stellio.search.entity.service.EntityPayloadService
+import com.egm.stellio.search.entity.service.EntityQueryService
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.*
@@ -62,7 +62,7 @@ class EntityHandlerTests {
private lateinit var entityPayloadService: EntityPayloadService
@MockkBean
- private lateinit var queryService: QueryService
+ private lateinit var queryService: EntityQueryService
@MockkBean(relaxed = true)
private lateinit var authorizationService: AuthorizationService
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/web/EntityOperationHandlerTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/entity/web/EntityOperationHandlerTests.kt
similarity index 98%
rename from search-service/src/test/kotlin/com/egm/stellio/search/web/EntityOperationHandlerTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/entity/web/EntityOperationHandlerTests.kt
index 1ee376b73..304fa39e0 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/web/EntityOperationHandlerTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/entity/web/EntityOperationHandlerTests.kt
@@ -1,15 +1,15 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.entity.web
import arrow.core.left
import arrow.core.right
-import com.egm.stellio.search.authorization.AuthorizationService
-import com.egm.stellio.search.config.SearchProperties
-import com.egm.stellio.search.model.EMPTY_UPDATE_RESULT
-import com.egm.stellio.search.model.EntityPayload
-import com.egm.stellio.search.model.UpdateResult
-import com.egm.stellio.search.service.EntityOperationService
-import com.egm.stellio.search.service.EntityPayloadService
-import com.egm.stellio.search.service.QueryService
+import com.egm.stellio.search.authorization.service.AuthorizationService
+import com.egm.stellio.search.common.config.SearchProperties
+import com.egm.stellio.search.entity.model.EMPTY_UPDATE_RESULT
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.model.UpdateResult
+import com.egm.stellio.search.entity.service.EntityOperationService
+import com.egm.stellio.search.entity.service.EntityPayloadService
+import com.egm.stellio.search.entity.service.EntityQueryService
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.AccessDeniedException
import com.egm.stellio.shared.model.ExpandedEntity
@@ -51,7 +51,7 @@ class EntityOperationHandlerTests {
private lateinit var entityPayloadService: EntityPayloadService
@MockkBean
- private lateinit var queryService: QueryService
+ private lateinit var queryService: EntityQueryService
@MockkBean
private lateinit var authorizationService: AuthorizationService
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/scope/ScopeServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/scope/ScopeServiceTests.kt
index 11cfd976b..3ba52d1e7 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/scope/ScopeServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/scope/ScopeServiceTests.kt
@@ -1,12 +1,16 @@
package com.egm.stellio.search.scope
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.model.AttributeInstance.TemporalProperty
-import com.egm.stellio.search.service.EntityPayloadService
+import com.egm.stellio.search.entity.model.EntitiesQuery
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.model.OperationType
+import com.egm.stellio.search.entity.service.EntityPayloadService
import com.egm.stellio.search.support.WithKafkaContainer
import com.egm.stellio.search.support.WithTimescaleContainer
import com.egm.stellio.search.support.buildDefaultTestTemporalQuery
-import com.egm.stellio.search.util.toExpandedAttributeInstance
+import com.egm.stellio.search.temporal.model.AttributeInstance.TemporalProperty
+import com.egm.stellio.search.temporal.model.TemporalEntitiesQuery
+import com.egm.stellio.search.temporal.model.TemporalQuery
+import com.egm.stellio.search.temporal.util.toExpandedAttributeInstance
import com.egm.stellio.shared.model.PaginationQuery
import com.egm.stellio.shared.model.getScopes
import com.egm.stellio.shared.util.*
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/scope/TemporalScopeBuilderTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/scope/TemporalScopeBuilderTests.kt
index f736e3abf..97798d43b 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/scope/TemporalScopeBuilderTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/scope/TemporalScopeBuilderTests.kt
@@ -1,11 +1,11 @@
package com.egm.stellio.search.scope
-import com.egm.stellio.search.model.AttributeInstance.TemporalProperty
-import com.egm.stellio.search.model.TemporalEntitiesQuery
-import com.egm.stellio.search.model.TemporalQuery
import com.egm.stellio.search.support.buildDefaultQueryParams
import com.egm.stellio.search.support.buildDefaultTestTemporalQuery
import com.egm.stellio.search.support.gimmeEntityPayload
+import com.egm.stellio.search.temporal.model.AttributeInstance.TemporalProperty
+import com.egm.stellio.search.temporal.model.TemporalEntitiesQuery
+import com.egm.stellio.search.temporal.model.TemporalQuery
import com.egm.stellio.shared.util.JsonUtils
import com.egm.stellio.shared.util.assertJsonPayloadsAreEqual
import com.egm.stellio.shared.util.loadSampleData
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/support/BusinessObjectsFactory.kt b/search-service/src/test/kotlin/com/egm/stellio/search/support/BusinessObjectsFactory.kt
index 508c350f6..b4613eacc 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/support/BusinessObjectsFactory.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/support/BusinessObjectsFactory.kt
@@ -1,6 +1,12 @@
package com.egm.stellio.search.support
-import com.egm.stellio.search.model.*
+import com.egm.stellio.search.entity.model.AttributeMetadata
+import com.egm.stellio.search.entity.model.EntitiesQuery
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
+import com.egm.stellio.search.temporal.model.AttributeInstance
+import com.egm.stellio.search.temporal.model.TemporalEntitiesQuery
+import com.egm.stellio.search.temporal.model.TemporalQuery
import com.egm.stellio.shared.model.ExpandedTerm
import com.egm.stellio.shared.model.PaginationQuery
import com.egm.stellio.shared.model.addNonReifiedTemporalProperty
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/support/TestUtils.kt b/search-service/src/test/kotlin/com/egm/stellio/search/support/TestUtils.kt
index b83ab9dc0..60a89b76b 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/support/TestUtils.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/support/TestUtils.kt
@@ -1,9 +1,9 @@
package com.egm.stellio.search.support
-import com.egm.stellio.search.model.AttributeInstance
-import com.egm.stellio.search.model.TemporalEntityAttribute
-import com.egm.stellio.search.model.TemporalQuery
-import com.egm.stellio.search.model.TemporalQuery.Aggregate
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
+import com.egm.stellio.search.temporal.model.AttributeInstance
+import com.egm.stellio.search.temporal.model.TemporalQuery
+import com.egm.stellio.search.temporal.model.TemporalQuery.Aggregate
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.NgsiLdAttribute
import com.egm.stellio.shared.model.toNgsiLdAttributes
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/service/AggregatedQueryServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/service/AggregatedTemporalQueryServiceTests.kt
similarity index 97%
rename from search-service/src/test/kotlin/com/egm/stellio/search/service/AggregatedQueryServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/temporal/service/AggregatedTemporalQueryServiceTests.kt
index ac8eab234..8f7c956f0 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/service/AggregatedQueryServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/service/AggregatedTemporalQueryServiceTests.kt
@@ -1,7 +1,9 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.temporal.service
-import com.egm.stellio.search.model.*
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
+import com.egm.stellio.search.entity.service.EntityAttributeService
import com.egm.stellio.search.support.*
+import com.egm.stellio.search.temporal.model.*
import com.egm.stellio.shared.model.OperationNotSupportedException
import com.egm.stellio.shared.util.*
import kotlinx.coroutines.test.runTest
@@ -25,13 +27,13 @@ import java.util.UUID
@SpringBootTest
@ActiveProfiles("test")
-class AggregatedQueryServiceTests : WithTimescaleContainer, WithKafkaContainer {
+class AggregatedTemporalQueryServiceTests : WithTimescaleContainer, WithKafkaContainer {
@Autowired
private lateinit var attributeInstanceService: AttributeInstanceService
@Autowired
- private lateinit var temporalEntityAttributeService: TemporalEntityAttributeService
+ private lateinit var entityAttributeService: EntityAttributeService
@Autowired
private lateinit var r2dbcEntityTemplate: R2dbcEntityTemplate
@@ -438,7 +440,7 @@ class AggregatedQueryServiceTests : WithTimescaleContainer, WithKafkaContainer {
createdAt = now,
payload = EMPTY_JSON_PAYLOAD
)
- temporalEntityAttributeService.create(temporalEntityAttribute)
+ entityAttributeService.create(temporalEntityAttribute)
return temporalEntityAttribute
}
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/service/AttributeInstanceServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/service/AttributeInstanceServiceTests.kt
similarity index 97%
rename from search-service/src/test/kotlin/com/egm/stellio/search/service/AttributeInstanceServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/temporal/service/AttributeInstanceServiceTests.kt
index f9469ffae..7fce30aef 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/service/AttributeInstanceServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/service/AttributeInstanceServiceTests.kt
@@ -1,8 +1,11 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.temporal.service
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.model.TemporalQuery.Timerel
+import com.egm.stellio.search.entity.model.AttributeMetadata
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
+import com.egm.stellio.search.entity.service.EntityAttributeService
import com.egm.stellio.search.support.*
+import com.egm.stellio.search.temporal.model.*
+import com.egm.stellio.search.temporal.model.TemporalQuery.Timerel
import com.egm.stellio.shared.model.ExpandedAttributes
import com.egm.stellio.shared.model.ResourceNotFoundException
import com.egm.stellio.shared.model.addNonReifiedTemporalProperty
@@ -50,7 +53,7 @@ class AttributeInstanceServiceTests : WithTimescaleContainer, WithKafkaContainer
private lateinit var attributeInstanceService: AttributeInstanceService
@Autowired
- private lateinit var temporalEntityAttributeService: TemporalEntityAttributeService
+ private lateinit var entityAttributeService: EntityAttributeService
@Autowired
private lateinit var databaseClient: DatabaseClient
@@ -78,7 +81,7 @@ class AttributeInstanceServiceTests : WithTimescaleContainer, WithKafkaContainer
)
runBlocking {
- temporalEntityAttributeService.create(incomingTemporalEntityAttribute)
+ entityAttributeService.create(incomingTemporalEntityAttribute)
}
outgoingTemporalEntityAttribute = TemporalEntityAttribute(
@@ -90,7 +93,7 @@ class AttributeInstanceServiceTests : WithTimescaleContainer, WithKafkaContainer
)
runBlocking {
- temporalEntityAttributeService.create(outgoingTemporalEntityAttribute)
+ entityAttributeService.create(outgoingTemporalEntityAttribute)
}
jsonTemporalEntityAttribute = TemporalEntityAttribute(
@@ -102,7 +105,7 @@ class AttributeInstanceServiceTests : WithTimescaleContainer, WithKafkaContainer
)
runBlocking {
- temporalEntityAttributeService.create(jsonTemporalEntityAttribute)
+ entityAttributeService.create(jsonTemporalEntityAttribute)
}
languageTemporalEntityAttribute = TemporalEntityAttribute(
@@ -114,7 +117,7 @@ class AttributeInstanceServiceTests : WithTimescaleContainer, WithKafkaContainer
)
runBlocking {
- temporalEntityAttributeService.create(languageTemporalEntityAttribute)
+ entityAttributeService.create(languageTemporalEntityAttribute)
}
vocabTemporalEntityAttribute = TemporalEntityAttribute(
@@ -126,7 +129,7 @@ class AttributeInstanceServiceTests : WithTimescaleContainer, WithKafkaContainer
)
runBlocking {
- temporalEntityAttributeService.create(vocabTemporalEntityAttribute)
+ entityAttributeService.create(vocabTemporalEntityAttribute)
}
}
@@ -281,7 +284,7 @@ class AttributeInstanceServiceTests : WithTimescaleContainer, WithKafkaContainer
payload = EMPTY_JSON_PAYLOAD
)
- temporalEntityAttributeService.create(temporalEntityAttribute2)
+ entityAttributeService.create(temporalEntityAttribute2)
(1..10).forEach { _ ->
val observedAt = Instant.now().atZone(ZoneOffset.UTC)
@@ -408,7 +411,7 @@ class AttributeInstanceServiceTests : WithTimescaleContainer, WithKafkaContainer
payload = EMPTY_JSON_PAYLOAD
)
- temporalEntityAttributeService.create(temporalEntityAttribute2)
+ entityAttributeService.create(temporalEntityAttribute2)
(1..10).forEach { _ ->
attributeInstanceService.create(gimmeNumericPropertyAttributeInstance(incomingTemporalEntityAttribute.id))
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/service/TemporalPaginationServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/service/TemporalPaginationServiceTests.kt
similarity index 94%
rename from search-service/src/test/kotlin/com/egm/stellio/search/service/TemporalPaginationServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/temporal/service/TemporalPaginationServiceTests.kt
index 763f14faf..09d953a6a 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/service/TemporalPaginationServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/service/TemporalPaginationServiceTests.kt
@@ -1,10 +1,13 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.temporal.service
-import com.egm.stellio.search.config.SearchProperties
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.service.TemporalPaginationService.getRangeAndPaginatedTEA
+import com.egm.stellio.search.common.config.SearchProperties
+import com.egm.stellio.search.entity.model.EntitiesQuery
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
import com.egm.stellio.search.support.EMPTY_JSON_PAYLOAD
import com.egm.stellio.search.support.buildDefaultTestTemporalQuery
+import com.egm.stellio.search.temporal.model.*
+import com.egm.stellio.search.temporal.service.TemporalPaginationService.getRangeAndPaginatedTEA
+import com.egm.stellio.search.temporal.util.TemporalEntityAttributeInstancesResult
import com.egm.stellio.shared.model.PaginationQuery
import com.egm.stellio.shared.util.APIC_COMPOUND_CONTEXTS
import com.egm.stellio.shared.util.INCOMING_PROPERTY
@@ -52,7 +55,7 @@ class TemporalPaginationServiceTests {
return SimplifiedAttributeInstanceResult(value = 1, time = time, temporalEntityAttribute = UUID.randomUUID())
}
- private val teaWithInstances: TEAWithInstances = mapOf(
+ private val teaWithInstances: TemporalEntityAttributeInstancesResult = mapOf(
teaIncoming to listOf(
getInstance(leastRecentTimestamp),
getInstance(leastRecentTimestamp.plusMinutes(1)),
@@ -69,7 +72,7 @@ class TemporalPaginationServiceTests {
)
)
- private val teaWithInstancesForLastN: TEAWithInstances = mapOf(
+ private val teaWithInstancesForLastN: TemporalEntityAttributeInstancesResult = mapOf(
teaIncoming to listOf(
getInstance(leastRecentTimestamp),
getInstance(leastRecentTimestamp.plusMinutes(1)),
@@ -280,7 +283,7 @@ class TemporalPaginationServiceTests {
withAggregatedValues = true
)
- val teaWithInstances: TEAWithInstances =
+ val teaWithInstances: TemporalEntityAttributeInstancesResult =
mapOf(teaIncoming to aggregationInstances, teaOutgoing to aggregationInstances)
val (newTeas, range) = getRangeAndPaginatedTEA(teaWithInstances, query)
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/service/QueryServiceTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/service/TemporalQueryServiceTests.kt
similarity index 83%
rename from search-service/src/test/kotlin/com/egm/stellio/search/service/QueryServiceTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/temporal/service/TemporalQueryServiceTests.kt
index fd86af44a..b09cef33b 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/service/QueryServiceTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/service/TemporalQueryServiceTests.kt
@@ -1,11 +1,14 @@
-package com.egm.stellio.search.service
+package com.egm.stellio.search.temporal.service
-import arrow.core.left
import arrow.core.right
-import com.egm.stellio.search.model.*
+import com.egm.stellio.search.entity.model.EntitiesQuery
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
+import com.egm.stellio.search.entity.service.EntityAttributeService
+import com.egm.stellio.search.entity.service.EntityPayloadService
import com.egm.stellio.search.scope.ScopeInstanceResult
import com.egm.stellio.search.scope.ScopeService
import com.egm.stellio.search.support.*
+import com.egm.stellio.search.temporal.model.*
import com.egm.stellio.shared.model.PaginationQuery
import com.egm.stellio.shared.model.ResourceNotFoundException
import com.egm.stellio.shared.util.*
@@ -25,13 +28,13 @@ import org.springframework.test.context.ActiveProfiles
import java.net.URI
import java.time.ZonedDateTime
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = [QueryService::class])
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = [TemporalQueryService::class])
@ActiveProfiles("test")
@ExperimentalCoroutinesApi
-class QueryServiceTests {
+class TemporalQueryServiceTests {
@Autowired
- private lateinit var queryService: QueryService
+ private lateinit var queryService: TemporalQueryService
@MockkBean
private lateinit var entityPayloadService: EntityPayloadService
@@ -43,64 +46,15 @@ class QueryServiceTests {
private lateinit var attributeInstanceService: AttributeInstanceService
@MockkBean
- private lateinit var temporalEntityAttributeService: TemporalEntityAttributeService
+ private lateinit var entityAttributeService: EntityAttributeService
private val now = ngsiLdDateTime()
private val entityUri = "urn:ngsi-ld:BeeHive:TESTC".toUri()
- @Test
- fun `it should return a JSON-LD entity when querying by id`() = runTest {
- coEvery { entityPayloadService.retrieve(any()) } returns gimmeEntityPayload().right()
-
- queryService.queryEntity(entityUri)
- .shouldSucceedWith {
- assertEquals(entityUri.toString(), it.id)
- assertEquals(listOf(BEEHIVE_TYPE), it.types)
- assertEquals(7, it.members.size)
- }
- }
-
- @Test
- fun `it should return an API exception if no entity exists with the given id`() = runTest {
- coEvery { entityPayloadService.retrieve(any()) } returns ResourceNotFoundException("").left()
-
- queryService.queryEntity(entityUri)
- .shouldFail {
- assertTrue(it is ResourceNotFoundException)
- }
- }
-
- @Test
- fun `it should return a list of JSON-LD entities when querying entities`() = runTest {
- coEvery { entityPayloadService.queryEntities(any(), any()) } returns listOf(entityUri)
- coEvery { entityPayloadService.queryEntitiesCount(any(), any()) } returns 1.right()
- coEvery { entityPayloadService.retrieve(any>()) } returns listOf(gimmeEntityPayload())
-
- queryService.queryEntities(buildDefaultQueryParams()) { null }
- .shouldSucceedWith {
- assertEquals(1, it.second)
- assertEquals(entityUri.toString(), it.first[0].id)
- assertEquals(listOf(BEEHIVE_TYPE), it.first[0].types)
- assertEquals(7, it.first[0].members.size)
- }
- }
-
- @Test
- fun `it should return an empty list if no entity matched the query`() = runTest {
- coEvery { entityPayloadService.queryEntities(any(), any()) } returns emptyList()
- coEvery { entityPayloadService.queryEntitiesCount(any(), any()) } returns 0.right()
-
- queryService.queryEntities(buildDefaultQueryParams()) { null }
- .shouldSucceedWith {
- assertEquals(0, it.second)
- assertTrue(it.first.isEmpty())
- }
- }
-
@Test
fun `it should return an API exception if the entity does not exist`() = runTest {
- coEvery { temporalEntityAttributeService.getForEntity(any(), any(), any()) } returns emptyList()
+ coEvery { entityAttributeService.getForEntity(any(), any(), any()) } returns emptyList()
queryService.queryTemporalEntity(
entityUri,
@@ -143,7 +97,7 @@ class QueryServiceTests {
)
}
- coEvery { temporalEntityAttributeService.getForEntity(any(), any(), any()) } returns teas
+ coEvery { entityAttributeService.getForEntity(any(), any(), any()) } returns teas
coEvery { entityPayloadService.retrieve(any()) } returns gimmeEntityPayload().right()
coEvery { scopeService.retrieveHistory(any(), any()) } returns emptyList().right()
coEvery {
@@ -172,7 +126,7 @@ class QueryServiceTests {
)
coVerify {
- temporalEntityAttributeService.getForEntity(entityUri, emptySet(), emptySet())
+ entityAttributeService.getForEntity(entityUri, emptySet(), emptySet())
attributeInstanceService.search(
match { temporalEntitiesQuery ->
temporalEntitiesQuery.temporalQuery.timerel == TemporalQuery.Timerel.AFTER &&
@@ -270,7 +224,7 @@ class QueryServiceTests {
coEvery { entityPayloadService.queryEntities(any(), any()) } returns listOf(entityUri)
coEvery {
- temporalEntityAttributeService.getForTemporalEntities(any(), any())
+ entityAttributeService.getForTemporalEntities(any(), any())
} returns listOf(temporalEntityAttribute)
coEvery { entityPayloadService.queryEntitiesCount(any(), any()) } returns 1.right()
coEvery { scopeService.retrieveHistory(any(), any()) } returns emptyList().right()
@@ -304,7 +258,7 @@ class QueryServiceTests {
) { null }
coVerify {
- temporalEntityAttributeService.getForTemporalEntities(
+ entityAttributeService.getForTemporalEntities(
listOf(entityUri),
EntitiesQuery(
typeSelection = "$BEEHIVE_TYPE,$APIARY_TYPE",
@@ -345,7 +299,7 @@ class QueryServiceTests {
coEvery { entityPayloadService.queryEntities(any(), any()) } returns listOf(entityUri)
coEvery {
- temporalEntityAttributeService.getForTemporalEntities(any(), any())
+ entityAttributeService.getForTemporalEntities(any(), any())
} returns listOf(temporalEntityAttribute)
coEvery { scopeService.retrieveHistory(any(), any()) } returns emptyList().right()
coEvery {
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/web/TemporalEntityHandlerPaginationTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityHandlerPaginationTests.kt
similarity index 94%
rename from search-service/src/test/kotlin/com/egm/stellio/search/web/TemporalEntityHandlerPaginationTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityHandlerPaginationTests.kt
index 3b2ecb606..89b4c33ac 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/web/TemporalEntityHandlerPaginationTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityHandlerPaginationTests.kt
@@ -1,8 +1,8 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.temporal.web
import arrow.core.Either
import arrow.core.right
-import com.egm.stellio.search.config.SearchProperties
+import com.egm.stellio.search.common.config.SearchProperties
import com.egm.stellio.shared.util.BEEHIVE_TYPE
import com.egm.stellio.shared.util.loadAndExpandSampleData
import com.egm.stellio.shared.util.toNgsiLdFormat
@@ -35,7 +35,7 @@ class TemporalEntityHandlerPaginationTests : TemporalEntityHandlerTestCommon() {
val secondTemporalEntity = loadAndExpandSampleData("beehive.jsonld")
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
coEvery {
- queryService.queryTemporalEntities(any(), any())
+ temporalQueryService.queryTemporalEntities(any(), any())
} returns Either.Right(
Triple(
listOf(firstTemporalEntity, secondTemporalEntity),
@@ -53,7 +53,7 @@ class TemporalEntityHandlerPaginationTests : TemporalEntityHandlerTestCommon() {
coEvery { entityPayloadService.checkEntityExistence(any()) } returns Unit.right()
coEvery { entityPayloadService.getTypes(any()) } returns listOf(BEEHIVE_TYPE).right()
coEvery {
- queryService.queryTemporalEntity(any(), any())
+ temporalQueryService.queryTemporalEntity(any(), any())
} returns Either.Right(
firstTemporalEntity to range
)
@@ -72,7 +72,7 @@ class TemporalEntityHandlerPaginationTests : TemporalEntityHandlerTestCommon() {
.exchange()
coVerify {
- queryService.queryTemporalEntities(
+ temporalQueryService.queryTemporalEntities(
match { temporalEntitiesQuery ->
temporalEntitiesQuery.temporalQuery.instanceLimit == 5 &&
!temporalEntitiesQuery.temporalQuery.hasLastN()
@@ -96,7 +96,7 @@ class TemporalEntityHandlerPaginationTests : TemporalEntityHandlerTestCommon() {
.exchange()
coVerify {
- queryService.queryTemporalEntities(
+ temporalQueryService.queryTemporalEntities(
match { temporalEntitiesQuery ->
temporalEntitiesQuery.temporalQuery.instanceLimit == 5 &&
temporalEntitiesQuery.temporalQuery.lastN == 7
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/web/TemporalEntityHandlerTestCommon.kt b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityHandlerTestCommon.kt
similarity index 74%
rename from search-service/src/test/kotlin/com/egm/stellio/search/web/TemporalEntityHandlerTestCommon.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityHandlerTestCommon.kt
index de1c2fbcd..5e7c45bff 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/web/TemporalEntityHandlerTestCommon.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityHandlerTestCommon.kt
@@ -1,8 +1,11 @@
-package com.egm.stellio.search.web
-
-import com.egm.stellio.search.authorization.AuthorizationService
-import com.egm.stellio.search.config.SearchProperties
-import com.egm.stellio.search.service.*
+package com.egm.stellio.search.temporal.web
+
+import com.egm.stellio.search.authorization.service.AuthorizationService
+import com.egm.stellio.search.common.config.SearchProperties
+import com.egm.stellio.search.entity.service.EntityAttributeService
+import com.egm.stellio.search.entity.service.EntityPayloadService
+import com.egm.stellio.search.temporal.service.AttributeInstanceService
+import com.egm.stellio.search.temporal.service.TemporalQueryService
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.util.JSON_LD_MEDIA_TYPE
import com.egm.stellio.shared.util.MOCK_USER_SUB
@@ -24,7 +27,7 @@ open class TemporalEntityHandlerTestCommon {
protected lateinit var webClient: WebTestClient
@MockkBean(relaxed = true)
- protected lateinit var queryService: QueryService
+ protected lateinit var temporalQueryService: TemporalQueryService
@MockkBean
protected lateinit var entityPayloadService: EntityPayloadService
@@ -33,7 +36,7 @@ open class TemporalEntityHandlerTestCommon {
protected lateinit var attributeInstanceService: AttributeInstanceService
@MockkBean(relaxed = true)
- protected lateinit var temporalEntityAttributeService: TemporalEntityAttributeService
+ protected lateinit var entityAttributeService: EntityAttributeService
@MockkBean
protected lateinit var authorizationService: AuthorizationService
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/web/TemporalEntityHandlerTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityHandlerTests.kt
similarity index 95%
rename from search-service/src/test/kotlin/com/egm/stellio/search/web/TemporalEntityHandlerTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityHandlerTests.kt
index a05fbbfd9..bd41cd458 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/web/TemporalEntityHandlerTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityHandlerTests.kt
@@ -1,16 +1,16 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.temporal.web
import arrow.core.Either
import arrow.core.Some
import arrow.core.left
import arrow.core.right
-import com.egm.stellio.search.config.SearchProperties
-import com.egm.stellio.search.model.EntityPayload
-import com.egm.stellio.search.model.SimplifiedAttributeInstanceResult
-import com.egm.stellio.search.model.TemporalEntityAttribute
-import com.egm.stellio.search.model.TemporalQuery
+import com.egm.stellio.search.common.config.SearchProperties
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
import com.egm.stellio.search.support.EMPTY_JSON_PAYLOAD
import com.egm.stellio.search.support.buildDefaultTestTemporalQuery
+import com.egm.stellio.search.temporal.model.SimplifiedAttributeInstanceResult
+import com.egm.stellio.search.temporal.model.TemporalQuery
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.*
import com.egm.stellio.shared.util.*
@@ -271,7 +271,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
.exchange()
.expectStatus().isForbidden
- coVerify { temporalEntityAttributeService.getForEntityAndAttribute(any(), any()) wasNot Called }
+ coVerify { entityAttributeService.getForEntityAndAttribute(any(), any()) wasNot Called }
coVerify { attributeInstanceService.addAttributeInstance(any(), any(), any()) wasNot Called }
}
@@ -325,7 +325,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
val returnedExpandedEntity = mockkClass(ExpandedEntity::class, relaxed = true)
coEvery {
- queryService.queryTemporalEntity(any(), any())
+ temporalQueryService.queryTemporalEntity(any(), any())
} returns (returnedExpandedEntity to null).right()
webClient.get()
@@ -488,7 +488,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
buildDefaultMockResponsesForGetEntity()
coEvery {
- queryService.queryTemporalEntity(any(), any())
+ temporalQueryService.queryTemporalEntity(any(), any())
} throws ResourceNotFoundException("Entity urn:ngsi-ld:BeeHive:TESTC was not found")
webClient.get()
@@ -515,7 +515,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
val returnedExpandedEntity = mockkClass(ExpandedEntity::class, relaxed = true)
coEvery {
- queryService.queryTemporalEntity(any(), any())
+ temporalQueryService.queryTemporalEntity(any(), any())
} returns (returnedExpandedEntity to null).right()
webClient.get()
@@ -528,7 +528,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
.expectStatus().isOk
coVerify {
- queryService.queryTemporalEntity(
+ temporalQueryService.queryTemporalEntity(
eq(entityUri),
match { temporalEntitiesQuery ->
temporalEntitiesQuery.temporalQuery.timerel == TemporalQuery.Timerel.BETWEEN &&
@@ -540,7 +540,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
}
)
}
- confirmVerified(queryService)
+ confirmVerified(temporalQueryService)
}
@Test
@@ -549,7 +549,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
val returnedExpandedEntity = mockkClass(ExpandedEntity::class, relaxed = true)
coEvery {
- queryService.queryTemporalEntity(any(), any())
+ temporalQueryService.queryTemporalEntity(any(), any())
} returns (returnedExpandedEntity to null).right()
webClient.get()
@@ -570,7 +570,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
val returnedExpandedEntity = mockkClass(ExpandedEntity::class, relaxed = true)
coEvery {
- queryService.queryTemporalEntity(any(), any())
+ temporalQueryService.queryTemporalEntity(any(), any())
} returns (returnedExpandedEntity to null).right()
webClient.get()
@@ -673,7 +673,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
val entityResponseWith2temporalEvolutions = loadAndExpandSampleData(entityFileName)
coEvery {
- temporalEntityAttributeService.getForEntity(any(), any(), any())
+ entityAttributeService.getForEntity(any(), any(), any())
} returns listOf(entityTemporalProperties[0], entityTemporalProperties[1])
val attributes = listOf(INCOMING_PROPERTY, OUTGOING_PROPERTY)
@@ -694,7 +694,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
}
coEvery {
- queryService.queryTemporalEntity(any(), any())
+ temporalQueryService.queryTemporalEntity(any(), any())
} returns (entityResponseWith2temporalEvolutions to null).right()
}
@@ -727,7 +727,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
coEvery {
- queryService.queryTemporalEntities(any(), any())
+ temporalQueryService.queryTemporalEntities(any(), any())
} returns Either.Right(Triple(emptyList(), 2, null))
webClient.get()
@@ -741,7 +741,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
.expectBody().json("[]")
coVerify {
- queryService.queryTemporalEntities(
+ temporalQueryService.queryTemporalEntities(
match { temporalEntitiesQuery ->
temporalEntitiesQuery.entitiesQuery.paginationQuery.limit == 30 &&
temporalEntitiesQuery.entitiesQuery.paginationQuery.offset == 0 &&
@@ -763,7 +763,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
coEvery {
- queryService.queryTemporalEntities(any(), any())
+ temporalQueryService.queryTemporalEntities(any(), any())
} returns Either.Right(Triple(listOf(firstTemporalEntity, secondTemporalEntity), 2, null))
webClient.get()
@@ -789,7 +789,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
coEvery {
- queryService.queryTemporalEntities(any(), any())
+ temporalQueryService.queryTemporalEntities(any(), any())
} returns Either.Right(Triple(listOf(firstTemporalEntity, secondTemporalEntity), 2, null))
webClient.get()
@@ -817,7 +817,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
coEvery {
- queryService.queryTemporalEntities(any(), any())
+ temporalQueryService.queryTemporalEntities(any(), any())
} returns Either.Right(Triple(listOf(firstTemporalEntity, secondTemporalEntity), 2, null))
webClient.get()
@@ -840,7 +840,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
@Test
fun `query temporal entity should return 200 and empty response if requested offset does not exist`() {
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
- coEvery { queryService.queryTemporalEntities(any(), any()) } returns Either.Right(Triple(emptyList(), 2, null))
+ coEvery { temporalQueryService.queryTemporalEntities(any(), any()) } returns Either.Right(Triple(emptyList(), 2, null))
webClient.get()
.uri(
@@ -856,7 +856,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
@Test
fun `query temporal entities should return 200 and the number of results if count is asked for`() {
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
- coEvery { queryService.queryTemporalEntities(any(), any()) } returns Either.Right(Triple(emptyList(), 2, null))
+ coEvery { temporalQueryService.queryTemporalEntities(any(), any()) } returns Either.Right(Triple(emptyList(), 2, null))
webClient.get()
.uri(
@@ -877,7 +877,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
coEvery {
- queryService.queryTemporalEntities(any(), any())
+ temporalQueryService.queryTemporalEntities(any(), any())
} returns Either.Right(Triple(listOf(firstTemporalEntity, secondTemporalEntity), 2, null))
webClient.get()
@@ -904,7 +904,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
coEvery {
- queryService.queryTemporalEntities(any(), any())
+ temporalQueryService.queryTemporalEntities(any(), any())
} returns Either.Right(Triple(listOf(firstTemporalEntity, secondTemporalEntity), 3, null))
webClient.get()
@@ -931,7 +931,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
fun `query temporal entity should return 400 if requested offset is less than zero`() {
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
coEvery {
- queryService.queryTemporalEntities(any(), any())
+ temporalQueryService.queryTemporalEntities(any(), any())
} throws BadRequestDataException(
"Offset must be greater than zero and limit must be strictly greater than zero"
)
@@ -959,7 +959,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
fun `query temporal entity should return 400 if limit is equal or less than zero`() {
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
coEvery {
- queryService.queryTemporalEntities(any(), any())
+ temporalQueryService.queryTemporalEntities(any(), any())
} throws BadRequestDataException(
"Offset must be greater than zero and limit must be strictly greater than zero"
)
@@ -987,7 +987,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
fun `query temporal entity should return 403 if limit is greater than the maximum authorized limit`() {
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
coEvery {
- queryService.queryTemporalEntities(any(), any())
+ temporalQueryService.queryTemporalEntities(any(), any())
} throws TooManyResultsException(
"You asked for 200 results, but the supported maximum limit is 100"
)
@@ -1250,7 +1250,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
@Test
fun `delete attribute temporal should return a 204 if the attribute has been successfully deleted`() {
- coEvery { temporalEntityAttributeService.checkEntityAndAttributeExistence(any(), any()) } returns Unit.right()
+ coEvery { entityAttributeService.checkEntityAndAttributeExistence(any(), any()) } returns Unit.right()
coEvery { authorizationService.userCanUpdateEntity(any(), sub) } returns Unit.right()
coEvery {
entityPayloadService.deleteAttribute(any(), any(), any())
@@ -1265,7 +1265,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
.expectBody().isEmpty
coVerify {
- temporalEntityAttributeService.checkEntityAndAttributeExistence(eq(entityUri), eq(TEMPERATURE_PROPERTY))
+ entityAttributeService.checkEntityAndAttributeExistence(eq(entityUri), eq(TEMPERATURE_PROPERTY))
authorizationService.userCanUpdateEntity(eq(entityUri), eq(sub))
entityPayloadService.deleteAttribute(
eq(entityUri),
@@ -1277,7 +1277,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
@Test
fun `delete attribute temporal should delete all instances if deleteAll flag is true`() {
- coEvery { temporalEntityAttributeService.checkEntityAndAttributeExistence(any(), any()) } returns Unit.right()
+ coEvery { entityAttributeService.checkEntityAndAttributeExistence(any(), any()) } returns Unit.right()
coEvery { authorizationService.userCanUpdateEntity(any(), sub) } returns Unit.right()
coEvery {
entityPayloadService.deleteAttribute(any(), any(), any(), any())
@@ -1304,10 +1304,10 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
@Test
fun `delete attribute temporal should delete instance with the provided datasetId`() {
val datasetId = "urn:ngsi-ld:Dataset:temperature:1"
- coEvery { temporalEntityAttributeService.checkEntityAndAttributeExistence(any(), any()) } returns Unit.right()
+ coEvery { entityAttributeService.checkEntityAndAttributeExistence(any(), any()) } returns Unit.right()
coEvery { authorizationService.userCanUpdateEntity(any(), sub) } returns Unit.right()
coEvery {
- temporalEntityAttributeService.checkEntityAndAttributeExistence(any(), any(), any())
+ entityAttributeService.checkEntityAndAttributeExistence(any(), any(), any())
} returns Unit.right()
coEvery {
entityPayloadService.deleteAttribute(any(), any(), any())
@@ -1333,7 +1333,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
@Test
fun `delete attribute temporal should return a 404 if the entity is not found`() {
coEvery {
- temporalEntityAttributeService.checkEntityAndAttributeExistence(any(), any())
+ entityAttributeService.checkEntityAndAttributeExistence(any(), any())
} returns ResourceNotFoundException(entityNotFoundMessage(entityUri.toString())).left()
webClient.method(HttpMethod.DELETE)
@@ -1355,7 +1355,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
@Test
fun `delete attribute temporal should return a 404 if the attribute is not found`() {
- coEvery { temporalEntityAttributeService.checkEntityAndAttributeExistence(any(), any()) } returns Unit.right()
+ coEvery { entityAttributeService.checkEntityAndAttributeExistence(any(), any()) } returns Unit.right()
coEvery { authorizationService.userCanUpdateEntity(any(), sub) } returns Unit.right()
coEvery {
entityPayloadService.deleteAttribute(any(), any(), any(), any())
@@ -1380,7 +1380,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
@Test
fun `delete attribute temporal should return a 400 if the request is not correct`() {
- coEvery { temporalEntityAttributeService.checkEntityAndAttributeExistence(any(), any()) } returns Unit.right()
+ coEvery { entityAttributeService.checkEntityAndAttributeExistence(any(), any()) } returns Unit.right()
coEvery { authorizationService.userCanUpdateEntity(any(), sub) } returns Unit.right()
coEvery {
entityPayloadService.deleteAttribute(any(), any(), any())
@@ -1456,7 +1456,7 @@ class TemporalEntityHandlerTests : TemporalEntityHandlerTestCommon() {
@Test
fun `delete attribute temporal should return a 403 if user is not allowed to update entity`() {
- coEvery { temporalEntityAttributeService.checkEntityAndAttributeExistence(any(), any()) } returns Unit.right()
+ coEvery { entityAttributeService.checkEntityAndAttributeExistence(any(), any()) } returns Unit.right()
coEvery { entityPayloadService.getTypes(any()) } returns listOf(BEEHIVE_TYPE).right()
coEvery {
authorizationService.userCanUpdateEntity(any(), sub)
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/web/TemporalEntityOperationsHandlerTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityOperationsHandlerTests.kt
similarity index 89%
rename from search-service/src/test/kotlin/com/egm/stellio/search/web/TemporalEntityOperationsHandlerTests.kt
rename to search-service/src/test/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityOperationsHandlerTests.kt
index efcbfd000..c0d01bd6d 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/web/TemporalEntityOperationsHandlerTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/temporal/web/TemporalEntityOperationsHandlerTests.kt
@@ -1,11 +1,11 @@
-package com.egm.stellio.search.web
+package com.egm.stellio.search.temporal.web
import arrow.core.Either
-import com.egm.stellio.search.authorization.AuthorizationService
-import com.egm.stellio.search.config.SearchProperties
-import com.egm.stellio.search.model.TemporalQuery
-import com.egm.stellio.search.service.QueryService
+import com.egm.stellio.search.authorization.service.AuthorizationService
+import com.egm.stellio.search.common.config.SearchProperties
import com.egm.stellio.search.support.buildDefaultTestTemporalQuery
+import com.egm.stellio.search.temporal.model.TemporalQuery
+import com.egm.stellio.search.temporal.service.TemporalQueryService
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.util.*
import com.ninjasquad.springmockk.MockkBean
@@ -32,7 +32,7 @@ class TemporalEntityOperationsHandlerTests {
private lateinit var webClient: WebTestClient
@MockkBean(relaxed = true)
- private lateinit var queryService: QueryService
+ private lateinit var temporalQueryService: TemporalQueryService
@MockkBean
private lateinit var authorizationService: AuthorizationService
@@ -58,7 +58,7 @@ class TemporalEntityOperationsHandlerTests {
)
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
- coEvery { queryService.queryTemporalEntities(any(), any()) } returns Either.Right(Triple(emptyList(), 2, null))
+ coEvery { temporalQueryService.queryTemporalEntities(any(), any()) } returns Either.Right(Triple(emptyList(), 2, null))
val query = """
{
@@ -83,7 +83,7 @@ class TemporalEntityOperationsHandlerTests {
.expectStatus().isOk
coVerify {
- queryService.queryTemporalEntities(
+ temporalQueryService.queryTemporalEntities(
match { temporalEntitiesQuery ->
temporalEntitiesQuery.entitiesQuery.paginationQuery.limit == 30 &&
temporalEntitiesQuery.entitiesQuery.paginationQuery.offset == 0 &&
@@ -107,7 +107,7 @@ class TemporalEntityOperationsHandlerTests {
)
coEvery { authorizationService.computeAccessRightFilter(any()) } returns { null }
- coEvery { queryService.queryTemporalEntities(any(), any()) } returns Either.Right(Triple(emptyList(), 2, null))
+ coEvery { temporalQueryService.queryTemporalEntities(any(), any()) } returns Either.Right(Triple(emptyList(), 2, null))
val query = """
{
@@ -133,7 +133,7 @@ class TemporalEntityOperationsHandlerTests {
.expectHeader().valueEquals(RESULTS_COUNT_HEADER, "2")
coVerify {
- queryService.queryTemporalEntities(
+ temporalQueryService.queryTemporalEntities(
match { temporalEntitiesQuery ->
temporalEntitiesQuery.entitiesQuery.paginationQuery.limit == 30 &&
temporalEntitiesQuery.entitiesQuery.paginationQuery.offset == 0 &&
@@ -148,7 +148,7 @@ class TemporalEntityOperationsHandlerTests {
)
}
- confirmVerified(queryService)
+ confirmVerified(temporalQueryService)
}
@Test
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/util/AttributeInstanceUtilsTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/util/AttributeInstanceUtilsTests.kt
index 8329bc3dc..b07fd3d0e 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/util/AttributeInstanceUtilsTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/util/AttributeInstanceUtilsTests.kt
@@ -1,6 +1,7 @@
package com.egm.stellio.search.util
-import com.egm.stellio.search.model.TemporalEntityAttribute
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
+import com.egm.stellio.search.temporal.util.guessAttributeValueType
import com.egm.stellio.shared.util.JsonLdUtils.expandAttribute
import com.egm.stellio.shared.util.NGSILD_TEST_CORE_CONTEXTS
import com.egm.stellio.shared.util.ngsiLdDateTime
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/util/EntitiesQueryUtilsTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/util/EntitiesQueryUtilsTests.kt
index c3c259b80..15e4a27c4 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/util/EntitiesQueryUtilsTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/util/EntitiesQueryUtilsTests.kt
@@ -2,12 +2,15 @@ package com.egm.stellio.search.util
import arrow.core.Either
import arrow.core.raise.either
-import com.egm.stellio.search.model.AttributeInstance
-import com.egm.stellio.search.model.EntitiesQuery
-import com.egm.stellio.search.model.Query
-import com.egm.stellio.search.model.TemporalQuery
+import com.egm.stellio.search.common.model.Query
+import com.egm.stellio.search.entity.model.EntitiesQuery
+import com.egm.stellio.search.entity.util.composeEntitiesQuery
import com.egm.stellio.search.support.buildDefaultPagination
import com.egm.stellio.search.support.buildDefaultTestTemporalQuery
+import com.egm.stellio.search.temporal.model.AttributeInstance
+import com.egm.stellio.search.temporal.model.TemporalQuery
+import com.egm.stellio.search.temporal.util.buildTemporalQuery
+import com.egm.stellio.search.temporal.util.composeTemporalEntitiesQuery
import com.egm.stellio.shared.config.ApplicationProperties
import com.egm.stellio.shared.model.APIException
import com.egm.stellio.shared.model.BadRequestDataException
@@ -242,7 +245,12 @@ class EntitiesQueryUtilsTests {
contexts: List
): Either = either {
val query = Query(requestBody).bind()
- composeEntitiesQueryFromPostRequest(defaultPagination, query, requestParams, contexts).bind()
+ com.egm.stellio.search.entity.util.composeEntitiesQueryFromPostRequest(
+ defaultPagination,
+ query,
+ requestParams,
+ contexts
+ ).bind()
}
@Test
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/util/PatchAttributeTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/util/PatchAttributeTests.kt
index acb08d941..56b3fc425 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/util/PatchAttributeTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/util/PatchAttributeTests.kt
@@ -1,5 +1,7 @@
package com.egm.stellio.search.util
+import com.egm.stellio.search.temporal.util.mergePatch
+import com.egm.stellio.search.temporal.util.partialUpdatePatch
import com.egm.stellio.shared.util.JsonLdUtils.expandAttribute
import com.egm.stellio.shared.util.JsonUtils.serializeObject
import com.egm.stellio.shared.util.NGSILD_TEST_CORE_CONTEXTS
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/util/TemporalEntitiesParameterizedSource.kt b/search-service/src/test/kotlin/com/egm/stellio/search/util/TemporalEntitiesParameterizedSource.kt
index 8dca9b1bc..7181df4c7 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/util/TemporalEntitiesParameterizedSource.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/util/TemporalEntitiesParameterizedSource.kt
@@ -1,8 +1,12 @@
package com.egm.stellio.search.util
-import com.egm.stellio.search.model.*
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
import com.egm.stellio.search.support.EMPTY_JSON_PAYLOAD
import com.egm.stellio.search.support.buildAttributeInstancePayload
+import com.egm.stellio.search.temporal.model.EntityTemporalResult
+import com.egm.stellio.search.temporal.model.FullAttributeInstanceResult
+import com.egm.stellio.search.temporal.model.SimplifiedAttributeInstanceResult
import com.egm.stellio.shared.util.BEEHIVE_TYPE
import com.egm.stellio.shared.util.JsonLdUtils
import com.egm.stellio.shared.util.loadSampleData
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/util/TemporalEntityBuilderTests.kt b/search-service/src/test/kotlin/com/egm/stellio/search/util/TemporalEntityBuilderTests.kt
index 4077a2a10..474416b44 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/util/TemporalEntityBuilderTests.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/util/TemporalEntityBuilderTests.kt
@@ -1,11 +1,15 @@
package com.egm.stellio.search.util
-import com.egm.stellio.search.model.*
-import com.egm.stellio.search.model.AggregatedAttributeInstanceResult.AggregateResult
+import com.egm.stellio.search.entity.model.EntityPayload
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
import com.egm.stellio.search.scope.ScopeInstanceResult
import com.egm.stellio.search.support.EMPTY_JSON_PAYLOAD
import com.egm.stellio.search.support.buildDefaultQueryParams
import com.egm.stellio.search.support.buildDefaultTestTemporalQuery
+import com.egm.stellio.search.temporal.model.*
+import com.egm.stellio.search.temporal.model.AggregatedAttributeInstanceResult.AggregateResult
+import com.egm.stellio.search.temporal.util.TemporalEntityAttributeInstancesResult
+import com.egm.stellio.search.temporal.util.TemporalEntityBuilder
import com.egm.stellio.shared.util.*
import com.egm.stellio.shared.util.JsonLdUtils.NGSILD_CREATED_AT_PROPERTY
import com.egm.stellio.shared.util.JsonUtils.serializeObject
diff --git a/search-service/src/test/kotlin/com/egm/stellio/search/util/TemporalEntityParameterizedSource.kt b/search-service/src/test/kotlin/com/egm/stellio/search/util/TemporalEntityParameterizedSource.kt
index a6c2d87d0..8a2eca7c7 100644
--- a/search-service/src/test/kotlin/com/egm/stellio/search/util/TemporalEntityParameterizedSource.kt
+++ b/search-service/src/test/kotlin/com/egm/stellio/search/util/TemporalEntityParameterizedSource.kt
@@ -1,10 +1,11 @@
package com.egm.stellio.search.util
-import com.egm.stellio.search.model.*
+import com.egm.stellio.search.entity.model.TemporalEntityAttribute
import com.egm.stellio.search.scope.FullScopeInstanceResult
import com.egm.stellio.search.scope.ScopeInstanceResult
import com.egm.stellio.search.scope.SimplifiedScopeInstanceResult
import com.egm.stellio.search.support.*
+import com.egm.stellio.search.temporal.model.*
import com.egm.stellio.shared.util.JsonLdUtils
import com.egm.stellio.shared.util.loadSampleData
import com.egm.stellio.shared.util.toUri