From 52691411f378e9cdb094d7e5269b231918ed6166 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Oct 2026 10:00:29 +0000 Subject: [PATCH 1/3] Bump org.springframework.boot:spring-boot-starter-parent Bumps the spring-boot-dependencies group with 1 update in the / directory: [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot). Updates `org.springframework.boot:spring-boot-starter-parent` from 4.1.1 to 4.1.2 - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v4.1.1...v4.1.2) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 4.1.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring-boot-dependencies ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2369bba8..7b79f383 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 4.1.1 + 4.1.2 dev.learning.xapi From b6d44d1d54afbfd96bd88ba9af6daabb5fb1de8f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Oct 2026 10:31:21 +0000 Subject: [PATCH 2/3] Fix Lombok compatibility with Java 25 / Spring Boot 4.1.2 Co-authored-by: thomasturrell <1552612+thomasturrell@users.noreply.github.com> --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 7b79f383..27495d3b 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,7 @@ 14.3.0 1.0.0 0.13.0 + 1.18.42 5.5.1 3.27.7 From f626000235c2f7dab4d4211c9455992b60c76fdf Mon Sep 17 00:00:00 2001 From: Thomas Turrell-Croft <1552612+thomasturrell@users.noreply.github.com> Date: Tue, 27 Oct 2026 11:25:03 +0000 Subject: [PATCH 3/3] Fix builder annotation collision without pinning Lombok Fully qualify lombok.Builder so Lombok 1.18.48 can retain the public nested Builder class names. Remove the version override and use Spring Boot dependency management. --- pom.xml | 1 - .../dev/learning/xapi/client/GetActivityProfilesRequest.java | 3 +-- .../main/java/dev/learning/xapi/client/GetActivityRequest.java | 3 +-- .../java/dev/learning/xapi/client/GetAgentProfilesRequest.java | 3 +-- .../main/java/dev/learning/xapi/client/GetAgentsRequest.java | 3 +-- .../dev/learning/xapi/client/GetMoreStatementsRequest.java | 3 +-- .../java/dev/learning/xapi/client/GetStatementsRequest.java | 3 +-- .../java/dev/learning/xapi/client/PostStatementRequest.java | 3 +-- .../java/dev/learning/xapi/client/PostStatementsRequest.java | 3 +-- xapi-model/src/main/java/dev/learning/xapi/model/About.java | 3 +-- xapi-model/src/main/java/dev/learning/xapi/model/Account.java | 3 +-- xapi-model/src/main/java/dev/learning/xapi/model/Activity.java | 3 +-- .../main/java/dev/learning/xapi/model/ActivityDefinition.java | 3 +-- .../src/main/java/dev/learning/xapi/model/ActivityState.java | 3 +-- .../src/main/java/dev/learning/xapi/model/Attachment.java | 3 +-- xapi-model/src/main/java/dev/learning/xapi/model/Context.java | 3 +-- .../main/java/dev/learning/xapi/model/ContextActivities.java | 3 +-- .../java/dev/learning/xapi/model/InteractionComponent.java | 3 +-- xapi-model/src/main/java/dev/learning/xapi/model/Person.java | 3 +-- xapi-model/src/main/java/dev/learning/xapi/model/Result.java | 3 +-- xapi-model/src/main/java/dev/learning/xapi/model/Score.java | 3 +-- .../src/main/java/dev/learning/xapi/model/Statement.java | 3 +-- .../main/java/dev/learning/xapi/model/StatementReference.java | 3 +-- .../src/main/java/dev/learning/xapi/model/StatementResult.java | 3 +-- .../src/main/java/dev/learning/xapi/model/SubStatement.java | 3 +-- xapi-model/src/main/java/dev/learning/xapi/model/Verb.java | 3 +-- 26 files changed, 25 insertions(+), 51 deletions(-) diff --git a/pom.xml b/pom.xml index 27495d3b..7b79f383 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,6 @@ 14.3.0 1.0.0 0.13.0 - 1.18.42 5.5.1 3.27.7 diff --git a/xapi-client/src/main/java/dev/learning/xapi/client/GetActivityProfilesRequest.java b/xapi-client/src/main/java/dev/learning/xapi/client/GetActivityProfilesRequest.java index 1028ee89..6146fffe 100644 --- a/xapi-client/src/main/java/dev/learning/xapi/client/GetActivityProfilesRequest.java +++ b/xapi-client/src/main/java/dev/learning/xapi/client/GetActivityProfilesRequest.java @@ -7,7 +7,6 @@ import java.net.URI; import java.time.Instant; import java.util.Map; -import lombok.Builder; import lombok.NonNull; import org.springframework.http.HttpMethod; import org.springframework.web.util.UriBuilder; @@ -22,7 +21,7 @@ * Document GET * @author Thomas Turrell-Croft */ -@Builder +@lombok.Builder public class GetActivityProfilesRequest implements Request { /** The Activity id associated with these Profile documents. */ diff --git a/xapi-client/src/main/java/dev/learning/xapi/client/GetActivityRequest.java b/xapi-client/src/main/java/dev/learning/xapi/client/GetActivityRequest.java index 440ee8a0..5f335741 100644 --- a/xapi-client/src/main/java/dev/learning/xapi/client/GetActivityRequest.java +++ b/xapi-client/src/main/java/dev/learning/xapi/client/GetActivityRequest.java @@ -6,7 +6,6 @@ import java.net.URI; import java.util.Map; -import lombok.Builder; import lombok.Getter; import lombok.NonNull; import org.springframework.http.HttpMethod; @@ -22,7 +21,7 @@ * @author István Rátkai (Selindek) */ @Getter -@Builder +@lombok.Builder public class GetActivityRequest implements Request { @NonNull private final URI activityId; diff --git a/xapi-client/src/main/java/dev/learning/xapi/client/GetAgentProfilesRequest.java b/xapi-client/src/main/java/dev/learning/xapi/client/GetAgentProfilesRequest.java index 88785959..035077b4 100644 --- a/xapi-client/src/main/java/dev/learning/xapi/client/GetAgentProfilesRequest.java +++ b/xapi-client/src/main/java/dev/learning/xapi/client/GetAgentProfilesRequest.java @@ -8,7 +8,6 @@ import java.time.Instant; import java.util.Map; import java.util.function.Consumer; -import lombok.Builder; import lombok.Getter; import lombok.NonNull; import lombok.SneakyThrows; @@ -27,7 +26,7 @@ * @author Thomas Turrell-Croft */ @Getter -@Builder +@lombok.Builder public class GetAgentProfilesRequest implements Request { private static final ObjectMapper objectMapper = diff --git a/xapi-client/src/main/java/dev/learning/xapi/client/GetAgentsRequest.java b/xapi-client/src/main/java/dev/learning/xapi/client/GetAgentsRequest.java index bec28853..53eb2c65 100644 --- a/xapi-client/src/main/java/dev/learning/xapi/client/GetAgentsRequest.java +++ b/xapi-client/src/main/java/dev/learning/xapi/client/GetAgentsRequest.java @@ -7,7 +7,6 @@ import dev.learning.xapi.model.Agent; import java.util.Map; import java.util.function.Consumer; -import lombok.Builder; import lombok.NonNull; import lombok.SneakyThrows; import org.springframework.http.HttpMethod; @@ -26,7 +25,7 @@ * Resource * @author Thomas Turrell-Croft */ -@Builder +@lombok.Builder public class GetAgentsRequest implements Request { private static final ObjectMapper objectMapper = diff --git a/xapi-client/src/main/java/dev/learning/xapi/client/GetMoreStatementsRequest.java b/xapi-client/src/main/java/dev/learning/xapi/client/GetMoreStatementsRequest.java index 9373d213..97953c77 100644 --- a/xapi-client/src/main/java/dev/learning/xapi/client/GetMoreStatementsRequest.java +++ b/xapi-client/src/main/java/dev/learning/xapi/client/GetMoreStatementsRequest.java @@ -6,7 +6,6 @@ import java.net.URI; import java.util.Map; -import lombok.Builder; import lombok.Getter; import lombok.NonNull; import org.springframework.http.HttpMethod; @@ -21,7 +20,7 @@ * @author Thomas Turrell-Croft * @author István Rátkai (Selindek) */ -@Builder +@lombok.Builder @Getter public class GetMoreStatementsRequest implements Request { diff --git a/xapi-client/src/main/java/dev/learning/xapi/client/GetStatementsRequest.java b/xapi-client/src/main/java/dev/learning/xapi/client/GetStatementsRequest.java index ccd7d77f..565043a6 100644 --- a/xapi-client/src/main/java/dev/learning/xapi/client/GetStatementsRequest.java +++ b/xapi-client/src/main/java/dev/learning/xapi/client/GetStatementsRequest.java @@ -13,7 +13,6 @@ import java.util.Optional; import java.util.UUID; import java.util.function.Consumer; -import lombok.Builder; import lombok.Getter; import lombok.SneakyThrows; import org.springframework.http.HttpMethod; @@ -30,7 +29,7 @@ * Statements * @author Thomas Turrell-Croft */ -@Builder +@lombok.Builder @Getter public class GetStatementsRequest implements Request { diff --git a/xapi-client/src/main/java/dev/learning/xapi/client/PostStatementRequest.java b/xapi-client/src/main/java/dev/learning/xapi/client/PostStatementRequest.java index 97ff8706..7862899c 100644 --- a/xapi-client/src/main/java/dev/learning/xapi/client/PostStatementRequest.java +++ b/xapi-client/src/main/java/dev/learning/xapi/client/PostStatementRequest.java @@ -8,7 +8,6 @@ import java.security.PrivateKey; import java.util.Map; import java.util.function.Consumer; -import lombok.Builder; import lombok.Getter; import org.springframework.http.HttpMethod; import org.springframework.web.util.UriBuilder; @@ -21,7 +20,7 @@ * Statements * @author Thomas Turrell-Croft */ -@Builder +@lombok.Builder @Getter public class PostStatementRequest implements Request { diff --git a/xapi-client/src/main/java/dev/learning/xapi/client/PostStatementsRequest.java b/xapi-client/src/main/java/dev/learning/xapi/client/PostStatementsRequest.java index e3cdf3c6..a8bddf95 100644 --- a/xapi-client/src/main/java/dev/learning/xapi/client/PostStatementsRequest.java +++ b/xapi-client/src/main/java/dev/learning/xapi/client/PostStatementsRequest.java @@ -8,7 +8,6 @@ import java.util.Arrays; import java.util.List; import java.util.Map; -import lombok.Builder; import lombok.Getter; import org.springframework.http.HttpMethod; import org.springframework.web.util.UriBuilder; @@ -21,7 +20,7 @@ * Statements * @author Thomas Turrell-Croft */ -@Builder +@lombok.Builder @Getter public class PostStatementsRequest implements Request { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/About.java b/xapi-model/src/main/java/dev/learning/xapi/model/About.java index 4cff953d..06319da7 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/About.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/About.java @@ -9,7 +9,6 @@ import java.net.URI; import java.util.LinkedHashMap; import java.util.List; -import lombok.Builder; import lombok.Value; /** @@ -22,7 +21,7 @@ * About */ @Value -@Builder +@lombok.Builder @JsonInclude(Include.NON_EMPTY) public class About { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/Account.java b/xapi-model/src/main/java/dev/learning/xapi/model/Account.java index 2374beb0..b731fbf2 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/Account.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/Account.java @@ -10,7 +10,6 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import java.net.URI; -import lombok.Builder; import lombok.Value; /** @@ -22,7 +21,7 @@ * Account */ @Value -@Builder +@lombok.Builder @JsonInclude(Include.NON_EMPTY) public class Account { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/Activity.java b/xapi-model/src/main/java/dev/learning/xapi/model/Activity.java index e387a1e5..37c39a11 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/Activity.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/Activity.java @@ -13,7 +13,6 @@ import java.net.URI; import java.util.function.Consumer; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.EqualsAndHashCode; import lombok.Value; @@ -26,7 +25,7 @@ * Activity */ @Value -@Builder +@lombok.Builder @AllArgsConstructor @EqualsAndHashCode(exclude = "definition") public class Activity implements StatementObject, SubStatementObject { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/ActivityDefinition.java b/xapi-model/src/main/java/dev/learning/xapi/model/ActivityDefinition.java index bc5b5f09..ee87b2b3 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/ActivityDefinition.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/ActivityDefinition.java @@ -14,7 +14,6 @@ import java.util.Locale; import java.util.Map; import java.util.function.Consumer; -import lombok.Builder; import lombok.Value; /** @@ -35,7 +34,7 @@ * Requirements */ @Value -@Builder +@lombok.Builder @JsonInclude(Include.NON_EMPTY) public class ActivityDefinition { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/ActivityState.java b/xapi-model/src/main/java/dev/learning/xapi/model/ActivityState.java index d3875cd3..f4739038 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/ActivityState.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/ActivityState.java @@ -10,7 +10,6 @@ import dev.learning.xapi.model.validation.constraints.Variant; import jakarta.validation.Valid; import java.util.UUID; -import lombok.Builder; import lombok.Value; import tools.jackson.databind.node.ObjectNode; @@ -23,7 +22,7 @@ * Activity State */ @Value -@Builder +@lombok.Builder @JsonInclude(Include.NON_EMPTY) public class ActivityState { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/Attachment.java b/xapi-model/src/main/java/dev/learning/xapi/model/Attachment.java index 3ccb705f..0fa3d30e 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/Attachment.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/Attachment.java @@ -14,7 +14,6 @@ import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.Locale; -import lombok.Builder; import lombok.EqualsAndHashCode; import lombok.SneakyThrows; import lombok.Value; @@ -28,7 +27,7 @@ * Attachment */ @Value -@Builder +@lombok.Builder @JsonInclude(Include.NON_EMPTY) @EqualsAndHashCode(of = "sha2") public class Attachment { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/Context.java b/xapi-model/src/main/java/dev/learning/xapi/model/Context.java index 56805e6f..4b6be97d 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/Context.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/Context.java @@ -17,7 +17,6 @@ import java.util.Locale; import java.util.UUID; import java.util.function.Consumer; -import lombok.Builder; import lombok.Value; import tools.jackson.databind.annotation.JsonSerialize; @@ -29,7 +28,7 @@ * Context */ @Value -@Builder +@lombok.Builder @JsonInclude(Include.NON_EMPTY) public class Context { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/ContextActivities.java b/xapi-model/src/main/java/dev/learning/xapi/model/ContextActivities.java index 33bcd55c..53cdbacf 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/ContextActivities.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/ContextActivities.java @@ -11,7 +11,6 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; -import lombok.Builder; import lombok.Value; /** @@ -23,7 +22,7 @@ * Context Activities */ @Value -@Builder +@lombok.Builder @JsonInclude(Include.NON_EMPTY) public class ContextActivities { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/InteractionComponent.java b/xapi-model/src/main/java/dev/learning/xapi/model/InteractionComponent.java index 0004b1d7..eddf7d91 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/InteractionComponent.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/InteractionComponent.java @@ -8,7 +8,6 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import jakarta.validation.constraints.NotNull; import java.util.Locale; -import lombok.Builder; import lombok.EqualsAndHashCode; import lombok.Value; @@ -21,7 +20,7 @@ * Interaction Components */ @Value -@Builder +@lombok.Builder @JsonInclude(Include.NON_EMPTY) @EqualsAndHashCode(of = "id") public class InteractionComponent { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/Person.java b/xapi-model/src/main/java/dev/learning/xapi/model/Person.java index 826c9d27..3f4990f8 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/Person.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/Person.java @@ -14,7 +14,6 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; -import lombok.Builder; import lombok.Value; /** @@ -26,7 +25,7 @@ * Person */ @Value -@Builder +@lombok.Builder @JsonInclude(Include.NON_EMPTY) @JsonIgnoreProperties(value = {"firstName", "lastName"}) public class Person { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/Result.java b/xapi-model/src/main/java/dev/learning/xapi/model/Result.java index 6da6efc2..2c4de4a1 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/Result.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/Result.java @@ -13,7 +13,6 @@ import java.net.URI; import java.util.LinkedHashMap; import java.util.function.Consumer; -import lombok.Builder; import lombok.Value; /** @@ -24,7 +23,7 @@ * Result */ @Value -@Builder +@lombok.Builder @JsonInclude(Include.NON_EMPTY) public class Result { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/Score.java b/xapi-model/src/main/java/dev/learning/xapi/model/Score.java index 30a4383d..e1d597bb 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/Score.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/Score.java @@ -7,7 +7,6 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import dev.learning.xapi.model.validation.constraints.ScaledScore; -import lombok.Builder; import lombok.Value; /** @@ -18,7 +17,7 @@ * Score */ @Value -@Builder +@lombok.Builder @JsonInclude(Include.NON_EMPTY) public class Score { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/Statement.java b/xapi-model/src/main/java/dev/learning/xapi/model/Statement.java index ab27229f..576b61eb 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/Statement.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/Statement.java @@ -30,7 +30,6 @@ import java.util.Map; import java.util.UUID; import java.util.function.Consumer; -import lombok.Builder; import lombok.EqualsAndHashCode; import lombok.Value; import lombok.With; @@ -49,7 +48,7 @@ @ValidStatementPlatform @ValidStatementRevision @ValidStatementVerb -@Builder(toBuilder = true) +@lombok.Builder(toBuilder = true) @JsonInclude(Include.NON_EMPTY) @EqualsAndHashCode(of = {"actor", "verb", "object", "result", "context"}) public class Statement implements CoreStatement { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/StatementReference.java b/xapi-model/src/main/java/dev/learning/xapi/model/StatementReference.java index 07a4b51d..9bdbd60f 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/StatementReference.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/StatementReference.java @@ -7,7 +7,6 @@ import dev.learning.xapi.model.validation.constraints.Variant; import jakarta.validation.constraints.NotNull; import java.util.UUID; -import lombok.Builder; import lombok.Value; /** @@ -19,7 +18,7 @@ * Statement Reference */ @Value -@Builder +@lombok.Builder public class StatementReference implements StatementObject, SubStatementObject { private final String objectType = "StatementRef"; // NOSONAR diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/StatementResult.java b/xapi-model/src/main/java/dev/learning/xapi/model/StatementResult.java index 3fa1d1ee..e8b865b9 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/StatementResult.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/StatementResult.java @@ -10,7 +10,6 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; -import lombok.Builder; import lombok.Value; /** @@ -22,7 +21,7 @@ * Statement Result */ @Value -@Builder +@lombok.Builder @JsonInclude(Include.NON_NULL) // Statements array could be empty public class StatementResult { diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/SubStatement.java b/xapi-model/src/main/java/dev/learning/xapi/model/SubStatement.java index 2d69e254..347741b2 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/SubStatement.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/SubStatement.java @@ -14,7 +14,6 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; -import lombok.Builder; import lombok.EqualsAndHashCode; import lombok.Value; @@ -26,7 +25,7 @@ * SubStatement */ @Value -@Builder +@lombok.Builder @ValidStatementPlatform @ValidStatementRevision @EqualsAndHashCode(exclude = {"timestamp", "attachments"}) diff --git a/xapi-model/src/main/java/dev/learning/xapi/model/Verb.java b/xapi-model/src/main/java/dev/learning/xapi/model/Verb.java index 24429771..840285ea 100644 --- a/xapi-model/src/main/java/dev/learning/xapi/model/Verb.java +++ b/xapi-model/src/main/java/dev/learning/xapi/model/Verb.java @@ -12,7 +12,6 @@ import java.net.URI; import java.util.Locale; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.EqualsAndHashCode; import lombok.Value; import lombok.With; @@ -27,7 +26,7 @@ */ @With @Value -@Builder +@lombok.Builder @AllArgsConstructor @EqualsAndHashCode(of = "id") @JsonInclude(Include.NON_EMPTY)