From 187ffba188966f4907c5c61ae6e4f2cb81e84049 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Mon, 27 May 2024 17:00:31 +0200 Subject: [PATCH] [FEAT] manage @nullable contrainst on list and Map too. --- .../kar/archidata/annotation/AnnotationTools.java | 9 +++++++++ .../archidata/externalRestApi/TsClassElement.java | 10 +++++++++- .../externalRestApi/model/ClassObjectModel.java | 13 ++++++++----- .../kar/archidata/model/GenericDataSoftDelete.java | 2 ++ src/org/kar/archidata/model/GenericTiming.java | 3 +++ .../archidata/model/UUIDGenericDataSoftDelete.java | 2 ++ 6 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/org/kar/archidata/annotation/AnnotationTools.java b/src/org/kar/archidata/annotation/AnnotationTools.java index 2bde588..9e2caf4 100644 --- a/src/org/kar/archidata/annotation/AnnotationTools.java +++ b/src/org/kar/archidata/annotation/AnnotationTools.java @@ -11,6 +11,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.annotation.Nullable; import jakarta.persistence.Column; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @@ -258,6 +259,14 @@ public class AnnotationTools { return !((Column) annotation[0]).nullable(); } + public static boolean getNullable(final Field element) throws Exception { + final Annotation[] annotation = element.getDeclaredAnnotationsByType(Nullable.class); + if (annotation.length == 0) { + return false; + } + return true; + } + public static boolean getConstraintsNotNull(final Field element) throws Exception { final Annotation[] annotation = element.getDeclaredAnnotationsByType(NotNull.class); if (annotation.length == 0) { diff --git a/src/org/kar/archidata/externalRestApi/TsClassElement.java b/src/org/kar/archidata/externalRestApi/TsClassElement.java index a63a7c8..18f8e65 100644 --- a/src/org/kar/archidata/externalRestApi/TsClassElement.java +++ b/src/org/kar/archidata/externalRestApi/TsClassElement.java @@ -216,10 +216,18 @@ public class TsClassElement { } public String optionalTypeZod(final FieldProperty field) { + // Common checking element (apply to List, Map, ...) + if (field.nullable()) { + return ".optional()"; + } + if (field.notNull()) { + return ""; + } + // Other object: if (field.model().getOriginClasses() == null || field.model().getOriginClasses().isPrimitive()) { return ""; } - if (field.notNull()) { + if (field.columnNotNull()) { return ""; } return ".optional()"; diff --git a/src/org/kar/archidata/externalRestApi/model/ClassObjectModel.java b/src/org/kar/archidata/externalRestApi/model/ClassObjectModel.java index f63a4ee..3f1ddd6 100644 --- a/src/org/kar/archidata/externalRestApi/model/ClassObjectModel.java +++ b/src/org/kar/archidata/externalRestApi/model/ClassObjectModel.java @@ -54,18 +54,20 @@ public class ClassObjectModel extends ClassModel { ClassModel model, String comment, int limitSize, - boolean readOnly, - boolean notNull, - boolean nullable) { + Boolean readOnly, + Boolean notNull, + Boolean columnNotNull, + Boolean nullable) { public FieldProperty(final String name, final ClassModel model, final String comment, final int limitSize, - final boolean readOnly, final boolean notNull, final boolean nullable) { + final Boolean readOnly, final Boolean notNull, final Boolean columnNotNull, final Boolean nullable) { this.name = name; this.model = model; this.comment = comment; this.limitSize = limitSize; this.readOnly = readOnly; this.notNull = notNull; + this.columnNotNull = columnNotNull; this.nullable = nullable; } @@ -77,7 +79,8 @@ public class ClassObjectModel extends ClassModel { AnnotationTools.getLimitSize(field), // AnnotationTools.getSchemaReadOnly(field), // AnnotationTools.getConstraintsNotNull(field), // - AnnotationTools.getColumnNotNull(field)); + AnnotationTools.getColumnNotNull(field), // + AnnotationTools.getNullable(field)); } } diff --git a/src/org/kar/archidata/model/GenericDataSoftDelete.java b/src/org/kar/archidata/model/GenericDataSoftDelete.java index 3ad202b..e4f691d 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 io.swagger.v3.oas.annotations.media.Schema; +import jakarta.annotation.Nullable; import jakarta.persistence.Column; import jakarta.ws.rs.DefaultValue; @@ -13,5 +14,6 @@ public class GenericDataSoftDelete extends GenericData { @DefaultValue("'0'") @DataDeleted @Schema(description = "Deleted state", hidden = true, required = false, readOnly = true) + @Nullable public Boolean deleted = null; } diff --git a/src/org/kar/archidata/model/GenericTiming.java b/src/org/kar/archidata/model/GenericTiming.java index 7c045e3..7217dd9 100644 --- a/src/org/kar/archidata/model/GenericTiming.java +++ b/src/org/kar/archidata/model/GenericTiming.java @@ -9,6 +9,7 @@ import org.kar.archidata.annotation.UpdateTimestamp; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.annotation.Nullable; import jakarta.persistence.Column; public class GenericTiming { @@ -17,6 +18,7 @@ public class GenericTiming { @Column(nullable = false) @Schema(description = "Create time of the object", required = false, example = "2000-01-23T01:23:45.678+01:00", readOnly = true) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX") + @Nullable public Date createdAt = null; @DataNotRead @UpdateTimestamp @@ -24,5 +26,6 @@ public class GenericTiming { @Schema(description = "When update the object", required = false, example = "2000-01-23T00:23:45.678Z", readOnly = true) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX") // public Instant updatedAt = null; + @Nullable public Date updatedAt = null; } diff --git a/src/org/kar/archidata/model/UUIDGenericDataSoftDelete.java b/src/org/kar/archidata/model/UUIDGenericDataSoftDelete.java index d06cb65..51a5d8c 100644 --- a/src/org/kar/archidata/model/UUIDGenericDataSoftDelete.java +++ b/src/org/kar/archidata/model/UUIDGenericDataSoftDelete.java @@ -4,6 +4,7 @@ import org.kar.archidata.annotation.DataDeleted; import org.kar.archidata.annotation.DataNotRead; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.annotation.Nullable; import jakarta.persistence.Column; import jakarta.ws.rs.DefaultValue; @@ -13,5 +14,6 @@ public class UUIDGenericDataSoftDelete extends UUIDGenericData { @DefaultValue("'0'") @DataDeleted @Schema(description = "Deleted state", hidden = true, required = false, readOnly = true) + @Nullable public Boolean deleted = null; }