From a1f56050bf77e41e30c9662d951012c87b2b1780 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Sat, 8 Jun 2024 13:48:34 +0200 Subject: [PATCH] [FEAT] support the min and Max for number and string --- .../model/ClassObjectModel.java | 38 ++++++++++++++++--- .../typescript/TsClassElement.java | 29 ++++++++++++-- 2 files changed, 57 insertions(+), 10 deletions(-) diff --git a/src/org/kar/archidata/externalRestApi/model/ClassObjectModel.java b/src/org/kar/archidata/externalRestApi/model/ClassObjectModel.java index 1d97f02..905a196 100644 --- a/src/org/kar/archidata/externalRestApi/model/ClassObjectModel.java +++ b/src/org/kar/archidata/externalRestApi/model/ClassObjectModel.java @@ -1,5 +1,6 @@ package org.kar.archidata.externalRestApi.model; +import java.io.IOException; import java.lang.reflect.Field; import java.sql.Timestamp; import java.time.LocalDate; @@ -10,9 +11,12 @@ import java.util.List; import java.util.Set; import org.kar.archidata.annotation.AnnotationTools; +import org.kar.archidata.exception.DataAccessException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import jakarta.validation.constraints.Size; + public class ClassObjectModel extends ClassModel { static final Logger LOGGER = LoggerFactory.getLogger(ClassObjectModel.class); @@ -53,18 +57,25 @@ public class ClassObjectModel extends ClassModel { String name, ClassModel model, String comment, - int limitSize, + int sizeMin, // String SizeMin + int sizeMax, // String SizeMax + Long min, // number min value + Long max, // number max value 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 columnNotNull, final Boolean nullable) { + public FieldProperty(final String name, final ClassModel model, final String comment, final int sizeMin, + final int sizeMax, final Long min, final Long max, 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.sizeMin = sizeMin; + this.sizeMax = sizeMax; + this.min = min; + this.max = max; this.readOnly = readOnly; this.notNull = notNull; this.columnNotNull = columnNotNull; @@ -72,11 +83,26 @@ public class ClassObjectModel extends ClassModel { } - public FieldProperty(final Field field, final ModelGroup previous) throws Exception { + private static int getStringMinSize(final Field field) throws DataAccessException { + final Size size = AnnotationTools.getConstraintsSize(field); + final int colomnLimitSize = AnnotationTools.getLimitSize(field); + return size != null ? size.min() : 0; + } + + private static int getStringMaxSize(final Field field) throws DataAccessException { + final Size size = AnnotationTools.getConstraintsSize(field); + final int colomnLimitSize = AnnotationTools.getLimitSize(field); + return size == null ? colomnLimitSize : colomnLimitSize < size.max() ? colomnLimitSize : size.max(); + } + + public FieldProperty(final Field field, final ModelGroup previous) throws DataAccessException, IOException { this(field.getName(), // ClassModel.getModel(field.getGenericType(), previous), // AnnotationTools.getComment(field), // - AnnotationTools.getLimitSize(field), // + getStringMinSize(field), // + getStringMaxSize(field), // + AnnotationTools.getConstraintsMin(field), // + AnnotationTools.getConstraintsMax(field), // AnnotationTools.getSchemaReadOnly(field), // AnnotationTools.getConstraintsNotNull(field), // AnnotationTools.getColumnNotNull(field), // diff --git a/src/org/kar/archidata/externalRestApi/typescript/TsClassElement.java b/src/org/kar/archidata/externalRestApi/typescript/TsClassElement.java index 9c3cc2e..1982a1d 100644 --- a/src/org/kar/archidata/externalRestApi/typescript/TsClassElement.java +++ b/src/org/kar/archidata/externalRestApi/typescript/TsClassElement.java @@ -258,10 +258,31 @@ public class TsClassElement { public String maxSizeZod(final FieldProperty field) { final StringBuilder builder = new StringBuilder(); final Class clazz = field.model().getOriginClasses(); - if (field.limitSize() > 0 && clazz == String.class) { - builder.append(".max("); - builder.append(field.limitSize()); - builder.append(")"); + if (clazz == String.class) { + if (field.sizeMin() > 0) { + builder.append(".min("); + builder.append(field.sizeMin()); + builder.append(")"); + } + if (field.sizeMax() > 0) { + builder.append(".max("); + builder.append(field.sizeMax()); + builder.append(")"); + } + } + if (clazz == short.class || clazz == Short.class || clazz == int.class || clazz == Integer.class + || clazz == long.class || clazz == Long.class || clazz == float.class || clazz == Float.class + || clazz == double.class || clazz == Double.class) { + if (field.min() != null && field.min() > 0) { + builder.append(".min("); + builder.append(field.min()); + builder.append(")"); + } + if (field.max() != null && field.max() > 0) { + builder.append(".max("); + builder.append(field.max()); + builder.append(")"); + } } return builder.toString(); }