Skip to content

Commit

Permalink
feat: add title+desc to schemas derived for specs via annotation scan
Browse files Browse the repository at this point in the history
  • Loading branch information
matteo-s committed May 29, 2024
1 parent 0978f0e commit d3b27de
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import lombok.ToString;
import org.springframework.util.Assert;

//
@Getter
@ToString
public enum EntityName {
Expand All @@ -18,7 +17,8 @@ public enum EntityName {
MODEL("model"),
TASK("task"),
RUN("run"),
LOG("log");
LOG("log"),
METADATA("metadata");

private final String value;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import it.smartcommunitylabdhub.commons.annotations.common.SpecType;
import it.smartcommunitylabdhub.commons.models.base.BaseSpec;
import it.smartcommunitylabdhub.commons.models.enums.EntityName;
import java.io.Serializable;
import java.time.OffsetDateTime;
import java.util.Map;
Expand All @@ -18,6 +20,7 @@
@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
@SpecType(kind = "metadata.audit", entity = EntityName.METADATA)
public final class AuditMetadata extends BaseSpec implements Metadata {

protected String createdBy;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import it.smartcommunitylabdhub.commons.annotations.common.SpecType;
import it.smartcommunitylabdhub.commons.models.base.BaseSpec;
import it.smartcommunitylabdhub.commons.models.enums.EntityName;
import java.io.Serializable;
import java.time.OffsetDateTime;
import java.util.Map;
Expand All @@ -19,6 +21,7 @@
@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
@SpecType(kind = "metadata.base", entity = EntityName.METADATA)
public final class BaseMetadata extends BaseSpec implements Metadata {

protected String project;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package it.smartcommunitylabdhub.commons.models.metadata;

import com.fasterxml.jackson.annotation.JsonInclude;
import it.smartcommunitylabdhub.commons.annotations.common.SpecType;
import it.smartcommunitylabdhub.commons.models.base.BaseSpec;
import it.smartcommunitylabdhub.commons.models.enums.EntityName;
import java.io.Serializable;
import java.util.Map;
import lombok.AllArgsConstructor;
Expand All @@ -16,6 +18,7 @@
@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
@SpecType(kind = "metadata.embedded", entity = EntityName.METADATA)
public final class EmbeddableMetadata extends BaseSpec implements Metadata {

private Boolean embedded;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package it.smartcommunitylabdhub.commons.models.metadata;

import com.fasterxml.jackson.annotation.JsonInclude;
import it.smartcommunitylabdhub.commons.annotations.common.SpecType;
import it.smartcommunitylabdhub.commons.models.base.BaseSpec;
import it.smartcommunitylabdhub.commons.models.enums.EntityName;
import java.io.Serializable;
import java.util.Map;
import lombok.AllArgsConstructor;
Expand All @@ -16,6 +18,7 @@
@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
@SpecType(kind = "metadata.versioning", entity = EntityName.METADATA)
public final class VersioningMetadata extends BaseSpec implements Metadata {

protected String project;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,22 @@
import com.github.victools.jsonschema.generator.SchemaGenerator;
import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder;
import com.github.victools.jsonschema.generator.SchemaVersion;
import com.github.victools.jsonschema.generator.TypeScope;
import com.github.victools.jsonschema.module.jackson.JacksonModule;
import com.github.victools.jsonschema.module.jackson.JacksonOption;
import com.github.victools.jsonschema.module.jakarta.validation.JakartaValidationModule;
import com.github.victools.jsonschema.module.jakarta.validation.JakartaValidationOption;
import com.github.victools.jsonschema.module.swagger2.Swagger2Module;
import it.smartcommunitylabdhub.commons.annotations.common.SpecType;
import it.smartcommunitylabdhub.commons.jackson.introspect.JsonSchemaAnnotationIntrospector;
import it.smartcommunitylabdhub.commons.models.specs.Spec;
import java.util.Optional;

//TODO refactor into a factory
public final class SchemaUtils {

public static final String FIELDS_PREFIX = "fields.";
public static final String SPECS_PREFIX = "specs.";

public static final SchemaGenerator GENERATOR;

Expand Down Expand Up @@ -77,12 +81,28 @@ public final class SchemaUtils {
.withTitleResolver(titleFromNameResolver)
.withDescriptionResolver(descriptionFromNameResolver);

configBuilder
.forTypesInGeneral()
.withTitleResolver(specTypeResolver("title"))
.withDescriptionResolver(specTypeResolver("description"));

GENERATOR = new SchemaGenerator(configBuilder.build());
}

public static JsonNode schema(Class<? extends Spec> clazz) {
return GENERATOR.generateSchema(clazz);
}

private static ConfigFunction<TypeScope, String> specTypeResolver(String value) {
return typeScope -> {
return Optional
.ofNullable(typeScope.getType().getErasedType().getAnnotation(SpecType.class))
.map(spec -> spec.kind())
.filter(s -> s != null)
.map(s -> SPECS_PREFIX + s + "." + value)
.orElse(null);
};
}

private SchemaUtils() {}
}

0 comments on commit d3b27de

Please sign in to comment.