backbone-mailing 0.6.0

Email marketing — mass-mail engine: audiences, subscriptions, hand-set mailing lifecycle, seeded A/B testing, per-recipient traces, cycle-44 bridge targets (Odoo mass_mailing port)
//! Public events for Mailing module
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! These events are published by this module for other modules to subscribe to.
//! Events are the primary mechanism for cross-module communication.

use serde::{Deserialize, Serialize};
use chrono::{DateTime, Utc};

use super::types::*;

// ============================================================================
// MAILINGABTEST EVENTS
// ============================================================================

/// Event published when a MailingAbTest is created
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingAbTestCreatedEvent {
    pub id: MailingAbTestId,
    pub data: MailingAbTestDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a MailingAbTest is updated
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingAbTestUpdatedEvent {
    pub id: MailingAbTestId,
    pub data: MailingAbTestDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a MailingAbTest is deleted
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingAbTestDeletedEvent {
    pub id: MailingAbTestId,
    pub occurred_at: DateTime<Utc>,
}

// ============================================================================
// MAILINGAUDIENCE EVENTS
// ============================================================================

/// Event published when a MailingAudience is created
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingAudienceCreatedEvent {
    pub id: MailingAudienceId,
    pub data: MailingAudienceDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a MailingAudience is updated
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingAudienceUpdatedEvent {
    pub id: MailingAudienceId,
    pub data: MailingAudienceDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a MailingAudience is deleted
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingAudienceDeletedEvent {
    pub id: MailingAudienceId,
    pub occurred_at: DateTime<Utc>,
}

// ============================================================================
// MAILINGCONTACT EVENTS
// ============================================================================

/// Event published when a MailingContact is created
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingContactCreatedEvent {
    pub id: MailingContactId,
    pub data: MailingContactDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a MailingContact is updated
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingContactUpdatedEvent {
    pub id: MailingContactId,
    pub data: MailingContactDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a MailingContact is deleted
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingContactDeletedEvent {
    pub id: MailingContactId,
    pub occurred_at: DateTime<Utc>,
}

// ============================================================================
// MAILINGSUBSCRIPTION EVENTS
// ============================================================================

/// Event published when a MailingSubscription is created
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingSubscriptionCreatedEvent {
    pub id: MailingSubscriptionId,
    pub data: MailingSubscriptionDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a MailingSubscription is updated
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingSubscriptionUpdatedEvent {
    pub id: MailingSubscriptionId,
    pub data: MailingSubscriptionDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a MailingSubscription is deleted
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingSubscriptionDeletedEvent {
    pub id: MailingSubscriptionId,
    pub occurred_at: DateTime<Utc>,
}

// ============================================================================
// OPTOUTREASON EVENTS
// ============================================================================

/// Event published when a OptOutReason is created
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptOutReasonCreatedEvent {
    pub id: OptOutReasonId,
    pub data: OptOutReasonDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a OptOutReason is updated
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptOutReasonUpdatedEvent {
    pub id: OptOutReasonId,
    pub data: OptOutReasonDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a OptOutReason is deleted
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptOutReasonDeletedEvent {
    pub id: OptOutReasonId,
    pub occurred_at: DateTime<Utc>,
}

// ============================================================================
// MAILING EVENTS
// ============================================================================

/// Event published when a Mailing is created
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingCreatedEvent {
    pub id: MailingId,
    pub data: MailingDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a Mailing is updated
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingUpdatedEvent {
    pub id: MailingId,
    pub data: MailingDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a Mailing is deleted
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingDeletedEvent {
    pub id: MailingId,
    pub occurred_at: DateTime<Utc>,
}

// ============================================================================
// MAILINGTRACE EVENTS
// ============================================================================

/// Event published when a MailingTrace is created
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingTraceCreatedEvent {
    pub id: MailingTraceId,
    pub data: MailingTraceDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a MailingTrace is updated
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingTraceUpdatedEvent {
    pub id: MailingTraceId,
    pub data: MailingTraceDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a MailingTrace is deleted
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingTraceDeletedEvent {
    pub id: MailingTraceId,
    pub occurred_at: DateTime<Utc>,
}

// ============================================================================
// MAILINGFILTER EVENTS
// ============================================================================

/// Event published when a MailingFilter is created
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingFilterCreatedEvent {
    pub id: MailingFilterId,
    pub data: MailingFilterDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a MailingFilter is updated
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingFilterUpdatedEvent {
    pub id: MailingFilterId,
    pub data: MailingFilterDto,
    pub occurred_at: DateTime<Utc>,
}

/// Event published when a MailingFilter is deleted
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingFilterDeletedEvent {
    pub id: MailingFilterId,
    pub occurred_at: DateTime<Utc>,
}

// ============================================================================
// MODULE EVENT ENUM
// ============================================================================

/// All events published by Mailing module
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum MailingEvent {
    MailingAbTestCreated(MailingAbTestCreatedEvent),
    MailingAbTestUpdated(MailingAbTestUpdatedEvent),
    MailingAbTestDeleted(MailingAbTestDeletedEvent),
    MailingAudienceCreated(MailingAudienceCreatedEvent),
    MailingAudienceUpdated(MailingAudienceUpdatedEvent),
    MailingAudienceDeleted(MailingAudienceDeletedEvent),
    MailingContactCreated(MailingContactCreatedEvent),
    MailingContactUpdated(MailingContactUpdatedEvent),
    MailingContactDeleted(MailingContactDeletedEvent),
    MailingSubscriptionCreated(MailingSubscriptionCreatedEvent),
    MailingSubscriptionUpdated(MailingSubscriptionUpdatedEvent),
    MailingSubscriptionDeleted(MailingSubscriptionDeletedEvent),
    OptOutReasonCreated(OptOutReasonCreatedEvent),
    OptOutReasonUpdated(OptOutReasonUpdatedEvent),
    OptOutReasonDeleted(OptOutReasonDeletedEvent),
    MailingCreated(MailingCreatedEvent),
    MailingUpdated(MailingUpdatedEvent),
    MailingDeleted(MailingDeletedEvent),
    MailingTraceCreated(MailingTraceCreatedEvent),
    MailingTraceUpdated(MailingTraceUpdatedEvent),
    MailingTraceDeleted(MailingTraceDeletedEvent),
    MailingFilterCreated(MailingFilterCreatedEvent),
    MailingFilterUpdated(MailingFilterUpdatedEvent),
    MailingFilterDeleted(MailingFilterDeletedEvent),
}

/// Metadata for module events
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingEventMetadata {
    pub module: &'static str,
    pub version: &'static str,
}

impl Default for MailingEventMetadata {
    fn default() -> Self {
        Self {
            module: "mailing",
            version: "1.0",
        }
    }
}

// ============================================================================
// CUSTOM EVENTS
// ============================================================================

// <<< CUSTOM EVENTS START >>>
// Add custom public events here
// <<< CUSTOM EVENTS END >>>