package contract import "github.com/google/uuid" type TriggerNotificationRequest struct { UserID uuid.UUID `json:"user_id" validate:"required"` TemplateID string `json:"template_id" validate:"required"` TemplateData map[string]interface{} `json:"template_data,omitempty"` To *NotificationTo `json:"to,omitempty"` Overrides *NotificationOverrides `json:"overrides,omitempty"` } type NotificationTo struct { Email string `json:"email,omitempty"` Phone string `json:"phone,omitempty"` SubscriberID string `json:"subscriber_id,omitempty"` } type NotificationOverrides struct { Email *EmailOverride `json:"email,omitempty"` SMS *SMSOverride `json:"sms,omitempty"` InApp *InAppOverride `json:"in_app,omitempty"` Push *PushOverride `json:"push,omitempty"` Chat *ChatOverride `json:"chat,omitempty"` } type EmailOverride struct { Subject string `json:"subject,omitempty"` Body string `json:"body,omitempty"` From string `json:"from,omitempty"` } type SMSOverride struct { Content string `json:"content,omitempty"` From string `json:"from,omitempty"` } type InAppOverride struct { Content string `json:"content,omitempty"` } type PushOverride struct { Title string `json:"title,omitempty"` Content string `json:"content,omitempty"` } type ChatOverride struct { Content string `json:"content,omitempty"` } type TriggerNotificationResponse struct { Success bool `json:"success"` TransactionID string `json:"transaction_id,omitempty"` Message string `json:"message,omitempty"` } type BulkTriggerNotificationRequest struct { TemplateID string `json:"template_id" validate:"required"` UserIDs []uuid.UUID `json:"user_ids" validate:"required,min=1"` TemplateData map[string]interface{} `json:"template_data,omitempty"` Overrides *NotificationOverrides `json:"overrides,omitempty"` } type BulkTriggerNotificationResponse struct { Success bool `json:"success"` TotalSent int `json:"total_sent"` TotalFailed int `json:"total_failed"` Results []NotificationResult `json:"results,omitempty"` } type NotificationResult struct { UserID uuid.UUID `json:"user_id"` Success bool `json:"success"` TransactionID string `json:"transaction_id,omitempty"` Error string `json:"error,omitempty"` } type GetSubscriberRequest struct { UserID uuid.UUID `json:"user_id" validate:"required"` } type GetSubscriberResponse struct { SubscriberID string `json:"subscriber_id"` Email string `json:"email"` FirstName string `json:"first_name"` LastName string `json:"last_name"` Phone string `json:"phone,omitempty"` Avatar string `json:"avatar,omitempty"` Data map[string]interface{} `json:"data,omitempty"` Channels []ChannelCredentials `json:"channels,omitempty"` } type ChannelCredentials struct { Channel string `json:"channel"` Credentials map[string]interface{} `json:"credentials"` } type UpdateSubscriberChannelRequest struct { UserID uuid.UUID `json:"user_id" validate:"required"` Channel string `json:"channel" validate:"required,oneof=email sms push chat in_app"` Credentials map[string]interface{} `json:"credentials" validate:"required"` } type UpdateSubscriberChannelResponse struct { Success bool `json:"success"` Message string `json:"message,omitempty"` }