Compare commits

..

7 Commits

Author SHA1 Message Date
da3c467569 [RELEASE] Release v0.23.4 2025-02-06 07:47:17 +01:00
0c932d4e92 [FEAT] set the object enpty as identical as their parent.
this prevent react-hook-form resolver erreur, it does not support empty object
2025-02-04 21:15:10 +01:00
a400bb99b8 [FEAT] add Jwt token description to be serialize in front 2025-02-02 19:34:23 +01:00
bdc9a4ac4d [VERSION] update dev tag version 2025-01-30 21:45:29 +01:00
b0bf103195 [RELEASE] Release v0.23.2 2025-01-30 21:45:26 +01:00
d36c366ab6 [FIX] zod number gte/lte 2025-01-30 21:25:15 +01:00
cddb4dd7fe [DEV] update dev tag version 2025-01-30 10:01:58 +01:00
6 changed files with 91 additions and 21 deletions

View File

@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>kangaroo-and-rabbit</groupId>
<artifactId>archidata</artifactId>
<version>0.23.0</version>
<version>0.23.4</version>
<properties>
<java.version>21</java.version>
<maven.compiler.version>3.1</maven.compiler.version>

View File

@@ -289,28 +289,32 @@ public class TsClassElement {
|| clazz == long.class || clazz == Long.class || clazz == float.class || clazz == Float.class
|| clazz == double.class || clazz == Double.class) {
if (field.min() != null) {
builder.append(".min(");
builder.append(".gte(");
builder.append(field.min().value());
builder.append(")");
}
if (field.max() != null) {
builder.append(".max(");
builder.append(".lte(");
builder.append(field.max().value());
builder.append(")");
}
if (field.decimalMax() != null) {
builder.append(".max(");
if (field.decimalMax().inclusive()) {
builder.append(".lte(");
} else {
builder.append(".lt(");
}
builder.append(field.decimalMax().value());
builder.append(", { inclusive: ");
builder.append(field.decimalMax().inclusive() ? "true" : "false");
builder.append("})");
builder.append(")");
}
if (field.decimalMin() != null) {
builder.append(".min(");
if (field.decimalMin().inclusive()) {
builder.append(".gte(");
} else {
builder.append(".gt(");
}
builder.append(field.decimalMin().value());
builder.append(", { inclusive: ");
builder.append(field.decimalMin().inclusive() ? "true" : "false");
builder.append("})");
builder.append(")");
}
}
return builder.toString();
@@ -349,16 +353,19 @@ public class TsClassElement {
out.append("export const ");
out.append(this.zodName);
out.append(" = ");
// Check if the object is empty:
boolean isEmpty = model.getFields().size() == 0;
if (model.getExtendsClass() != null) {
final ClassModel parentClass = model.getExtendsClass();
final TsClassElement tsParentModel = tsGroup.find(parentClass);
out.append(tsParentModel.zodName);
out.append(".extend({");
if (!isEmpty) {
out.append(".extend({\n");
}
} else {
out.append("zod.object({");
out.append("zod.object({\n");
}
out.append("\n");
for (final FieldProperty field : model.getFields()) {
final ClassModel fieldModel = field.model();
if (field.comment() != null) {
@@ -386,7 +393,11 @@ public class TsClassElement {
out.append(",\n");
}
final List<String> omitField = model.getReadOnlyField();
out.append("\n});\n");
if (model.getExtendsClass() != null && isEmpty) {
out.append(";\n");
} else {
out.append("\n});\n");
}
out.append(generateZodInfer(this.tsTypeName, this.zodName));
out.append(generateExportCheckFunctionWrite(""));
// check if we need to generate write mode :
@@ -398,17 +409,18 @@ public class TsClassElement {
out.append("export const ");
out.append(this.zodName);
out.append("Write = ");
isEmpty = model.getFields().stream().filter(field -> !field.readOnly()).count() == 0;
if (model.getExtendsClass() != null) {
final ClassModel parentClass = model.getExtendsClass();
final TsClassElement tsParentModel = tsGroup.find(parentClass);
out.append(tsParentModel.zodName);
out.append("Write");
out.append(".extend({");
if (!isEmpty) {
out.append(".extend({\n");
}
} else {
out.append("zod.object({");
out.append("zod.object({\n");
}
out.append("\n");
for (final FieldProperty field : model.getFields()) {
// remove all readOnly field
if (field.readOnly()) {
@@ -446,7 +458,11 @@ public class TsClassElement {
}
out.append(",\n");
}
out.append("\n});\n");
if (model.getExtendsClass() != null && isEmpty) {
out.append(";\n");
} else {
out.append("\n});\n");
}
out.append(generateZodInfer(this.tsTypeName + "Write", this.zodName + "Write"));
// Check only the input value ==> no need of the output
out.append(generateExportCheckFunctionWrite("Write"));

View File

@@ -0,0 +1,13 @@
package org.kar.archidata.model.token;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
public class JwtHeader {
@Size(max = 128)
@NotNull
public String typ;
@Size(max = 128)
@NotNull
public String alg;
}

View File

@@ -0,0 +1,29 @@
package org.kar.archidata.model.token;
import java.util.Map;
import jakarta.validation.constraints.NotNull;
public class JwtPayload {
// User identification
@NotNull
public String sub;
// Application destination
@NotNull
public String application;
// Emitter of the token
@NotNull
public String iss;
// Access Right Map<application, Map< section, right>>
@NotNull
public Map<String, Map<String, Long>> right;
// user name
@NotNull
public String login;
// Expiration (timestamp)
@NotNull
public Long exp;
// Create time (timestamp)
@NotNull
public Long iat;
}

View File

@@ -0,0 +1,12 @@
package org.kar.archidata.model.token;
import jakarta.validation.constraints.NotNull;
public class JwtToken {
@NotNull
public JwtHeader header;
@NotNull
public JwtPayload payload;
@NotNull
public String signature;
}

View File

@@ -1 +1 @@
0.23.0
0.23.4