Browse Source

fixed swagger issue with AtomicInteger

pull/14929/head
dashevchenko 4 months ago
parent
commit
d98355c190
  1. 9
      application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java
  2. 2
      common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequest.java
  3. 5
      common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequestInfo.java
  4. 6
      common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequestStats.java

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

@ -68,6 +68,7 @@ import org.thingsboard.server.service.security.auth.rest.LoginRequest;
import org.thingsboard.server.service.security.auth.rest.LoginResponse;
import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedHashMap;
@ -254,9 +255,15 @@ public class SwaggerConfiguration {
@Lazy(false)
ModelConverter mapAwareConverter() {
return (type, context, chain) -> {
JavaType javaType = Json.mapper().constructType(type.getType());
if (javaType != null) {
Class<?> cls = javaType.getRawClass();
if (AtomicInteger.class.isAssignableFrom(cls)) {
return new Schema<>().type("integer").format("int32");
}
}
if (chain.hasNext()) {
Schema schema = chain.next().resolve(type, context, chain);
JavaType javaType = Json.mapper().constructType(type.getType());
if (javaType != null) {
Class<?> cls = javaType.getRawClass();
if (Map.class.isAssignableFrom(cls)) {

2
common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequest.java

@ -16,6 +16,7 @@
package org.thingsboard.server.common.data.notification;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
@ -38,6 +39,7 @@ import org.thingsboard.server.common.data.notification.template.NotificationTemp
import java.util.List;
import java.util.UUID;
@Schema
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor

5
common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequestInfo.java

@ -15,18 +15,23 @@
*/
package org.thingsboard.server.common.data.notification;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.List;
@Schema
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class NotificationRequestInfo extends NotificationRequest {
@Schema
private String templateName;
@ArraySchema(schema = @Schema(implementation = NotificationDeliveryMethod.class))
private List<NotificationDeliveryMethod> deliveryMethods;
public NotificationRequestInfo(NotificationRequest request, String templateName, List<NotificationDeliveryMethod> deliveryMethods) {

6
common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequestStats.java

@ -18,6 +18,7 @@ package org.thingsboard.server.common.data.notification;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.thingsboard.server.common.data.notification.targets.NotificationRecipient;
@ -27,14 +28,19 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
@Schema(description = "Notification request processing statistics")
@Data
public class NotificationRequestStats {
@Schema(description = "Number of successfully sent notifications per delivery method", example = "{\"WEB\": 10, \"EMAIL\": 5}")
private final Map<NotificationDeliveryMethod, AtomicInteger> sent;
@JsonIgnore
private final AtomicInteger totalSent;
@Schema(description = "Errors per delivery method. Each entry maps recipient name to error message")
private final Map<NotificationDeliveryMethod, Map<String, String>> errors;
@Schema(description = "Total number of errors across all delivery methods")
private final AtomicInteger totalErrors;
@Schema(description = "General error message if the entire request failed")
private String error;
@JsonIgnore
private final Map<NotificationDeliveryMethod, Set<Object>> processedRecipients;

Loading…
Cancel
Save