1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//! Repository trait for MailMessageSchedule aggregate
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! This trait defines the repository contract for the MailMessageSchedule aggregate.
//! Implementation is in the infrastructure layer.
use async_trait::async_trait;
use anyhow::Result;
use uuid::Uuid;
use crate::domain::entity::MailMessageSchedule;
/// Pagination parameters for list queries
#[derive(Debug, Clone, Default)]
pub struct MailMessageSchedulePaginationParams {
pub page: u32,
pub per_page: u32,
}
impl MailMessageSchedulePaginationParams {
pub fn new(page: u32, per_page: u32) -> Self {
Self { page, per_page }
}
pub fn offset(&self) -> u64 {
((self.page.saturating_sub(1)) * self.per_page) as u64
}
pub fn limit(&self) -> u64 {
self.per_page as u64
}
}
/// Paginated result for list queries
#[derive(Debug, Clone)]
pub struct MailMessageSchedulePaginatedResult {
pub data: Vec<MailMessageSchedule>,
pub total: u64,
pub page: u32,
pub per_page: u32,
}
/// Filter parameters for list queries
#[derive(Debug, Clone, Default)]
pub struct MailMessageScheduleFilter {
pub mail_message_id: Option<Uuid>,
pub notification_parameters: Option<String>,
}
impl MailMessageScheduleFilter {
/// Check if any filter is set
pub fn has_filters(&self) -> bool {
self.mail_message_id.is_some() || self.notification_parameters.is_some()
}
}
/// Repository trait for MailMessageSchedule aggregate
///
/// This trait defines the persistence contract for MailMessageSchedule entities.
/// Implementations should be in the infrastructure layer.
#[async_trait]
pub trait MailMessageScheduleRepository: Send + Sync {
// =========================================================================
// Core CRUD Operations
// =========================================================================
/// Save a new mail_message_schedule entity
async fn save(&self, entity: &MailMessageSchedule) -> Result<MailMessageSchedule>;
/// Find mail_message_schedule by ID
async fn find_by_id(&self, id: &str) -> Result<Option<MailMessageSchedule>>;
/// Find all mail_message_schedule entities
async fn find_all(&self) -> Result<Vec<MailMessageSchedule>>;
/// Update mail_message_schedule by ID
async fn update(&self, id: &str, entity: &MailMessageSchedule) -> Result<Option<MailMessageSchedule>>;
/// Delete mail_message_schedule by ID
async fn delete(&self, id: &str) -> Result<bool>;
// =========================================================================
// Pagination
// =========================================================================
/// List mail_message_schedule with pagination
async fn list(&self, params: MailMessageSchedulePaginationParams) -> Result<MailMessageSchedulePaginatedResult>;
/// List mail_message_schedule with pagination and filters
async fn list_with_filters(&self, params: MailMessageSchedulePaginationParams, filters: MailMessageScheduleFilter) -> Result<MailMessageSchedulePaginatedResult>;
/// Count all mail_message_schedule entities
async fn count(&self) -> Result<u64>;
/// Count mail_message_schedule entities matching filters
async fn count_with_filters(&self, filters: MailMessageScheduleFilter) -> Result<u64>;
/// Check if mail_message_schedule exists by ID
async fn exists(&self, id: &str) -> Result<bool>;
// =========================================================================
// Soft Delete Operations
// =========================================================================
/// Soft delete mail_message_schedule by ID
async fn soft_delete(&self, id: &str) -> Result<bool>;
/// Restore soft-deleted mail_message_schedule by ID
async fn restore(&self, id: &str) -> Result<Option<MailMessageSchedule>>;
/// List soft-deleted mail_message_schedule entities
async fn list_deleted(&self, params: MailMessageSchedulePaginationParams) -> Result<MailMessageSchedulePaginatedResult>;
/// Empty trash (permanently delete all soft-deleted entities)
async fn empty_trash(&self) -> Result<u64>;
// =========================================================================
// Bulk Operations
// =========================================================================
/// Bulk save mail_message_schedule entities
async fn bulk_save(&self, entities: &[MailMessageSchedule]) -> Result<Vec<MailMessageSchedule>>;
/// Bulk delete by IDs
async fn bulk_delete(&self, ids: &[&str]) -> Result<u64>;
}