From c627484b490d3bf52411299f3af72a9cea0e94f1 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Wed, 2 Apr 2025 21:42:17 +0200 Subject: [PATCH] [FIX] annotation in the common model --- .../kar/archidata/annotation/apiGenerator/ApiNotNull.java | 4 ++-- src/org/kar/archidata/model/GenericData.java | 4 ++++ src/org/kar/archidata/model/GenericDataSoftDelete.java | 2 ++ src/org/kar/archidata/model/OIDGenericData.java | 6 ++++-- src/org/kar/archidata/model/OIDGenericDataSoftDelete.java | 2 ++ src/org/kar/archidata/model/UUIDGenericData.java | 2 ++ src/org/kar/archidata/model/token/JwtPayload.java | 2 +- src/org/kar/archidata/model/token/JwtToken.java | 3 +++ 8 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/org/kar/archidata/annotation/apiGenerator/ApiNotNull.java b/src/org/kar/archidata/annotation/apiGenerator/ApiNotNull.java index 7f443ef..3915ceb 100644 --- a/src/org/kar/archidata/annotation/apiGenerator/ApiNotNull.java +++ b/src/org/kar/archidata/annotation/apiGenerator/ApiNotNull.java @@ -13,7 +13,7 @@ import java.lang.annotation.Target; * to ensure precise validation and documentation of method parameters. * *

Usage: - * - Target: This annotation can be applied to parameters. + * - Target: This annotation can be applied to field. * - Retention: The annotation is retained at runtime, allowing it to be * processed by frameworks or libraries that handle code generation logic. * @@ -33,7 +33,7 @@ import java.lang.annotation.Target; * * In this example, the `username` field in the `User` class is explicitly marked as non-null in the generated API. */ -@Target({ ElementType.PARAMETER }) +@Target({ ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) public @interface ApiNotNull { /** diff --git a/src/org/kar/archidata/model/GenericData.java b/src/org/kar/archidata/model/GenericData.java index b4cf5fa..b49f9ef 100644 --- a/src/org/kar/archidata/model/GenericData.java +++ b/src/org/kar/archidata/model/GenericData.java @@ -2,6 +2,8 @@ package org.kar.archidata.model; import org.kar.archidata.annotation.apiGenerator.ApiAccessLimitation; import org.kar.archidata.annotation.apiGenerator.ApiGenerationMode; +import org.kar.archidata.annotation.apiGenerator.ApiNotNull; +import org.kar.archidata.annotation.checker.ReadOnlyField; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; @@ -15,6 +17,8 @@ public class GenericData extends GenericTiming { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(nullable = false, unique = true) @Schema(description = "Unique Id of the object", example = "123456") + @ReadOnlyField + @ApiNotNull @ApiAccessLimitation(creatable = false, updatable = false) public Long id = null; } diff --git a/src/org/kar/archidata/model/GenericDataSoftDelete.java b/src/org/kar/archidata/model/GenericDataSoftDelete.java index 429c970..a5fa9ca 100644 --- a/src/org/kar/archidata/model/GenericDataSoftDelete.java +++ b/src/org/kar/archidata/model/GenericDataSoftDelete.java @@ -4,6 +4,7 @@ import org.kar.archidata.annotation.DataDeleted; import org.kar.archidata.annotation.DataNotRead; import org.kar.archidata.annotation.apiGenerator.ApiAccessLimitation; import org.kar.archidata.annotation.apiGenerator.ApiGenerationMode; +import org.kar.archidata.annotation.checker.ReadOnlyField; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.annotation.Nullable; @@ -18,6 +19,7 @@ public class GenericDataSoftDelete extends GenericData { @DataDeleted @Schema(description = "Deleted state", hidden = true) @Nullable + @ReadOnlyField @ApiAccessLimitation(creatable = false, updatable = false) public Boolean deleted = null; } diff --git a/src/org/kar/archidata/model/OIDGenericData.java b/src/org/kar/archidata/model/OIDGenericData.java index 00180d2..fe5f99b 100644 --- a/src/org/kar/archidata/model/OIDGenericData.java +++ b/src/org/kar/archidata/model/OIDGenericData.java @@ -3,11 +3,12 @@ package org.kar.archidata.model; import org.bson.types.ObjectId; import org.kar.archidata.annotation.apiGenerator.ApiAccessLimitation; import org.kar.archidata.annotation.apiGenerator.ApiGenerationMode; +import org.kar.archidata.annotation.apiGenerator.ApiNotNull; +import org.kar.archidata.annotation.checker.ReadOnlyField; import dev.morphia.annotations.Id; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; -import jakarta.validation.constraints.NotNull; @ApiGenerationMode(create = true, update = true) public class OIDGenericData extends GenericTiming { @@ -15,7 +16,8 @@ public class OIDGenericData extends GenericTiming { @jakarta.persistence.Id @Column(nullable = false, unique = true, name = "_id") @Schema(description = "Unique ObjectID of the object", example = "65161616841351") - @NotNull + @ReadOnlyField + @ApiNotNull @ApiAccessLimitation(creatable = false, updatable = false) public ObjectId oid = null; } diff --git a/src/org/kar/archidata/model/OIDGenericDataSoftDelete.java b/src/org/kar/archidata/model/OIDGenericDataSoftDelete.java index b41a0f7..4e7ac77 100644 --- a/src/org/kar/archidata/model/OIDGenericDataSoftDelete.java +++ b/src/org/kar/archidata/model/OIDGenericDataSoftDelete.java @@ -4,6 +4,7 @@ import org.kar.archidata.annotation.DataDeleted; import org.kar.archidata.annotation.DataNotRead; import org.kar.archidata.annotation.apiGenerator.ApiAccessLimitation; import org.kar.archidata.annotation.apiGenerator.ApiGenerationMode; +import org.kar.archidata.annotation.checker.ReadOnlyField; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.annotation.Nullable; @@ -18,6 +19,7 @@ public class OIDGenericDataSoftDelete extends OIDGenericData { @DataDeleted @Schema(description = "Deleted state", hidden = true) @Nullable + @ReadOnlyField @ApiAccessLimitation(creatable = false, updatable = false) public Boolean deleted = null; } diff --git a/src/org/kar/archidata/model/UUIDGenericData.java b/src/org/kar/archidata/model/UUIDGenericData.java index f6c9c9e..5015827 100644 --- a/src/org/kar/archidata/model/UUIDGenericData.java +++ b/src/org/kar/archidata/model/UUIDGenericData.java @@ -4,6 +4,7 @@ import java.util.UUID; import org.kar.archidata.annotation.apiGenerator.ApiAccessLimitation; import org.kar.archidata.annotation.apiGenerator.ApiGenerationMode; +import org.kar.archidata.annotation.apiGenerator.ApiNotNull; import org.kar.archidata.annotation.checker.ReadOnlyField; import io.swagger.v3.oas.annotations.media.Schema; @@ -18,6 +19,7 @@ public class UUIDGenericData extends GenericTiming { @Column(nullable = false, unique = true) @Schema(description = "Unique UUID of the object", example = "e6b33c1c-d24d-11ee-b616-02420a030102") @ReadOnlyField + @ApiNotNull @ApiAccessLimitation(creatable = false, updatable = false) public UUID uuid = null; } diff --git a/src/org/kar/archidata/model/token/JwtPayload.java b/src/org/kar/archidata/model/token/JwtPayload.java index 2827b16..baa2378 100644 --- a/src/org/kar/archidata/model/token/JwtPayload.java +++ b/src/org/kar/archidata/model/token/JwtPayload.java @@ -16,7 +16,7 @@ public class JwtPayload { public String iss; // Access Right Map> @NotNull - public Map> right; + public Map<@NotNull String, Map<@NotNull String, @NotNull Long>> right; // user name @NotNull public String login; diff --git a/src/org/kar/archidata/model/token/JwtToken.java b/src/org/kar/archidata/model/token/JwtToken.java index 15705d5..bb1a1b1 100644 --- a/src/org/kar/archidata/model/token/JwtToken.java +++ b/src/org/kar/archidata/model/token/JwtToken.java @@ -1,11 +1,14 @@ package org.kar.archidata.model.token; +import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; public class JwtToken { @NotNull + @Valid public JwtHeader header; @NotNull + @Valid public JwtPayload payload; @NotNull public String signature;