Browse Source

added appropriate swagger annotations for correct open-api json

pull/14929/head
dashevchenko 8 months ago
parent
commit
d00309b8da
  1. 26
      application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java
  2. 3
      common/data/src/main/java/org/thingsboard/server/common/data/device/profile/AllowCreateNewDevicesDeviceProfileProvisionConfiguration.java
  3. 3
      common/data/src/main/java/org/thingsboard/server/common/data/device/profile/CheckPreProvisionedDevicesDeviceProfileProvisionConfiguration.java
  4. 2
      common/data/src/main/java/org/thingsboard/server/common/data/device/profile/CoapDeviceProfileTransportConfiguration.java
  5. 11
      common/data/src/main/java/org/thingsboard/server/common/data/device/profile/CoapDeviceTypeConfiguration.java
  6. 3
      common/data/src/main/java/org/thingsboard/server/common/data/device/profile/DeviceProfileData.java
  7. 14
      common/data/src/main/java/org/thingsboard/server/common/data/device/profile/DeviceProfileProvisionConfiguration.java
  8. 3
      common/data/src/main/java/org/thingsboard/server/common/data/device/profile/DisabledDeviceProfileProvisionConfiguration.java
  9. 3
      common/data/src/main/java/org/thingsboard/server/common/data/device/profile/X509CertificateChainProvisionConfiguration.java

26
application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java

@ -391,6 +391,32 @@ public class SwaggerConfiguration {
}); });
} }
}); });
schemas.values().forEach(schema -> {
if (schema.getProperties() != null) {
schema.getProperties().forEach((propName, propSchema) -> {
if (propSchema instanceof Schema) {
Schema<?> prop = (Schema<?>) propSchema;
// If property has oneOf, try to find the base discriminated type
if (prop.getOneOf() != null && !prop.getOneOf().isEmpty()) {
String baseType = findBaseTypeForOneOf(schemas, prop.getOneOf());
if (baseType != null) {
// Replace oneOf with reference to base type
Schema<?> refSchema = new Schema<>();
refSchema.set$ref("#/components/schemas/" + baseType);
if (prop.getDescription() != null) {
refSchema.setDescription(prop.getDescription());
}
schema.getProperties().put(propName, refSchema);
log.debug("Replaced oneOf with $ref to {} in property {}", baseType, propName);
}
}
}
});
}
});
} }
var sortedSchemas = new TreeMap<>(openAPI.getComponents().getSchemas()); var sortedSchemas = new TreeMap<>(openAPI.getComponents().getSchemas());

3
common/data/src/main/java/org/thingsboard/server/common/data/device/profile/AllowCreateNewDevicesDeviceProfileProvisionConfiguration.java

@ -15,15 +15,18 @@
*/ */
package org.thingsboard.server.common.data.device.profile; package org.thingsboard.server.common.data.device.profile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import org.thingsboard.server.common.data.DeviceProfileProvisionType; import org.thingsboard.server.common.data.DeviceProfileProvisionType;
@Data @Data
@Schema
public class AllowCreateNewDevicesDeviceProfileProvisionConfiguration implements DeviceProfileProvisionConfiguration { public class AllowCreateNewDevicesDeviceProfileProvisionConfiguration implements DeviceProfileProvisionConfiguration {
private final String provisionDeviceSecret; private final String provisionDeviceSecret;
@Override @Override
@Schema(description = "Device profile provision type", requiredMode = Schema.RequiredMode.REQUIRED)
public DeviceProfileProvisionType getType() { public DeviceProfileProvisionType getType() {
return DeviceProfileProvisionType.ALLOW_CREATE_NEW_DEVICES; return DeviceProfileProvisionType.ALLOW_CREATE_NEW_DEVICES;
} }

3
common/data/src/main/java/org/thingsboard/server/common/data/device/profile/CheckPreProvisionedDevicesDeviceProfileProvisionConfiguration.java

@ -15,14 +15,17 @@
*/ */
package org.thingsboard.server.common.data.device.profile; package org.thingsboard.server.common.data.device.profile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import org.thingsboard.server.common.data.DeviceProfileProvisionType; import org.thingsboard.server.common.data.DeviceProfileProvisionType;
@Data @Data
@Schema
public class CheckPreProvisionedDevicesDeviceProfileProvisionConfiguration implements DeviceProfileProvisionConfiguration { public class CheckPreProvisionedDevicesDeviceProfileProvisionConfiguration implements DeviceProfileProvisionConfiguration {
private final String provisionDeviceSecret; private final String provisionDeviceSecret;
@Schema(description = "Device profile provision type", requiredMode = Schema.RequiredMode.REQUIRED)
@Override @Override
public DeviceProfileProvisionType getType() { public DeviceProfileProvisionType getType() {
return DeviceProfileProvisionType.CHECK_PRE_PROVISIONED_DEVICES; return DeviceProfileProvisionType.CHECK_PRE_PROVISIONED_DEVICES;

2
common/data/src/main/java/org/thingsboard/server/common/data/device/profile/CoapDeviceProfileTransportConfiguration.java

@ -24,7 +24,9 @@ import org.thingsboard.server.common.data.device.data.PowerSavingConfiguration;
@Data @Data
public class CoapDeviceProfileTransportConfiguration implements DeviceProfileTransportConfiguration { public class CoapDeviceProfileTransportConfiguration implements DeviceProfileTransportConfiguration {
@Schema
private CoapDeviceTypeConfiguration coapDeviceTypeConfiguration; private CoapDeviceTypeConfiguration coapDeviceTypeConfiguration;
@Schema
private PowerSavingConfiguration clientSettings; private PowerSavingConfiguration clientSettings;
@Schema(requiredMode = Schema.RequiredMode.REQUIRED, description = "Type of the device transport") @Schema(requiredMode = Schema.RequiredMode.REQUIRED, description = "Type of the device transport")

11
common/data/src/main/java/org/thingsboard/server/common/data/device/profile/CoapDeviceTypeConfiguration.java

@ -19,10 +19,20 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeInfo;
import io.swagger.v3.oas.annotations.media.DiscriminatorMapping;
import io.swagger.v3.oas.annotations.media.Schema;
import org.thingsboard.server.common.data.CoapDeviceType; import org.thingsboard.server.common.data.CoapDeviceType;
import java.io.Serializable; import java.io.Serializable;
@Schema(
description = "CoAP device type configuration",
discriminatorProperty = "coapDeviceType",
discriminatorMapping = {
@DiscriminatorMapping(value = "DEFAULT", schema = DefaultCoapDeviceTypeConfiguration.class),
@DiscriminatorMapping(value = "EFENTO", schema = EfentoCoapDeviceTypeConfiguration.class)
}
)
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo( @JsonTypeInfo(
use = JsonTypeInfo.Id.NAME, use = JsonTypeInfo.Id.NAME,
@ -33,6 +43,7 @@ import java.io.Serializable;
@JsonSubTypes.Type(value = EfentoCoapDeviceTypeConfiguration.class, name = "EFENTO")}) @JsonSubTypes.Type(value = EfentoCoapDeviceTypeConfiguration.class, name = "EFENTO")})
public interface CoapDeviceTypeConfiguration extends Serializable { public interface CoapDeviceTypeConfiguration extends Serializable {
@Schema(requiredMode = Schema.RequiredMode.REQUIRED, description = "CoAP device type")
@JsonIgnore @JsonIgnore
CoapDeviceType getCoapDeviceType(); CoapDeviceType getCoapDeviceType();

3
common/data/src/main/java/org/thingsboard/server/common/data/device/profile/DeviceProfileData.java

@ -15,6 +15,7 @@
*/ */
package org.thingsboard.server.common.data.device.profile; package org.thingsboard.server.common.data.device.profile;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.Data; import lombok.Data;
@ -36,7 +37,7 @@ public class DeviceProfileData implements Serializable {
@Schema(description = "JSON object of provisioning strategy type per device profile") @Schema(description = "JSON object of provisioning strategy type per device profile")
private DeviceProfileProvisionConfiguration provisionConfiguration; private DeviceProfileProvisionConfiguration provisionConfiguration;
@Valid @Valid
@Schema(description = "JSON array of alarm rules configuration per device profile") @ArraySchema(schema = @Schema(implementation = DeviceProfileAlarm.class))
private List<DeviceProfileAlarm> alarms; private List<DeviceProfileAlarm> alarms;
} }

14
common/data/src/main/java/org/thingsboard/server/common/data/device/profile/DeviceProfileProvisionConfiguration.java

@ -19,10 +19,22 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeInfo;
import io.swagger.v3.oas.annotations.media.DiscriminatorMapping;
import io.swagger.v3.oas.annotations.media.Schema;
import org.thingsboard.server.common.data.DeviceProfileProvisionType; import org.thingsboard.server.common.data.DeviceProfileProvisionType;
import java.io.Serializable; import java.io.Serializable;
@Schema(
description = "Device profile provision configuration",
discriminatorProperty = "type",
discriminatorMapping = {
@DiscriminatorMapping(value = "DISABLED", schema = DisabledDeviceProfileProvisionConfiguration.class),
@DiscriminatorMapping(value = "ALLOW_CREATE_NEW_DEVICES", schema = AllowCreateNewDevicesDeviceProfileProvisionConfiguration.class),
@DiscriminatorMapping(value = "CHECK_PRE_PROVISIONED_DEVICES", schema = CheckPreProvisionedDevicesDeviceProfileProvisionConfiguration.class),
@DiscriminatorMapping(value = "X509_CERTIFICATE_CHAIN", schema = X509CertificateChainProvisionConfiguration.class)
}
)
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo( @JsonTypeInfo(
use = JsonTypeInfo.Id.NAME, use = JsonTypeInfo.Id.NAME,
@ -35,8 +47,10 @@ import java.io.Serializable;
@JsonSubTypes.Type(value = X509CertificateChainProvisionConfiguration.class, name = "X509_CERTIFICATE_CHAIN")}) @JsonSubTypes.Type(value = X509CertificateChainProvisionConfiguration.class, name = "X509_CERTIFICATE_CHAIN")})
public interface DeviceProfileProvisionConfiguration extends Serializable { public interface DeviceProfileProvisionConfiguration extends Serializable {
@Schema(description = "Provision device secret", example = "secret123")
String getProvisionDeviceSecret(); String getProvisionDeviceSecret();
@Schema(requiredMode = Schema.RequiredMode.REQUIRED, description = "Device profile provision type")
@JsonIgnore @JsonIgnore
DeviceProfileProvisionType getType(); DeviceProfileProvisionType getType();

3
common/data/src/main/java/org/thingsboard/server/common/data/device/profile/DisabledDeviceProfileProvisionConfiguration.java

@ -15,15 +15,18 @@
*/ */
package org.thingsboard.server.common.data.device.profile; package org.thingsboard.server.common.data.device.profile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import org.thingsboard.server.common.data.DeviceProfileProvisionType; import org.thingsboard.server.common.data.DeviceProfileProvisionType;
@Data @Data
@Schema
public class DisabledDeviceProfileProvisionConfiguration implements DeviceProfileProvisionConfiguration { public class DisabledDeviceProfileProvisionConfiguration implements DeviceProfileProvisionConfiguration {
private final String provisionDeviceSecret; private final String provisionDeviceSecret;
@Override @Override
@Schema(description = "Device profile provision type", requiredMode = Schema.RequiredMode.REQUIRED)
public DeviceProfileProvisionType getType() { public DeviceProfileProvisionType getType() {
return DeviceProfileProvisionType.DISABLED; return DeviceProfileProvisionType.DISABLED;
} }

3
common/data/src/main/java/org/thingsboard/server/common/data/device/profile/X509CertificateChainProvisionConfiguration.java

@ -15,10 +15,12 @@
*/ */
package org.thingsboard.server.common.data.device.profile; package org.thingsboard.server.common.data.device.profile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.thingsboard.server.common.data.DeviceProfileProvisionType; import org.thingsboard.server.common.data.DeviceProfileProvisionType;
@Schema
@Data @Data
@NoArgsConstructor @NoArgsConstructor
public class X509CertificateChainProvisionConfiguration implements DeviceProfileProvisionConfiguration { public class X509CertificateChainProvisionConfiguration implements DeviceProfileProvisionConfiguration {
@ -28,6 +30,7 @@ public class X509CertificateChainProvisionConfiguration implements DeviceProfile
private boolean allowCreateNewDevicesByX509Certificate; private boolean allowCreateNewDevicesByX509Certificate;
@Override @Override
@Schema(description = "Device profile provision type", requiredMode = Schema.RequiredMode.REQUIRED)
public DeviceProfileProvisionType getType() { public DeviceProfileProvisionType getType() {
return DeviceProfileProvisionType.X509_CERTIFICATE_CHAIN; return DeviceProfileProvisionType.X509_CERTIFICATE_CHAIN;
} }

Loading…
Cancel
Save