From 3d154458f276488981ea653297a837695ff30eae Mon Sep 17 00:00:00 2001 From: Andreas Hufler Date: Tue, 18 Mar 2025 16:12:27 +0100 Subject: [PATCH] rework response and meta objects --- .../toolbox/web/response/ItemResponse.java | 6 ++- .../web/response/ItemResponseWithMeta.java | 26 +++++++++++ .../toolbox/web/response/ListResponse.java | 6 ++- .../web/response/ListResponseWithMeta.java | 28 ++++++++++++ .../toolbox/web/response/PagedResponse.java | 43 ++++--------------- .../web/response/PagedResponseWithMeta.java | 28 ++++++++++++ .../toolbox/web/response/meta/Meta.java | 6 +++ .../web/response/meta/MetaWithPagination.java | 40 +++++++++++++++++ 8 files changed, 146 insertions(+), 37 deletions(-) create mode 100644 src/main/java/it/aboutbits/springboot/toolbox/web/response/ItemResponseWithMeta.java create mode 100644 src/main/java/it/aboutbits/springboot/toolbox/web/response/ListResponseWithMeta.java create mode 100644 src/main/java/it/aboutbits/springboot/toolbox/web/response/PagedResponseWithMeta.java create mode 100644 src/main/java/it/aboutbits/springboot/toolbox/web/response/meta/Meta.java create mode 100644 src/main/java/it/aboutbits/springboot/toolbox/web/response/meta/MetaWithPagination.java diff --git a/src/main/java/it/aboutbits/springboot/toolbox/web/response/ItemResponse.java b/src/main/java/it/aboutbits/springboot/toolbox/web/response/ItemResponse.java index c50e5c8..bd1ce58 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/web/response/ItemResponse.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/web/response/ItemResponse.java @@ -1,6 +1,10 @@ package it.aboutbits.springboot.toolbox.web.response; +import it.aboutbits.springboot.toolbox.web.response.meta.Meta; import lombok.NonNull; -public record ItemResponse(@NonNull T data) { +public final class ItemResponse extends ItemResponseWithMeta { + public ItemResponse(@NonNull T data) { + super(data, new Meta.EmptyMeta()); + } } diff --git a/src/main/java/it/aboutbits/springboot/toolbox/web/response/ItemResponseWithMeta.java b/src/main/java/it/aboutbits/springboot/toolbox/web/response/ItemResponseWithMeta.java new file mode 100644 index 0000000..27d3d1d --- /dev/null +++ b/src/main/java/it/aboutbits/springboot/toolbox/web/response/ItemResponseWithMeta.java @@ -0,0 +1,26 @@ +package it.aboutbits.springboot.toolbox.web.response; + +import it.aboutbits.springboot.toolbox.web.response.meta.Meta; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NonNull; + +@Getter +@EqualsAndHashCode +public class ItemResponseWithMeta { + private final T data; + private final M meta; + + public ItemResponseWithMeta(@NonNull T data, @NonNull M meta) { + this.data = data; + this.meta = meta; + } + + public T data() { + return data; + } + + public M meta() { + return meta; + } +} diff --git a/src/main/java/it/aboutbits/springboot/toolbox/web/response/ListResponse.java b/src/main/java/it/aboutbits/springboot/toolbox/web/response/ListResponse.java index 9d536a6..010e11c 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/web/response/ListResponse.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/web/response/ListResponse.java @@ -1,8 +1,12 @@ package it.aboutbits.springboot.toolbox.web.response; +import it.aboutbits.springboot.toolbox.web.response.meta.Meta; import lombok.NonNull; import java.util.List; -public record ListResponse(@NonNull List data) { +public final class ListResponse extends ListResponseWithMeta { + public ListResponse(@NonNull List data) { + super(data, new Meta.EmptyMeta()); + } } diff --git a/src/main/java/it/aboutbits/springboot/toolbox/web/response/ListResponseWithMeta.java b/src/main/java/it/aboutbits/springboot/toolbox/web/response/ListResponseWithMeta.java new file mode 100644 index 0000000..5defa29 --- /dev/null +++ b/src/main/java/it/aboutbits/springboot/toolbox/web/response/ListResponseWithMeta.java @@ -0,0 +1,28 @@ +package it.aboutbits.springboot.toolbox.web.response; + +import it.aboutbits.springboot.toolbox.web.response.meta.Meta; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NonNull; + +import java.util.List; + +@Getter +@EqualsAndHashCode +public class ListResponseWithMeta { + private final List data; + private final M meta; + + public ListResponseWithMeta(@NonNull List data, @NonNull M meta) { + this.data = data; + this.meta = meta; + } + + public List data() { + return data; + } + + public M meta() { + return meta; + } +} diff --git a/src/main/java/it/aboutbits/springboot/toolbox/web/response/PagedResponse.java b/src/main/java/it/aboutbits/springboot/toolbox/web/response/PagedResponse.java index 4b926d2..3bf2305 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/web/response/PagedResponse.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/web/response/PagedResponse.java @@ -1,28 +1,22 @@ package it.aboutbits.springboot.toolbox.web.response; +import it.aboutbits.springboot.toolbox.web.response.meta.MetaWithPagination; import lombok.NonNull; import org.springframework.data.domain.Page; import java.util.List; import java.util.function.Function; -public record PagedResponse( - @NonNull - List data, - @NonNull - MetaWithPagination meta -) { +public final class PagedResponse extends PagedResponseWithMeta { + + public PagedResponse(@NonNull List data, @NonNull MetaWithPagination meta) { + super(data, meta); + } public static PagedResponse of(@NonNull Page page) { return new PagedResponse<>( page.getContent(), - new MetaWithPagination( - new MetaWithPagination.Pagination( - page.getNumber(), - page.getSize(), - page.getTotalElements() - ) - ) + MetaWithPagination.of(page) ); } @@ -31,28 +25,7 @@ public static PagedResponse of(@NonNull Page page, @NonNull Functio return new PagedResponse<>( mapped.getContent(), - new MetaWithPagination( - new MetaWithPagination.Pagination( - mapped.getNumber(), - mapped.getSize(), - mapped.getTotalElements() - ) - ) + MetaWithPagination.of(page) ); } - - public record MetaWithPagination( - @NonNull - Pagination pagination - ) { - public record Pagination(long page, int size, long totalElements) { - public static Pagination of(@NonNull Page page) { - return new Pagination( - page.getNumber(), - page.getSize(), - page.getTotalElements() - ); - } - } - } } diff --git a/src/main/java/it/aboutbits/springboot/toolbox/web/response/PagedResponseWithMeta.java b/src/main/java/it/aboutbits/springboot/toolbox/web/response/PagedResponseWithMeta.java new file mode 100644 index 0000000..7675ee1 --- /dev/null +++ b/src/main/java/it/aboutbits/springboot/toolbox/web/response/PagedResponseWithMeta.java @@ -0,0 +1,28 @@ +package it.aboutbits.springboot.toolbox.web.response; + +import it.aboutbits.springboot.toolbox.web.response.meta.MetaWithPagination; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NonNull; + +import java.util.List; + +@Getter +@EqualsAndHashCode +public class PagedResponseWithMeta { + private final List data; + private final M meta; + + public PagedResponseWithMeta(@NonNull List data, @NonNull M meta) { + this.data = data; + this.meta = meta; + } + + public List data() { + return data; + } + + public M meta() { + return meta; + } +} diff --git a/src/main/java/it/aboutbits/springboot/toolbox/web/response/meta/Meta.java b/src/main/java/it/aboutbits/springboot/toolbox/web/response/meta/Meta.java new file mode 100644 index 0000000..c9bd1ca --- /dev/null +++ b/src/main/java/it/aboutbits/springboot/toolbox/web/response/meta/Meta.java @@ -0,0 +1,6 @@ +package it.aboutbits.springboot.toolbox.web.response.meta; + +public interface Meta { + record EmptyMeta() implements Meta { + } +} diff --git a/src/main/java/it/aboutbits/springboot/toolbox/web/response/meta/MetaWithPagination.java b/src/main/java/it/aboutbits/springboot/toolbox/web/response/meta/MetaWithPagination.java new file mode 100644 index 0000000..5280d6b --- /dev/null +++ b/src/main/java/it/aboutbits/springboot/toolbox/web/response/meta/MetaWithPagination.java @@ -0,0 +1,40 @@ +package it.aboutbits.springboot.toolbox.web.response.meta; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NonNull; +import org.springframework.data.domain.Page; + +@Getter +@EqualsAndHashCode +public class MetaWithPagination implements Meta { + private final Pagination pagination; + + public MetaWithPagination(@NonNull Pagination pagination) { + this.pagination = pagination; + } + + public Pagination pagination() { + return pagination; + } + + public static MetaWithPagination of(@NonNull Page page) { + return new MetaWithPagination( + new MetaWithPagination.Pagination( + page.getNumber(), + page.getSize(), + page.getTotalElements() + ) + ); + } + + public record Pagination(long page, int size, long totalElements) { + public static Pagination of(@NonNull Page page) { + return new Pagination( + page.getNumber(), + page.getSize(), + page.getTotalElements() + ); + } + } +}