View Javadoc
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  }