backbone-mail 0.2.32

Odoo mail core port — message/notification/followers/activity/alias/sms queue (schema: messaging)
//! DTOs (Data Transfer Objects)
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! This module provides DTOs for the presentation layer,
//! with validation and OpenAPI schema support.

pub mod mail_activity_dto;
pub mod mail_activity_type_dto;
pub mod mail_activity_plan_dto;
pub mod mail_activity_plan_template_dto;
pub mod mail_alias_domain_dto;
pub mod mail_alias_dto;
pub mod mail_attachment_dto;
pub mod mail_message_attachment_dto;
pub mod mail_message_star_dto;
pub mod mail_message_dto;
pub mod mail_dto;
pub mod mail_notification_dto;
pub mod mail_message_subtype_dto;
pub mod mail_message_reaction_dto;
pub mod mail_followers_dto;
pub mod mail_presence_dto;
pub mod mail_blacklist_dto;
pub mod mail_tracking_value_dto;
pub mod discuss_channel_dto;
pub mod discuss_channel_member_dto;
pub mod mail_guest_dto;
pub mod mail_server_dto;
pub mod fetchmail_server_dto;
pub mod mail_gateway_allowed_dto;
pub mod phone_blacklist_dto;
pub mod mail_message_schedule_dto;
pub mod mail_scheduled_message_dto;
pub mod sms_dto;
pub mod sms_template_dto;
pub mod sms_tracker_dto;

// Re-exports
pub use mail_activity_dto::{
    CreateMailActivityDto,
    UpdateMailActivityDto,
    PatchMailActivityDto,
    MailActivityResponseDto,
    MailActivityListResponseDto,
    MailActivitySummaryDto,
};
pub use mail_activity_type_dto::{
    CreateMailActivityTypeDto,
    UpdateMailActivityTypeDto,
    PatchMailActivityTypeDto,
    MailActivityTypeResponseDto,
    MailActivityTypeListResponseDto,
    MailActivityTypeSummaryDto,
};
pub use mail_activity_plan_dto::{
    CreateMailActivityPlanDto,
    UpdateMailActivityPlanDto,
    PatchMailActivityPlanDto,
    MailActivityPlanResponseDto,
    MailActivityPlanListResponseDto,
    MailActivityPlanSummaryDto,
};
pub use mail_activity_plan_template_dto::{
    CreateMailActivityPlanTemplateDto,
    UpdateMailActivityPlanTemplateDto,
    PatchMailActivityPlanTemplateDto,
    MailActivityPlanTemplateResponseDto,
    MailActivityPlanTemplateListResponseDto,
    MailActivityPlanTemplateSummaryDto,
};
pub use mail_alias_domain_dto::{
    CreateMailAliasDomainDto,
    UpdateMailAliasDomainDto,
    PatchMailAliasDomainDto,
    MailAliasDomainResponseDto,
    MailAliasDomainListResponseDto,
    MailAliasDomainSummaryDto,
};
pub use mail_alias_dto::{
    CreateMailAliasDto,
    UpdateMailAliasDto,
    PatchMailAliasDto,
    MailAliasResponseDto,
    MailAliasListResponseDto,
    MailAliasSummaryDto,
};
pub use mail_attachment_dto::{
    CreateMailAttachmentDto,
    UpdateMailAttachmentDto,
    PatchMailAttachmentDto,
    MailAttachmentResponseDto,
    MailAttachmentListResponseDto,
    MailAttachmentSummaryDto,
};
pub use mail_message_attachment_dto::{
    CreateMailMessageAttachmentDto,
    UpdateMailMessageAttachmentDto,
    PatchMailMessageAttachmentDto,
    MailMessageAttachmentResponseDto,
    MailMessageAttachmentListResponseDto,
    MailMessageAttachmentSummaryDto,
};
pub use mail_message_star_dto::{
    CreateMailMessageStarDto,
    UpdateMailMessageStarDto,
    PatchMailMessageStarDto,
    MailMessageStarResponseDto,
    MailMessageStarListResponseDto,
    MailMessageStarSummaryDto,
};
pub use mail_message_dto::{
    CreateMailMessageDto,
    UpdateMailMessageDto,
    PatchMailMessageDto,
    MailMessageResponseDto,
    MailMessageListResponseDto,
    MailMessageSummaryDto,
};
pub use mail_dto::{
    CreateMailDto,
    UpdateMailDto,
    PatchMailDto,
    MailResponseDto,
    MailListResponseDto,
    MailSummaryDto,
};
pub use mail_notification_dto::{
    CreateMailNotificationDto,
    UpdateMailNotificationDto,
    PatchMailNotificationDto,
    MailNotificationResponseDto,
    MailNotificationListResponseDto,
    MailNotificationSummaryDto,
};
pub use mail_message_subtype_dto::{
    CreateMailMessageSubtypeDto,
    UpdateMailMessageSubtypeDto,
    PatchMailMessageSubtypeDto,
    MailMessageSubtypeResponseDto,
    MailMessageSubtypeListResponseDto,
    MailMessageSubtypeSummaryDto,
};
pub use mail_message_reaction_dto::{
    CreateMailMessageReactionDto,
    UpdateMailMessageReactionDto,
    PatchMailMessageReactionDto,
    MailMessageReactionResponseDto,
    MailMessageReactionListResponseDto,
    MailMessageReactionSummaryDto,
};
pub use mail_followers_dto::{
    CreateMailFollowersDto,
    UpdateMailFollowersDto,
    PatchMailFollowersDto,
    MailFollowersResponseDto,
    MailFollowersListResponseDto,
    MailFollowersSummaryDto,
};
pub use mail_presence_dto::{
    CreateMailPresenceDto,
    UpdateMailPresenceDto,
    PatchMailPresenceDto,
    MailPresenceResponseDto,
    MailPresenceListResponseDto,
    MailPresenceSummaryDto,
};
pub use mail_blacklist_dto::{
    CreateMailBlacklistDto,
    UpdateMailBlacklistDto,
    PatchMailBlacklistDto,
    MailBlacklistResponseDto,
    MailBlacklistListResponseDto,
    MailBlacklistSummaryDto,
};
pub use mail_tracking_value_dto::{
    CreateMailTrackingValueDto,
    UpdateMailTrackingValueDto,
    PatchMailTrackingValueDto,
    MailTrackingValueResponseDto,
    MailTrackingValueListResponseDto,
    MailTrackingValueSummaryDto,
};
pub use discuss_channel_dto::{
    CreateDiscussChannelDto,
    UpdateDiscussChannelDto,
    PatchDiscussChannelDto,
    DiscussChannelResponseDto,
    DiscussChannelListResponseDto,
    DiscussChannelSummaryDto,
};
pub use discuss_channel_member_dto::{
    CreateDiscussChannelMemberDto,
    UpdateDiscussChannelMemberDto,
    PatchDiscussChannelMemberDto,
    DiscussChannelMemberResponseDto,
    DiscussChannelMemberListResponseDto,
    DiscussChannelMemberSummaryDto,
};
pub use mail_guest_dto::{
    CreateMailGuestDto,
    UpdateMailGuestDto,
    PatchMailGuestDto,
    MailGuestResponseDto,
    MailGuestListResponseDto,
    MailGuestSummaryDto,
};
pub use mail_server_dto::{
    CreateMailServerDto,
    UpdateMailServerDto,
    PatchMailServerDto,
    MailServerResponseDto,
    MailServerListResponseDto,
    MailServerSummaryDto,
};
pub use fetchmail_server_dto::{
    CreateFetchmailServerDto,
    UpdateFetchmailServerDto,
    PatchFetchmailServerDto,
    FetchmailServerResponseDto,
    FetchmailServerListResponseDto,
    FetchmailServerSummaryDto,
};
pub use mail_gateway_allowed_dto::{
    CreateMailGatewayAllowedDto,
    UpdateMailGatewayAllowedDto,
    PatchMailGatewayAllowedDto,
    MailGatewayAllowedResponseDto,
    MailGatewayAllowedListResponseDto,
    MailGatewayAllowedSummaryDto,
};
pub use phone_blacklist_dto::{
    CreatePhoneBlacklistDto,
    UpdatePhoneBlacklistDto,
    PatchPhoneBlacklistDto,
    PhoneBlacklistResponseDto,
    PhoneBlacklistListResponseDto,
    PhoneBlacklistSummaryDto,
};
pub use mail_message_schedule_dto::{
    CreateMailMessageScheduleDto,
    UpdateMailMessageScheduleDto,
    PatchMailMessageScheduleDto,
    MailMessageScheduleResponseDto,
    MailMessageScheduleListResponseDto,
    MailMessageScheduleSummaryDto,
};
pub use mail_scheduled_message_dto::{
    CreateMailScheduledMessageDto,
    UpdateMailScheduledMessageDto,
    PatchMailScheduledMessageDto,
    MailScheduledMessageResponseDto,
    MailScheduledMessageListResponseDto,
    MailScheduledMessageSummaryDto,
};
pub use sms_dto::{
    CreateSmsDto,
    UpdateSmsDto,
    PatchSmsDto,
    SmsResponseDto,
    SmsListResponseDto,
    SmsSummaryDto,
};
pub use sms_template_dto::{
    CreateSmsTemplateDto,
    UpdateSmsTemplateDto,
    PatchSmsTemplateDto,
    SmsTemplateResponseDto,
    SmsTemplateListResponseDto,
    SmsTemplateSummaryDto,
};
pub use sms_tracker_dto::{
    CreateSmsTrackerDto,
    UpdateSmsTrackerDto,
    PatchSmsTrackerDto,
    SmsTrackerResponseDto,
    SmsTrackerListResponseDto,
    SmsTrackerSummaryDto,
};

// Common pagination types
use serde::Serialize;

#[cfg(feature = "openapi")]
#[cfg(feature = "openapi")]
use utoipa::ToSchema;

/// Pagination parameters for list requests
#[derive(Debug, Clone, Default, serde::Deserialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct PaginationParams {
    /// Page number (1-indexed)
    #[serde(default = "default_page")]
    pub page: u32,
    /// Items per page
    #[serde(default = "default_per_page")]
    pub per_page: u32,
    /// Field to sort by
    pub sort_by: Option<String>,
    /// Sort order (asc/desc)
    pub sort_order: Option<String>,
}

fn default_page() -> u32 { 1 }
fn default_per_page() -> u32 { 20 }

/// API response wrapper
#[derive(Debug, Clone, Serialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct ApiResponse<T> {
    pub success: bool,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub data: Option<T>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub error: Option<ApiError>,
}

#[derive(Debug, Clone, Serialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct ApiError {
    pub code: String,
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub details: Option<serde_json::Value>,
}

impl<T> ApiResponse<T> {
    pub fn ok(data: T) -> Self {
        Self { success: true, data: Some(data), error: None }
    }

    pub fn err(code: impl Into<String>, message: impl Into<String>) -> Self {
        Self {
            success: false,
            data: None,
            error: Some(ApiError {
                code: code.into(),
                message: message.into(),
                details: None,
            }),
        }
    }
}