From d3bb1c75f13a8c397b2fd4e12f61cef090267a00 Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Thu, 10 Feb 2022 23:24:26 +0300 Subject: [PATCH 1/3] release-0.3.0 --- pom.xml | 80 +++++++++++----- .../haiti/filter/quarkus/CriteriaFilter.java | 92 ++++++++++--------- .../haiti/filter/quarkus/FilterResult.java | 88 ++++++++++++++++++ 3 files changed, 197 insertions(+), 63 deletions(-) create mode 100644 src/main/java/dev/struchkov/haiti/filter/quarkus/FilterResult.java diff --git a/pom.xml b/pom.xml index 1d5ce0f..9d5b7d5 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ dev.struchkov.haiti.filter haiti-filter-quarkus-reactive - 0.2.0 + 0.3.0 jar Haiti Filter Reactive Quarkus @@ -18,14 +18,22 @@ https://raw.githubusercontent.com/haiti-projects/haiti-filter-reactive-quarkus/master/LICENSE + + GitHub + https://github.com/haiti-projects/haiti-filter-reactive-quarkus/issues + - 11 - 11 + 11 + ${java.version} + ${java.version} + UTF-8 + UTF-8 2.5.1.Final - 0.2.0 + 0.3.0 + 3.9.0 1.6.8 3.2.1 3.3.1 @@ -54,21 +62,24 @@ io.smallrye.reactive smallrye-mutiny-vertx-pg-client + + + + org.postgresql + postgresql + 42.3.1 + + + jakarta.xml.bind + jakarta.xml.bind-api + + + org.jetbrains + annotations + 20.1.0 + - - scm:git:https://github.com/haiti-projects/haiti-filter-reactive-quarkus.git - https://github.com/haiti-projects/haiti-filter-reactive-quarkus - scm:git:https://github.com/haiti-projects/haiti-filter-reactive-quarkus.git - - - - - ossrh - https://s01.oss.sonatype.org/content/repositories/snapshots - - - @@ -83,6 +94,15 @@ true + + org.apache.maven.plugins + maven-compiler-plugin + ${plugin.maven.compiler.ver} + + ${java.version} + ${java.version} + + org.apache.maven.plugins maven-source-plugin @@ -136,10 +156,14 @@ org.apache.maven.plugins maven-compiler-plugin - - 11 - 11 - + + + org.apache.maven.plugins + maven-source-plugin + + + org.apache.maven.plugins + maven-javadoc-plugin @@ -170,6 +194,20 @@ + + scm:git:https://github.com/haiti-projects/haiti-filter-reactive-quarkus.git + https://github.com/haiti-projects/haiti-filter-reactive-quarkus + scm:git:https://github.com/haiti-projects/haiti-filter-reactive-quarkus.git + + + + + + ossrh + https://s01.oss.sonatype.org/content/repositories/snapshots + + + uPagge diff --git a/src/main/java/dev/struchkov/haiti/filter/quarkus/CriteriaFilter.java b/src/main/java/dev/struchkov/haiti/filter/quarkus/CriteriaFilter.java index 0af0b65..b379d7f 100644 --- a/src/main/java/dev/struchkov/haiti/filter/quarkus/CriteriaFilter.java +++ b/src/main/java/dev/struchkov/haiti/filter/quarkus/CriteriaFilter.java @@ -1,30 +1,30 @@ package dev.struchkov.haiti.filter.quarkus; -import dev.struchkov.haiti.filter.Filter; -import dev.struchkov.haiti.filter.FilterQuery; import dev.struchkov.haiti.filter.jooq.CriteriaJooqFilter; -import dev.struchkov.haiti.filter.jooq.JoinTable; +import dev.struchkov.haiti.filter.jooq.CriteriaJooqQuery; import dev.struchkov.haiti.filter.jooq.SortContainer; import dev.struchkov.haiti.filter.jooq.SortType; import dev.struchkov.haiti.filter.jooq.page.PageableOffset; import dev.struchkov.haiti.filter.jooq.page.PageableSeek; -import io.smallrye.mutiny.Multi; +import io.smallrye.mutiny.Uni; import io.vertx.mutiny.pgclient.PgPool; import io.vertx.mutiny.sqlclient.Row; -import lombok.NonNull; import org.jooq.DSLContext; import org.jooq.Query; import org.jooq.conf.ParamType; +import java.util.List; import java.util.function.Consumer; import java.util.function.Function; +import java.util.stream.Collectors; import java.util.stream.StreamSupport; -public class CriteriaFilter implements Filter { +public class CriteriaFilter { private final PgPool pgPool; private final CriteriaJooqFilter jooqFilter; private final Function mapper; + private PageableOffset offset; private CriteriaFilter(PgPool pgPool, String table, DSLContext dslContext, Function mapper) { dslContext.settings().withParamType(ParamType.NAMED_OR_INLINED); @@ -37,81 +37,89 @@ public class CriteriaFilter implements Filter { return new CriteriaFilter<>(pgPool, table, dslContext, mapper); } - @Override - public Filter and(FilterQuery filterQuery) { + public CriteriaFilter and(CriteriaJooqQuery filterQuery) { jooqFilter.and(filterQuery); return this; } - @Override - public Filter and(Consumer query) { + public CriteriaFilter and(Consumer query) { jooqFilter.and(query); return this; } - @Override - public Filter or(FilterQuery filterQuery) { + + public CriteriaFilter or(CriteriaJooqQuery filterQuery) { jooqFilter.or(filterQuery); return this; } - @Override - public Filter or(Consumer query) { + public CriteriaFilter or(Consumer query) { jooqFilter.or(query); return this; } - @Override - public Filter not(FilterQuery filterQuery) { - jooqFilter.not(filterQuery); - return this; - } - - @Override - public Filter not(Consumer query) { - jooqFilter.not(query); - return this; - } - - public CriteriaFilter page(@NonNull PageableOffset offset) { + public CriteriaFilter page(PageableOffset offset) { jooqFilter.page(offset); + this.offset = offset; return this; } - public CriteriaFilter page(@NonNull PageableSeek seek) { + public CriteriaFilter page(PageableSeek seek) { jooqFilter.page(seek); return this; } - public CriteriaFilter join(@NonNull JoinTable... joinTables) { - jooqFilter.join(joinTables); - return this; - } - - public CriteriaFilter sort(@NonNull SortContainer container) { + public CriteriaFilter sort(SortContainer container) { jooqFilter.sort(container); return this; } - public CriteriaFilter sort(@NonNull String field, SortType sortType) { + public CriteriaFilter sort(String field, SortType sortType) { jooqFilter.sort(field, sortType); return this; } - public CriteriaFilter sort(@NonNull String field) { + public CriteriaFilter sort(String field) { jooqFilter.sort(field); return this; } - @Override - public Multi build() { + public Uni> build() { final Query query = jooqFilter.build(); return pgPool.preparedQuery(query.getSQL()) .execute() - .onItem() - .transformToMulti(rows -> Multi.createFrom().items( + .map(rows -> StreamSupport.stream(rows.spliterator(), false) - )) - .map(mapper); + .map(mapper) + .collect(Collectors.toList()) + ); } + + public Uni count() { + final Query query = jooqFilter.count(); + return pgPool.preparedQuery(query.getSQL()) + .execute() + .map(t -> t.iterator().next().getLong("count")); + } + + public Uni> filterResult() { + final Uni count = count(); + final Uni> content = build(); + return Uni.combine().all() + .unis(count, content) + .asTuple() + .map( + t -> { + final Long totalElements = t.getItem1(); + final List results = t.getItem2(); + return FilterResult.builder( + totalElements, results.size(), results + ) + .page(offset.getPageNumber()) + .totalPages(totalElements / results.size()) + .build(); + } + ); + } + } diff --git a/src/main/java/dev/struchkov/haiti/filter/quarkus/FilterResult.java b/src/main/java/dev/struchkov/haiti/filter/quarkus/FilterResult.java new file mode 100644 index 0000000..3b754ce --- /dev/null +++ b/src/main/java/dev/struchkov/haiti/filter/quarkus/FilterResult.java @@ -0,0 +1,88 @@ +package dev.struchkov.haiti.filter.quarkus; + +import dev.struchkov.haiti.utils.Assert; + +import java.util.List; + +public class FilterResult { + + private final Long totalElements; + private final Integer elements; + private Long totalPages; + private Integer page; + private final List content; + + private FilterResult(Builder builder) { + this.totalElements = builder.totalElements; + this.elements = builder.elements; + this.totalPages = builder.totalPages; + this.page = builder.page; + this.content = builder.content; + } + + public Long getTotalElements() { + return totalElements; + } + + public Integer getElements() { + return elements; + } + + public Long getTotalPages() { + return totalPages; + } + + public Integer getPage() { + return page; + } + + public List getContent() { + return content; + } + + public static Builder builder( + Long totalElements, + Integer elements, + List content + ) { + Assert.isNotNull(totalElements, elements, content); + return new FilterResult.Builder<>(totalElements, elements, content); + } + + public static class Builder { + private final Long totalElements; + private final Integer elements; + private final List content; + private Long totalPages; + private Integer page; + + private Builder(Long totalElements, Integer elements, List content) { + this.totalElements = totalElements; + this.elements = elements; + this.content = content; + } + + public Builder totalPages(Long totalPages) { + this.totalPages = totalPages; + return this; + } + + public Builder page(Integer page) { + this.page = page; + return this; + } + + public FilterResult build() { + return new FilterResult<>(this); + } + + } + + public FilterResult replaceContent(List list) { + return FilterResult.builder(totalElements, elements, list) + .page(page) + .totalPages(totalPages) + .build(); + } + +} From d440002b52e57322bd37930b301a796e930a566f Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Thu, 10 Feb 2022 23:26:44 +0300 Subject: [PATCH 2/3] release-0.3.0 --- .gitlab-ci.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..65f01de --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,17 @@ +image: maven:3.8.4-openjdk-11 +variables: + MAVEN_OPTS: "-Dmaven.repo.local=./.m2/repository" + +stages: + - deploy + +deploy: + stage: deploy + only: + - /^v.*$/ + except: + - branches + before_script: + - gpg --pinentry-mode loopback --passphrase $GPG_PASSPHRASE --import $GPG_PRIVATE_KEY + script: + - 'mvn --settings $MAVEN_SETTINGS -U -P ossrh,release clean deploy' \ No newline at end of file From 0c8a0afbc3b24a2ddfc50fbf9dac7385840edbe1 Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Mon, 14 Feb 2022 10:04:35 +0300 Subject: [PATCH 3/3] release-0.3.1 --- pom.xml | 2 +- .../java/dev/struchkov/haiti/filter/quarkus/CriteriaFilter.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 9d5b7d5..daeaf6e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ dev.struchkov.haiti.filter haiti-filter-quarkus-reactive - 0.3.0 + 0.3.1 jar Haiti Filter Reactive Quarkus diff --git a/src/main/java/dev/struchkov/haiti/filter/quarkus/CriteriaFilter.java b/src/main/java/dev/struchkov/haiti/filter/quarkus/CriteriaFilter.java index b379d7f..83eb310 100644 --- a/src/main/java/dev/struchkov/haiti/filter/quarkus/CriteriaFilter.java +++ b/src/main/java/dev/struchkov/haiti/filter/quarkus/CriteriaFilter.java @@ -116,7 +116,7 @@ public class CriteriaFilter { totalElements, results.size(), results ) .page(offset.getPageNumber()) - .totalPages(totalElements / results.size()) + .totalPages(results.isEmpty() ? offset.getPageNumber() : totalElements / results.size()) .build(); } );