package com.dalab.policyengine.dto; import java.util.List; import java.util.Map; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; import com.dalab.policyengine.model.EventSeverity; import com.dalab.policyengine.model.EventType; /** * DTO for creating or updating event subscriptions. */ public class EventSubscriptionInputDTO { @NotBlank(message = "Subscription name is required") @Size(max = 255, message = "Subscription name must not exceed 255 characters") private String name; @Size(max = 1000, message = "Description must not exceed 1000 characters") private String description; /** * Event types to subscribe to */ private List eventTypes; /** * Event severity levels to include */ private List severities; /** * Source services to monitor */ private List sourceServices; /** * Event filtering rules */ private List rules; /** * Notification configuration * Example: { "email": true, "slack": { "channel": "#alerts", "webhook": "https://..." } } */ private Map notificationConfig; /** * Action configuration for automated responses * Example: { "autoQuarantine": true, "escalateTo": "admin", "maxRetries": 3 } */ private Map actionConfig; // Constructors public EventSubscriptionInputDTO() {} public EventSubscriptionInputDTO(String name) { this.name = name; } // Getters and Setters public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public List getEventTypes() { return eventTypes; } public void setEventTypes(List eventTypes) { this.eventTypes = eventTypes; } public List getSeverities() { return severities; } public void setSeverities(List severities) { this.severities = severities; } public List getSourceServices() { return sourceServices; } public void setSourceServices(List sourceServices) { this.sourceServices = sourceServices; } public List getRules() { return rules; } public void setRules(List rules) { this.rules = rules; } public Map getNotificationConfig() { return notificationConfig; } public void setNotificationConfig(Map notificationConfig) { this.notificationConfig = notificationConfig; } public Map getActionConfig() { return actionConfig; } public void setActionConfig(Map actionConfig) { this.actionConfig = actionConfig; } @Override public String toString() { return "EventSubscriptionInputDTO{" + "name='" + name + '\'' + ", description='" + description + '\'' + ", eventTypes=" + eventTypes + ", severities=" + severities + ", sourceServices=" + sourceServices + ", rulesCount=" + (rules != null ? rules.size() : 0) + '}'; } /** * Nested DTO for event rules within subscription input */ public static class EventRuleInputDTO { @NotBlank(message = "Rule name is required") @Size(max = 255, message = "Rule name must not exceed 255 characters") private String name; @Size(max = 500, message = "Rule description must not exceed 500 characters") private String description; @NotBlank(message = "Rule condition is required") private String condition; private Integer priority = 1; private Boolean enabled = true; private Map parameters; // Constructors public EventRuleInputDTO() {} public EventRuleInputDTO(String name, String condition) { this.name = name; this.condition = condition; } // Getters and Setters public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getCondition() { return condition; } public void setCondition(String condition) { this.condition = condition; } public Integer getPriority() { return priority; } public void setPriority(Integer priority) { this.priority = priority; } public Boolean getEnabled() { return enabled; } public void setEnabled(Boolean enabled) { this.enabled = enabled; } public Map getParameters() { return parameters; } public void setParameters(Map parameters) { this.parameters = parameters; } @Override public String toString() { return "EventRuleInputDTO{" + "name='" + name + '\'' + ", condition='" + condition + '\'' + ", priority=" + priority + ", enabled=" + enabled + '}'; } } }