use serde::{Deserialize, Serialize};
use uuid::Uuid;
use chrono::{DateTime, Utc};
use crate::domain::entity::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MailingAbTestId(pub Uuid);
impl MailingAbTestId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for MailingAbTestId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<MailingAbTestId> for Uuid {
fn from(id: MailingAbTestId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingAbTestDto {
pub id: MailingAbTestId,
pub campaign_id: Uuid,
pub winner_selection: AbWinnerSelection,
pub winner_selection_sms: Option<AbWinnerSelection>,
pub promote_at: Option<DateTime<Utc>>,
pub completed: bool,
pub winner_mailing_id: Option<Uuid>,
pub sampling_seed: String,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingAbTestSummary {
pub id: MailingAbTestId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingAbTestRef {
pub id: MailingAbTestId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MailingAudienceId(pub Uuid);
impl MailingAudienceId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for MailingAudienceId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<MailingAudienceId> for Uuid {
fn from(id: MailingAudienceId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingAudienceDto {
pub id: MailingAudienceId,
pub name: String,
pub active: bool,
pub is_public: bool,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingAudienceSummary {
pub id: MailingAudienceId,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingAudienceRef {
pub id: MailingAudienceId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MailingContactId(pub Uuid);
impl MailingContactId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for MailingContactId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<MailingContactId> for Uuid {
fn from(id: MailingContactId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingContactDto {
pub id: MailingContactId,
pub name: Option<String>,
pub first_name: Option<String>,
pub last_name: Option<String>,
pub email: String,
pub company_name: Option<String>,
pub country_code: Option<String>,
pub phone: Option<String>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingContactSummary {
pub id: MailingContactId,
pub name: Option<String>,
pub first_name: Option<String>,
pub last_name: Option<String>,
pub email: String,
pub company_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingContactRef {
pub id: MailingContactId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MailingSubscriptionId(pub Uuid);
impl MailingSubscriptionId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for MailingSubscriptionId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<MailingSubscriptionId> for Uuid {
fn from(id: MailingSubscriptionId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingSubscriptionDto {
pub id: MailingSubscriptionId,
pub contact_id: Uuid,
pub mailing_audience_id: Uuid,
pub opt_out: bool,
pub opt_out_datetime: Option<DateTime<Utc>>,
pub opt_out_reason_id: Option<Uuid>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingSubscriptionSummary {
pub id: MailingSubscriptionId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingSubscriptionRef {
pub id: MailingSubscriptionId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct OptOutReasonId(pub Uuid);
impl OptOutReasonId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for OptOutReasonId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<OptOutReasonId> for Uuid {
fn from(id: OptOutReasonId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptOutReasonDto {
pub id: OptOutReasonId,
pub name: String,
pub sequence: i32,
pub is_feedback: bool,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptOutReasonSummary {
pub id: OptOutReasonId,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptOutReasonRef {
pub id: OptOutReasonId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MailingId(pub Uuid);
impl MailingId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for MailingId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<MailingId> for Uuid {
fn from(id: MailingId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingDto {
pub id: MailingId,
pub subject: String,
pub preview: Option<String>,
pub body_html: String,
pub body_plaintext: Option<String>,
pub email_from: String,
pub reply_to: Option<String>,
pub keep_archives: bool,
pub state: MailingState,
pub schedule_type: MailingScheduleType,
pub schedule_date: Option<DateTime<Utc>>,
pub sent_date: Option<DateTime<Utc>>,
pub mailing_type: MailingType,
pub target_model: MailingTargetModel,
pub mailing_domain: serde_json::Value,
pub use_exclusion_list: bool,
pub campaign_id: Option<Uuid>,
pub medium_id: Option<Uuid>,
pub source_id: Option<Uuid>,
pub user_id: Option<Uuid>,
pub ab_testing_enabled: bool,
pub ab_testing_pc: i32,
pub ab_test_id: Option<Uuid>,
pub kpi_mail_required: bool,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingSummary {
pub id: MailingId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingRef {
pub id: MailingId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MailingTraceId(pub Uuid);
impl MailingTraceId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for MailingTraceId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<MailingTraceId> for Uuid {
fn from(id: MailingTraceId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingTraceDto {
pub id: MailingTraceId,
pub trace_type: TraceType,
pub is_test_trace: bool,
pub mailing_id: Uuid,
pub campaign_id: Option<Uuid>,
pub recipient_model: String,
pub recipient_id: Uuid,
pub recipient_email: String,
pub mail_id: Option<Uuid>,
pub sms_uuid: Option<String>,
pub recipient_phone: Option<String>,
pub message_id: Option<String>,
pub trace_status: TraceStatus,
pub failure_type: Option<TraceFailureType>,
pub failure_reason: Option<String>,
pub sent_datetime: Option<DateTime<Utc>>,
pub open_datetime: Option<DateTime<Utc>>,
pub reply_datetime: Option<DateTime<Utc>>,
pub links_click_datetime: Option<DateTime<Utc>>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingTraceSummary {
pub id: MailingTraceId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingTraceRef {
pub id: MailingTraceId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MailingFilterId(pub Uuid);
impl MailingFilterId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for MailingFilterId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<MailingFilterId> for Uuid {
fn from(id: MailingFilterId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingFilterDto {
pub id: MailingFilterId,
pub name: String,
pub target_model: MailingTargetModel,
pub domain: serde_json::Value,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingFilterSummary {
pub id: MailingFilterId,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MailingFilterRef {
pub id: MailingFilterId,
}