diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..3543e17
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,11 @@
+services:
+ postgres:
+ image: postgres
+ environment:
+ POSTGRES_PASSWORD: postgres
+ ports:
+ - "18432:5432"
+ volumes:
+ - pgdata:/var/lib/postgres
+volumes:
+ pgdata:
diff --git a/integration/semrack-integration/pom.xml b/integration/semrack-integration/pom.xml
index 0c8cf51..9385285 100644
--- a/integration/semrack-integration/pom.xml
+++ b/integration/semrack-integration/pom.xml
@@ -19,12 +19,15 @@
fr.codeanddata.semrack
semrack-storage-postgres
+
+ fr.codeanddata.semrack
+ semrack-index-postgres
+
fr.codeanddata.semrack
semrack-api-rest
-
io.quarkus
quarkus-junit5
diff --git a/integration/semrack-integration/src/main/resources/application.properties b/integration/semrack-integration/src/main/resources/application.properties
index 5ce65a2..4b1b531 100644
--- a/integration/semrack-integration/src/main/resources/application.properties
+++ b/integration/semrack-integration/src/main/resources/application.properties
@@ -1,6 +1,6 @@
%dev.quarkus.log.min-level=TRACE
-quarkus.hibernate-orm.mapping.format.global=ignore
+#quarkus.hibernate-orm.mapping.format.global=ignore
# Datasource
quarkus.datasource.devservices.port=35432
@@ -9,6 +9,7 @@ quarkus.hibernate-orm.scripts.generation=none
%prod.quarkus.datasource.reactive.url=postgresql://${semrack.db.host}:${semrack.db.port}/${semrack.db.name}
%prod.quarkus.datasource.username=${semrack.db.user}
%prod.quarkus.datasource.password=${semrack.db.password}
+quarkus.hibernate-orm.log.sql=true
## Flyway
quarkus.flyway.active=false
diff --git a/modules/semrack-api-rest/deployment/pom.xml b/modules/semrack-api-rest/deployment/pom.xml
index a0e0bff..ca65cc6 100644
--- a/modules/semrack-api-rest/deployment/pom.xml
+++ b/modules/semrack-api-rest/deployment/pom.xml
@@ -46,6 +46,11 @@
quarkus-junit5-internal
test
+
+ fr.codeanddata.semrack
+ semrack-core-testing
+ test
+
diff --git a/modules/semrack-api-rest/runtime/src/main/java/fr/codeanddata/semrack/api/rest/SemrackApi.java b/modules/semrack-api-rest/runtime/src/main/java/fr/codeanddata/semrack/api/rest/SemrackApi.java
index 5b1aeff..f9ab2aa 100644
--- a/modules/semrack-api-rest/runtime/src/main/java/fr/codeanddata/semrack/api/rest/SemrackApi.java
+++ b/modules/semrack-api-rest/runtime/src/main/java/fr/codeanddata/semrack/api/rest/SemrackApi.java
@@ -1,10 +1,9 @@
package fr.codeanddata.semrack.api.rest;
-import fr.codeanddata.semrack.core.SemdocStorage;
-import fr.codeanddata.semrack.core.models.SemrackDocument;
import fr.codeanddata.semrack.core.models.PushDocumentRequest;
import fr.codeanddata.semrack.core.models.SearchRequest;
import fr.codeanddata.semrack.core.models.SearchResult;
+import fr.codeanddata.semrack.core.models.SemrackDocument;
import fr.codeanddata.semrack.core.repositories.SemdocRepository;
import io.smallrye.mutiny.Uni;
import jakarta.inject.Inject;
@@ -19,9 +18,6 @@ import org.jboss.resteasy.reactive.RestPath;
//@Authenticated
public class SemrackApi {
- @Inject
- SemdocStorage storage;
-
@Inject
SemdocRepository repository;
@@ -35,14 +31,14 @@ public class SemrackApi {
@Path("/search")
@Produces(MediaType.APPLICATION_JSON)
public Uni searchDocument(SearchRequest query) {
- return storage.searchDocument(query);
+ return repository.searchDocument(query);
}
@GET
@Path("{uid}")
@Produces(MediaType.APPLICATION_JSON)
public Uni getDocument(@RestPath String uid) {
- return storage.readDocument(uid);
+ return repository.get(uid);
}
@POST
diff --git a/modules/semrack-core/deployment/pom.xml b/modules/semrack-core/deployment/pom.xml
index e48bc1c..abd2514 100644
--- a/modules/semrack-core/deployment/pom.xml
+++ b/modules/semrack-core/deployment/pom.xml
@@ -1,59 +1,69 @@
-
- 4.0.0
+
+ 4.0.0
-
- fr.codeanddata.semrack
- semrack-core-parent
- 1.0-SNAPSHOT
-
- semrack-core-deployment
- Semrack Core - Deployment
+
+ fr.codeanddata.semrack
+ semrack-core-parent
+ 1.0-SNAPSHOT
+
+ semrack-core-deployment
+ Semrack Core - Deployment
-
-
- io.quarkus
- quarkus-arc-deployment
-
-
- io.quarkus
- quarkus-security-deployment
-
-
- io.quarkus
- quarkus-jackson-deployment
-
-
- fr.codeanddata.semrack
- semrack-core
- ${project.version}
-
-
- io.quarkus
- quarkus-junit5-internal
- test
-
-
+
+
+ io.quarkus
+ quarkus-arc-deployment
+
+
+ io.quarkus
+ quarkus-vertx-deployment
+
+
+ io.quarkus
+ quarkus-security-deployment
+
+
+ io.quarkus
+ quarkus-jackson-deployment
+
+
+ fr.codeanddata.semrack
+ semrack-core
+
+
+ io.quarkus
+ quarkus-junit5-internal
+ test
+
+
+ fr.codeanddata.semrack
+ semrack-core-testing
+ ${project.version}
+ test
+
+
-
-
-
- maven-compiler-plugin
-
-
- default-compile
-
-
-
- io.quarkus
- quarkus-extension-processor
- ${quarkus.version}
-
-
-
-
-
-
-
-
+
+
+
+ maven-compiler-plugin
+
+
+ default-compile
+
+
+
+ io.quarkus
+ quarkus-extension-processor
+ ${quarkus.version}
+
+
+
+
+
+
+
+
diff --git a/modules/semrack-core/pom.xml b/modules/semrack-core/pom.xml
index 7305ecf..1064c39 100644
--- a/modules/semrack-core/pom.xml
+++ b/modules/semrack-core/pom.xml
@@ -15,6 +15,7 @@
deployment
runtime
+ testing
diff --git a/modules/semrack-core/runtime/pom.xml b/modules/semrack-core/runtime/pom.xml
index e2cd7c9..4931182 100644
--- a/modules/semrack-core/runtime/pom.xml
+++ b/modules/semrack-core/runtime/pom.xml
@@ -16,6 +16,10 @@
io.quarkus
quarkus-arc
+
+ io.quarkus
+ quarkus-vertx
+
io.quarkus
quarkus-security
diff --git a/modules/semrack-core/runtime/src/main/java/fr/codeanddata/semrack/core/SemdocIndex.java b/modules/semrack-core/runtime/src/main/java/fr/codeanddata/semrack/core/SemdocIndex.java
new file mode 100644
index 0000000..e815c16
--- /dev/null
+++ b/modules/semrack-core/runtime/src/main/java/fr/codeanddata/semrack/core/SemdocIndex.java
@@ -0,0 +1,13 @@
+package fr.codeanddata.semrack.core;
+
+import fr.codeanddata.semrack.core.models.IndexSearchResult;
+import fr.codeanddata.semrack.core.models.SearchRequest;
+import io.smallrye.mutiny.Uni;
+
+public interface SemdocIndex {
+ Uni count(SearchRequest request);
+ Uni exist(SearchRequest query);
+ Uni index(String documentId);
+ Uni search(SearchRequest searchRequest);
+ Uni clear(String documentId);
+}
diff --git a/modules/semrack-core/runtime/src/main/java/fr/codeanddata/semrack/core/SemdocStorage.java b/modules/semrack-core/runtime/src/main/java/fr/codeanddata/semrack/core/SemdocStorage.java
index 8bdce57..9ea7a41 100644
--- a/modules/semrack-core/runtime/src/main/java/fr/codeanddata/semrack/core/SemdocStorage.java
+++ b/modules/semrack-core/runtime/src/main/java/fr/codeanddata/semrack/core/SemdocStorage.java
@@ -1,14 +1,12 @@
package fr.codeanddata.semrack.core;
-import fr.codeanddata.semrack.core.models.SearchRequest;
-import fr.codeanddata.semrack.core.models.SearchResult;
import fr.codeanddata.semrack.core.models.SemrackDocument;
import io.smallrye.mutiny.Uni;
+import java.util.List;
+
public interface SemdocStorage {
- Uni readDocument(String uid);
- Uni searchDocument(SearchRequest query);
- Uni countDocuments(SearchRequest request);
- Uni documentsExist(SearchRequest query);
+ Uni get(String uid);
+ Uni> get(List uids);
Uni storeDocument(SemrackDocument document);
}
diff --git a/modules/semrack-core/runtime/src/main/java/fr/codeanddata/semrack/core/interceptors/AnnotateWriteInterceptor.java b/modules/semrack-core/runtime/src/main/java/fr/codeanddata/semrack/core/interceptors/AnnotateWriteInterceptor.java
index 77bce5c..a74c986 100644
--- a/modules/semrack-core/runtime/src/main/java/fr/codeanddata/semrack/core/interceptors/AnnotateWriteInterceptor.java
+++ b/modules/semrack-core/runtime/src/main/java/fr/codeanddata/semrack/core/interceptors/AnnotateWriteInterceptor.java
@@ -24,7 +24,7 @@ public class AnnotateWriteInterceptor implements SemdocWriteInterceptor {
final Map directives = context.getDirectives();
if (directives.containsKey(ANNOTATE_KEY)) {
- final Map annotate = objectMapper.convertValue(directives.get(ANNOTATE_KEY), new TypeReference
+
+ fr.codeanddata.semrack
+ semrack-core-testing
+ test
+
io.quarkus
quarkus-junit5
diff --git a/modules/semrack-storage-postgres/runtime/src/main/java/fr/codeanddata/semrack/storage/postgres/operators/ContainsLookup.java b/modules/semrack-storage-postgres/runtime/src/main/java/fr/codeanddata/semrack/storage/postgres/operators/ContainsLookup.java
deleted file mode 100644
index 7b6d4c8..0000000
--- a/modules/semrack-storage-postgres/runtime/src/main/java/fr/codeanddata/semrack/storage/postgres/operators/ContainsLookup.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package fr.codeanddata.semrack.storage.postgres.operators;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import io.smallrye.common.annotation.Identifier;
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.inject.Inject;
-
-@Identifier("contains")
-@ApplicationScoped
-public class ContainsLookup implements SemrackJpaLookupExpression {
-
- @Inject
- ObjectMapper objectMapper;
-
- @Override
- public String apply(Object params) {
- try {
- return "document @> '" + objectMapper.writeValueAsString(params) + "'";
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
- }
-}
diff --git a/modules/semrack-storage-postgres/runtime/src/main/java/fr/codeanddata/semrack/storage/postgres/operators/InLookup.java b/modules/semrack-storage-postgres/runtime/src/main/java/fr/codeanddata/semrack/storage/postgres/operators/InLookup.java
deleted file mode 100644
index c7e3e1a..0000000
--- a/modules/semrack-storage-postgres/runtime/src/main/java/fr/codeanddata/semrack/storage/postgres/operators/InLookup.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package fr.codeanddata.semrack.storage.postgres.operators;
-
-import fr.codeanddata.semrack.core.exceptions.SemrackRuntimeException;
-import fr.codeanddata.semrack.storage.postgres.dtos.InLookupParams;
-import io.smallrye.common.annotation.Identifier;
-import jakarta.enterprise.context.ApplicationScoped;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-@Identifier("in")
-@ApplicationScoped
-public class InLookup implements SemrackJpaLookupExpression {
-
- @Override
- public String apply(Object params) {
- final InLookupParams inLookupParams = convert(params, InLookupParams.class);
- final List fields = new ArrayList<>(Arrays.asList(inLookupParams.getField().split("\\.")));
- if (fields.isEmpty()) {
- throw new SemrackRuntimeException("Field expected");
- }
-
- String query = "->> '" + fields.removeLast() + "'";
- if (!fields.isEmpty()) {
- query = "-> '" + String.join("' -> '", fields) + "' " + query;
- }
-
- return "document " + query + " in " + "('" + String.join("', '", inLookupParams.getValues()) + "')";
- }
-}
diff --git a/modules/semrack-storage-postgres/runtime/src/main/java/fr/codeanddata/semrack/storage/postgres/storage/SemdocJpaStorage.java b/modules/semrack-storage-postgres/runtime/src/main/java/fr/codeanddata/semrack/storage/postgres/storage/SemdocJpaStorage.java
index b1e72c8..b702ab2 100644
--- a/modules/semrack-storage-postgres/runtime/src/main/java/fr/codeanddata/semrack/storage/postgres/storage/SemdocJpaStorage.java
+++ b/modules/semrack-storage-postgres/runtime/src/main/java/fr/codeanddata/semrack/storage/postgres/storage/SemdocJpaStorage.java
@@ -1,14 +1,10 @@
package fr.codeanddata.semrack.storage.postgres.storage;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
import fr.codeanddata.semrack.core.SemdocStorage;
-import fr.codeanddata.semrack.core.enums.SemrackSortDirection;
-import fr.codeanddata.semrack.core.models.*;
+import fr.codeanddata.semrack.core.models.SemrackDocument;
import fr.codeanddata.semrack.core.services.SemrackLookupService;
import fr.codeanddata.semrack.core.utils.UIDGenerator;
import fr.codeanddata.semrack.storage.postgres.entities.SemrackDocumentEntity;
-import fr.codeanddata.semrack.storage.postgres.utils.PathMapper;
import io.quarkus.hibernate.reactive.panache.PanacheRepository;
import io.quarkus.hibernate.reactive.panache.common.WithSession;
import io.quarkus.hibernate.reactive.panache.common.WithTransaction;
@@ -16,7 +12,8 @@ import io.smallrye.mutiny.Uni;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
-import java.util.*;
+import java.util.List;
+import java.util.Optional;
@ApplicationScoped
public class SemdocJpaStorage implements SemdocStorage, PanacheRepository {
@@ -24,42 +21,21 @@ public class SemdocJpaStorage implements SemdocStorage, PanacheRepository readDocument(String uid) {
+ public Uni get(String uid) {
return find("uid = ?1", uid)
.firstResult().map(d -> Optional.ofNullable(d).map(SemrackDocumentEntity::getDocument).orElse(null));
}
@Override
@WithSession
- public Uni searchDocument(SearchRequest query) {
- return search(query);
- }
-
- @Override
- public Uni countDocuments(SearchRequest request) {
- final String lookup = lookupService.lookup(request.getFilter());
- final String whereClause = lookup.isEmpty() ? "" : " WHERE " + lookup;
-
- return getSession()
- .chain(s -> s.createNativeQuery("SELECT count(id) FROM semrack_document" + whereClause, Long.class).getSingleResultOrNull())
- .map(count -> count == null ? 0 : count);
- }
-
- @Override
- public Uni documentsExist(SearchRequest query) {
- return countDocuments(query)
- .map(c -> c > 0);
+ public Uni> get(List uids) {
+ return find("uid in ?1", uids).list()
+ .map(d -> d.stream().map(SemrackDocumentEntity::getDocument).toList());
}
@WithTransaction
@@ -93,76 +69,76 @@ public class SemdocJpaStorage implements SemdocStorage, PanacheRepository document);
}
- Uni search(SearchRequest request) {
- final String baseQuery = buildBaseQuery(request);
-
- final StringBuilder sorting = new StringBuilder();
- if (request.getSort() != null && !request.getSort().isEmpty()) {
- sorting.append(" ORDER BY ");
- sorting.append(String.join(", ", request.getSort().stream().map(sort -> sort.getField() + " " + Optional.ofNullable(sort.getDirection()).orElse(SemrackSortDirection.asc).name()).toList()));
- }
-
- final StringBuilder paginate = new StringBuilder();
- if (request.getPaginate() != null) {
- final SemrackPagination pagination = request.getPaginate();
- final Integer size = pagination.getSize() == null ? 200 : pagination.getSize();
- final Integer page = pagination.getPage() == null ? 0 : pagination.getPage();
-
- paginate.append(" LIMIT ").append(size).append(" OFFSET ").append(size * page);
- }
-
- return getSession()
- .chain(s -> {
- final SearchResult searchResult = SearchResult.builder().build();
- return countDocuments(request)
- .invoke(count -> searchResult.setPagination(PaginationInfo.builder()
- .page(Optional.ofNullable(request.getPaginate()).map(SemrackPagination::getPage).orElse(0))
- .size(Optional.ofNullable(request.getPaginate()).map(SemrackPagination::getSize).orElse(0))
- .total(count)
- .build()))
- .call(() -> s
- .createNativeQuery(baseQuery + sorting + paginate, Object.class).getResultList()
- .invoke(results -> searchResult.setDocuments(project(request.getFields(), results))))
- .map(count -> searchResult);
- });
- }
-
- String buildBaseQuery(SearchRequest request) {
- final String lookup = lookupService.lookup(request.getFilter());
- final String whereClause = lookup.isEmpty() ? "" : " WHERE " + lookup;
-
- if (request.getFields() == null || request.getFields().isEmpty()) {
- return "SELECT document FROM semrack_document" + whereClause;
- } else {
- return "SELECT " + toJsonbPathExtract(request.getFields()) + " FROM semrack_document" + whereClause;
- }
- }
-
- String toJsonbPathExtract(List fields) {
- return String.join(",", fields.stream().map(field -> {
- final String serializedField = "'" + String.join("','", field.split("\\.")) + "'";
- return "jsonb_extract_path(document, " + serializedField + ")";
- }).toList());
- }
-
- List project(List fields, Object results) {
- final List> projectedResults = objectMapper.convertValue(results, List.class);
- if (fields == null || fields.isEmpty()) {
- return projectedResults.stream().map(result -> objectMapper.convertValue(result, SemrackDocument.class)).toList();
- } else {
- return projectedResults.stream().map(result -> {
- final List row = fields.size() == 1 ? List.of(result) : objectMapper.convertValue(result, new TypeReference<>() {
- });
- final List rowMut = new ArrayList<>(row);
- final List fieldCp = new ArrayList<>(fields);
- final Map document = new HashMap<>();
- while (!fieldCp.isEmpty() && !row.isEmpty()) {
- final String field = fieldCp.removeFirst();
- final Object value = rowMut.removeFirst();
- pathMapper.map(field, document, value);
- }
- return objectMapper.convertValue(document, SemrackDocument.class);
- }).toList();
- }
- }
+// Uni search(SearchRequest request) {
+// final String baseQuery = buildBaseQuery(request);
+//
+// final StringBuilder sorting = new StringBuilder();
+// if (request.getSort() != null && !request.getSort().isEmpty()) {
+// sorting.append(" ORDER BY ");
+// sorting.append(String.join(", ", request.getSort().stream().map(sort -> sort.getField() + " " + Optional.ofNullable(sort.getDirection()).orElse(SemrackSortDirection.asc).name()).toList()));
+// }
+//
+// final StringBuilder paginate = new StringBuilder();
+// if (request.getPaginate() != null) {
+// final SemrackPagination pagination = request.getPaginate();
+// final Integer size = pagination.getSize() == null ? 200 : pagination.getSize();
+// final Integer page = pagination.getPage() == null ? 0 : pagination.getPage();
+//
+// paginate.append(" LIMIT ").append(size).append(" OFFSET ").append(size * page);
+// }
+//
+// return getSession()
+// .chain(s -> {
+// final SearchResult searchResult = SearchResult.builder().build();
+// return countDocuments(request)
+// .invoke(count -> searchResult.setPagination(PaginationInfo.builder()
+// .page(Optional.ofNullable(request.getPaginate()).map(SemrackPagination::getPage).orElse(0))
+// .size(Optional.ofNullable(request.getPaginate()).map(SemrackPagination::getSize).orElse(0))
+// .total(count)
+// .build()))
+// .call(() -> s
+// .createNativeQuery(baseQuery + sorting + paginate, Object.class).getResultList()
+// .invoke(results -> searchResult.setDocuments(project(request.getFields(), results))))
+// .map(count -> searchResult);
+// });
+// }
+//
+// String buildBaseQuery(SearchRequest request) {
+// final String lookup = lookupService.lookup(request.getFilter());
+// final String whereClause = lookup.isEmpty() ? "" : " WHERE " + lookup;
+//
+// if (request.getFields() == null || request.getFields().isEmpty()) {
+// return "SELECT document FROM semrack_document" + whereClause;
+// } else {
+// return "SELECT " + toJsonbPathExtract(request.getFields()) + " FROM semrack_document" + whereClause;
+// }
+// }
+//
+// String toJsonbPathExtract(List fields) {
+// return String.join(",", fields.stream().map(field -> {
+// final String serializedField = "'" + String.join("','", field.split("\\.")) + "'";
+// return "jsonb_extract_path(document, " + serializedField + ")";
+// }).toList());
+// }
+//
+// List project(List fields, Object results) {
+// final List> projectedResults = objectMapper.convertValue(results, List.class);
+// if (fields == null || fields.isEmpty()) {
+// return projectedResults.stream().map(result -> objectMapper.convertValue(result, SemrackDocument.class)).toList();
+// } else {
+// return projectedResults.stream().map(result -> {
+// final List row = fields.size() == 1 ? List.of(result) : objectMapper.convertValue(result, new TypeReference<>() {
+// });
+// final List rowMut = new ArrayList<>(row);
+// final List fieldCp = new ArrayList<>(fields);
+// final Map document = new HashMap<>();
+// while (!fieldCp.isEmpty() && !row.isEmpty()) {
+// final String field = fieldCp.removeFirst();
+// final Object value = rowMut.removeFirst();
+// pathMapper.map(field, document, value);
+// }
+// return objectMapper.convertValue(document, SemrackDocument.class);
+// }).toList();
+// }
+// }
}
diff --git a/modules/semrack-storage-postgres/runtime/src/main/resources/application.properties b/modules/semrack-storage-postgres/runtime/src/main/resources/application.properties
index e2217b5..d3ad2f6 100644
--- a/modules/semrack-storage-postgres/runtime/src/main/resources/application.properties
+++ b/modules/semrack-storage-postgres/runtime/src/main/resources/application.properties
@@ -2,6 +2,8 @@ quarkus.datasource.db-kind=postgresql
quarkus.flyway.enabled=true
quarkus.flyway.active=false
quarkus.flyway.migrate-at-start=true
+quarkus.flyway.out-of-order=true
+quarkus.flyway.ignore-missing-migrations=true
quarkus.native.resources.includes=src/main/resources/db/migration/**
quarkus.native.additional-build-args=-H:SerializationConfigurationResources=serialization-config.json
diff --git a/modules/semrack-storage-postgres/runtime/src/main/resources/db/migration/V1.0.0__Base.sql b/modules/semrack-storage-postgres/runtime/src/main/resources/db/migration/V1.0.1__StoragePg.sql
similarity index 100%
rename from modules/semrack-storage-postgres/runtime/src/main/resources/db/migration/V1.0.0__Base.sql
rename to modules/semrack-storage-postgres/runtime/src/main/resources/db/migration/V1.0.1__StoragePg.sql
diff --git a/modules/semrack-storage-postgres/runtime/src/test/java/fr/codeanddata/semrack/storage/postgres/operators/ContainsLookupTest.java b/modules/semrack-storage-postgres/runtime/src/test/java/fr/codeanddata/semrack/storage/postgres/operators/ContainsLookupTest.java
deleted file mode 100644
index b6c4283..0000000
--- a/modules/semrack-storage-postgres/runtime/src/test/java/fr/codeanddata/semrack/storage/postgres/operators/ContainsLookupTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package fr.codeanddata.semrack.storage.postgres.operators;
-
-import io.quarkus.test.junit.QuarkusTest;
-import io.smallrye.common.annotation.Identifier;
-import jakarta.inject.Inject;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
-import java.util.Map;
-
-@QuarkusTest
-class ContainsLookupTest {
-
- @Inject
- @Identifier("contains")
- ContainsLookup subject;
-
- @Test
- void testLookup() {
- final String lookup = subject.apply(Map.of("product", Map.of("sku", "xxx")));
- final String expectedLookup = "document @> '{\"product\":{\"sku\":\"xxx\"}}'";
- Assertions.assertEquals(expectedLookup, lookup);
- }
-
-}
diff --git a/modules/semrack-storage-postgres/runtime/src/test/java/fr/codeanddata/semrack/storage/postgres/operators/InLookupTest.java b/modules/semrack-storage-postgres/runtime/src/test/java/fr/codeanddata/semrack/storage/postgres/operators/InLookupTest.java
deleted file mode 100644
index 6132df7..0000000
--- a/modules/semrack-storage-postgres/runtime/src/test/java/fr/codeanddata/semrack/storage/postgres/operators/InLookupTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package fr.codeanddata.semrack.storage.postgres.operators;
-
-import fr.codeanddata.semrack.storage.postgres.dtos.InLookupParams;
-import io.quarkus.test.junit.QuarkusTest;
-import io.smallrye.common.annotation.Identifier;
-import jakarta.inject.Inject;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
-import java.util.List;
-import java.util.Map;
-
-@QuarkusTest
-class InLookupTest {
-
- @Inject
- @Identifier("in")
- InLookup subject;
-
- @Test
- void testConversion() {
- final String field = "root.parent.child.field";
- final List values = List.of("un", "deux", "trois");
- final Map inParams = Map.of(
- "field", field,
- "values", values
- );
-
- final InLookupParams convertedParams = subject.convert(inParams, InLookupParams.class);
- Assertions.assertEquals(field, convertedParams.getField());
- Assertions.assertEquals(values, convertedParams.getValues());
- }
-
- @Test
- void testLookup() {
- final String lookup = subject.apply(Map.of(
- "field", "lookup.field",
- "values", List.of("list", "of", "values")));
- final String expectedLookup = "document -> 'lookup' ->> 'field' in ('list', 'of', 'values')";
- Assertions.assertEquals(expectedLookup, lookup);
- }
-
-}
diff --git a/modules/semrack-storage-postgres/runtime/src/test/resources/application.properties b/modules/semrack-storage-postgres/runtime/src/test/resources/application.properties
new file mode 100644
index 0000000..aacfeff
--- /dev/null
+++ b/modules/semrack-storage-postgres/runtime/src/test/resources/application.properties
@@ -0,0 +1 @@
+quarkus.hibernate-orm.mapping.format.global=ignore
diff --git a/pom.xml b/pom.xml
index e8e50b4..d2e768e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,6 +9,7 @@
modules/semrack-core
+ modules/semrack-index-postgres
modules/semrack-storage-postgres
modules/semrack-api-rest
@@ -31,7 +32,7 @@
1.18.38
1.6.3
1.0-SNAPSHOT
- 3.25.3
+ 3.27.0
2.9.0
@@ -67,11 +68,26 @@
semrack-core
${semrack.version}
+
+ fr.codeanddata.semrack
+ semrack-core-testing
+ ${semrack.version}
+
fr.codeanddata.semrack
semrack-core-deployment
${semrack.version}
+
+ fr.codeanddata.semrack
+ semrack-index-postgres
+ ${semrack.version}
+
+
+ fr.codeanddata.semrack
+ semrack-index-postgres-deployment
+ ${semrack.version}
+
fr.codeanddata.semrack
semrack-storage-postgres