1 package de.dlr.shepard.common.subscription.io; 2 3 import com.fasterxml.jackson.annotation.JsonFormat; 4 import de.dlr.shepard.common.subscription.entities.Subscription; 5 import de.dlr.shepard.common.util.RequestMethod; 6 import jakarta.validation.constraints.NotBlank; 7 import jakarta.validation.constraints.NotNull; 8 import jakarta.validation.constraints.Pattern; 9 import java.util.Date; 10 import lombok.Data; 11 import lombok.NoArgsConstructor; 12 import org.eclipse.microprofile.openapi.annotations.media.Schema; 13 14 @Data 15 @NoArgsConstructor 16 @Schema(name = "Subscription") 17 public class SubscriptionIO { 18 19 @Schema(readOnly = true, required = true) 20 private Long id; 21 22 @NotBlank 23 @Schema(required = true) 24 private String name; 25 26 @Pattern( 27 regexp = "https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)" 28 ) 29 @Schema(nullable = true) 30 private String callbackURL; 31 32 @NotBlank 33 @Schema(required = true) 34 private String subscribedURL; 35 36 @NotNull 37 @Schema(required = true) 38 private RequestMethod requestMethod; 39 40 @Schema(readOnly = true, required = true) 41 private String createdBy; 42 43 @JsonFormat(shape = JsonFormat.Shape.STRING) 44 @Schema(readOnly = true, required = true, format = "date-time", example = "2024-08-15T11:18:44.632+00:00") 45 private Date createdAt; 46 47 public SubscriptionIO(Subscription sub) { 48 this.id = sub.getId(); 49 this.name = sub.getName(); 50 this.callbackURL = sub.getCallbackURL(); 51 this.subscribedURL = sub.getSubscribedURL(); 52 this.requestMethod = sub.getRequestMethod(); 53 this.createdAt = sub.getCreatedAt(); 54 this.createdBy = sub.getCreatedBy() != null ? sub.getCreatedBy().getUsername() : null; 55 } 56 }