#![recursion_limit = "1024"]
#![allow(unused_imports)]
pub mod domain;
pub mod infrastructure;
pub mod application;
pub mod presentation;
pub mod seeders;
pub mod exports;
pub use domain::entity::*;
pub use domain::state_machine::*;
pub use infrastructure::persistence::*;
pub use application::service::MailActivityService;
pub use application::service::MailActivityTypeService;
pub use application::service::MailActivityPlanService;
pub use application::service::MailActivityPlanTemplateService;
pub use application::service::MailAliasDomainService;
pub use application::service::MailAliasService;
pub use application::service::MailAttachmentService;
pub use application::service::MailMessageAttachmentService;
pub use application::service::MailMessageStarService;
pub use application::service::MailMessageService;
pub use application::service::MailService;
pub use application::service::MailNotificationService;
pub use application::service::MailMessageSubtypeService;
pub use application::service::MailMessageReactionService;
pub use application::service::MailFollowersService;
pub use application::service::MailPresenceService;
pub use application::service::MailBlacklistService;
pub use application::service::MailTrackingValueService;
pub use application::service::DiscussChannelService;
pub use application::service::DiscussChannelMemberService;
pub use application::service::MailGuestService;
pub use application::service::MailServerService;
pub use application::service::FetchmailServerService;
pub use application::service::MailGatewayAllowedService;
pub use application::service::PhoneBlacklistService;
pub use application::service::MailMessageScheduleService;
pub use application::service::MailScheduledMessageService;
pub use application::service::SmsService;
pub use application::service::SmsTemplateService;
pub use application::service::SmsTrackerService;
pub use application::validator::{ValidationError, ValidationResult};
use std::sync::Arc;
use axum::Router;
use sqlx::PgPool;
use crate::application::service::{
ActivityWriteService, AliasWriteService, AttachmentWriteService, ChannelMemberWriteService,
ChannelQueryService, ChannelWriteService, FollowerWriteService, GuestWriteService,
MailBlacklistWriteService, MailQueueWriteService, MessageEditService, MessageQueryService,
MessageWriteService, PhoneBlacklistWriteService, PhoneBookPort, PhoneBookSlot,
PhoneValidationService, PresenceWriteService, ReactionWriteService, RecipientQueryService,
ScheduleWriteService, SmsStatusWebhookService, SmsWriteService, StaticThreadAccess,
ThreadAclSlot, ThreadAccessResolver, ThreadChatterService, TypingService,
};
pub mod realtime;
pub struct MessagingModule {
pub(crate) mail_activity_service: Arc<MailActivityService>,
pub(crate) mail_activity_type_service: Arc<MailActivityTypeService>,
pub(crate) mail_activity_plan_service: Arc<MailActivityPlanService>,
pub(crate) mail_activity_plan_template_service: Arc<MailActivityPlanTemplateService>,
pub(crate) mail_alias_domain_service: Arc<MailAliasDomainService>,
pub(crate) mail_alias_service: Arc<MailAliasService>,
pub(crate) mail_attachment_service: Arc<MailAttachmentService>,
pub(crate) mail_message_attachment_service: Arc<MailMessageAttachmentService>,
pub(crate) mail_message_star_service: Arc<MailMessageStarService>,
pub(crate) mail_message_service: Arc<MailMessageService>,
pub(crate) mail_service: Arc<MailService>,
pub(crate) mail_notification_service: Arc<MailNotificationService>,
pub(crate) mail_message_subtype_service: Arc<MailMessageSubtypeService>,
pub(crate) mail_message_reaction_service: Arc<MailMessageReactionService>,
pub(crate) mail_followers_service: Arc<MailFollowersService>,
pub(crate) mail_presence_service: Arc<MailPresenceService>,
pub(crate) mail_blacklist_service: Arc<MailBlacklistService>,
pub(crate) mail_tracking_value_service: Arc<MailTrackingValueService>,
pub(crate) discuss_channel_service: Arc<DiscussChannelService>,
pub(crate) discuss_channel_member_service: Arc<DiscussChannelMemberService>,
pub(crate) mail_guest_service: Arc<MailGuestService>,
pub(crate) mail_server_service: Arc<MailServerService>,
pub(crate) fetchmail_server_service: Arc<FetchmailServerService>,
pub(crate) mail_gateway_allowed_service: Arc<MailGatewayAllowedService>,
pub(crate) phone_blacklist_service: Arc<PhoneBlacklistService>,
pub(crate) mail_message_schedule_service: Arc<MailMessageScheduleService>,
pub(crate) mail_scheduled_message_service: Arc<MailScheduledMessageService>,
pub(crate) sms_service: Arc<SmsService>,
pub(crate) sms_template_service: Arc<SmsTemplateService>,
pub(crate) sms_tracker_service: Arc<SmsTrackerService>,
pub message_write_service: Arc<MessageWriteService>,
pub follower_write_service: Arc<FollowerWriteService>,
pub activity_write_service: Arc<ActivityWriteService>,
pub sms_write_service: Arc<SmsWriteService>,
pub mail_queue_write_service: Arc<MailQueueWriteService>,
pub alias_write_service: Arc<AliasWriteService>,
pub thread_acl: ThreadAclSlot,
pub thread_chatter_service: Arc<ThreadChatterService>,
pub channel_write_service: Arc<ChannelWriteService>,
pub channel_member_write_service: Arc<ChannelMemberWriteService>,
pub typing_service: Arc<TypingService>,
pub reaction_write_service: Arc<ReactionWriteService>,
pub message_edit_service: Arc<MessageEditService>,
pub guest_write_service: Arc<GuestWriteService>,
pub presence_write_service: Arc<PresenceWriteService>,
pub schedule_write_service: Arc<ScheduleWriteService>,
pub attachment_write_service: Arc<AttachmentWriteService>,
pub message_query_service: Arc<MessageQueryService>,
pub channel_query_service: Arc<ChannelQueryService>,
pub recipient_query_service: Arc<RecipientQueryService>,
pub pool: sqlx::PgPool,
pub realtime_registry: std::sync::Arc<realtime::RealtimeRegistry>,
pub phone_blacklist_write_service: Arc<PhoneBlacklistWriteService>,
pub mail_blacklist_write_service: Arc<MailBlacklistWriteService>,
pub phone_book: PhoneBookSlot,
pub phone_validation_service: Arc<PhoneValidationService>,
}
impl MessagingModule {
pub fn builder() -> MessagingModuleBuilder {
MessagingModuleBuilder::new()
}
pub fn all_crud_routes(&self) -> Router {
use presentation::http::{
create_mail_activity_routes,
create_mail_activity_type_read_routes,
create_mail_activity_plan_routes,
create_mail_activity_plan_template_routes,
create_mail_alias_domain_routes,
create_mail_alias_routes,
create_mail_attachment_routes,
create_mail_message_attachment_routes,
create_mail_message_star_routes,
create_mail_message_read_routes,
create_mail_read_routes,
create_mail_notification_read_routes,
create_mail_message_subtype_routes,
create_mail_message_reaction_routes,
create_mail_followers_routes,
create_mail_presence_read_routes,
create_mail_blacklist_routes,
create_mail_tracking_value_routes,
create_discuss_channel_read_routes,
create_discuss_channel_member_routes,
create_mail_guest_routes,
create_mail_server_routes,
create_fetchmail_server_read_routes,
create_mail_gateway_allowed_routes,
create_phone_blacklist_routes,
create_mail_message_schedule_routes,
create_mail_scheduled_message_routes,
create_sms_read_routes,
create_sms_template_routes,
create_sms_tracker_read_routes,
};
Router::new()
.merge(create_mail_activity_routes(self.mail_activity_service.clone()))
.merge(create_mail_activity_type_read_routes(self.mail_activity_type_service.clone()))
.merge(create_mail_activity_plan_routes(self.mail_activity_plan_service.clone()))
.merge(create_mail_activity_plan_template_routes(self.mail_activity_plan_template_service.clone()))
.merge(create_mail_alias_domain_routes(self.mail_alias_domain_service.clone()))
.merge(create_mail_alias_routes(self.mail_alias_service.clone()))
.merge(create_mail_attachment_routes(self.mail_attachment_service.clone()))
.merge(create_mail_message_attachment_routes(self.mail_message_attachment_service.clone()))
.merge(create_mail_message_star_routes(self.mail_message_star_service.clone()))
.merge(create_mail_message_read_routes(self.mail_message_service.clone()))
.merge(create_mail_read_routes(self.mail_service.clone()))
.merge(create_mail_notification_read_routes(self.mail_notification_service.clone()))
.merge(create_mail_message_subtype_routes(self.mail_message_subtype_service.clone()))
.merge(create_mail_message_reaction_routes(self.mail_message_reaction_service.clone()))
.merge(create_mail_followers_routes(self.mail_followers_service.clone()))
.merge(create_mail_presence_read_routes(self.mail_presence_service.clone()))
.merge(create_mail_blacklist_routes(self.mail_blacklist_service.clone()))
.merge(create_mail_tracking_value_routes(self.mail_tracking_value_service.clone()))
.merge(create_discuss_channel_read_routes(self.discuss_channel_service.clone()))
.merge(create_discuss_channel_member_routes(self.discuss_channel_member_service.clone()))
.merge(create_mail_guest_routes(self.mail_guest_service.clone()))
.merge(create_mail_server_routes(self.mail_server_service.clone()))
.merge(create_fetchmail_server_read_routes(self.fetchmail_server_service.clone()))
.merge(create_mail_gateway_allowed_routes(self.mail_gateway_allowed_service.clone()))
.merge(create_phone_blacklist_routes(self.phone_blacklist_service.clone()))
.merge(create_mail_message_schedule_routes(self.mail_message_schedule_service.clone()))
.merge(create_mail_scheduled_message_routes(self.mail_scheduled_message_service.clone()))
.merge(create_sms_read_routes(self.sms_service.clone()))
.merge(create_sms_template_routes(self.sms_template_service.clone()))
.merge(create_sms_tracker_read_routes(self.sms_tracker_service.clone()))
}
#[deprecated(note = "mounts unvalidated generic CRUD; prefer readonly_routes() + validated writes, or all_crud_routes() for the full/unguarded surface")]
pub fn routes(&self) -> Router {
self.all_crud_routes()
}
pub fn readonly_routes(&self) -> Router {
use presentation::http::{
create_mail_activity_read_routes,
create_mail_activity_type_read_routes,
create_mail_activity_plan_read_routes,
create_mail_activity_plan_template_read_routes,
create_mail_alias_domain_read_routes,
create_mail_alias_read_routes,
create_mail_attachment_read_routes,
create_mail_message_attachment_read_routes,
create_mail_message_star_read_routes,
create_mail_message_read_routes,
create_mail_read_routes,
create_mail_notification_read_routes,
create_mail_message_subtype_read_routes,
create_mail_message_reaction_read_routes,
create_mail_followers_read_routes,
create_mail_presence_read_routes,
create_mail_blacklist_read_routes,
create_mail_tracking_value_read_routes,
create_discuss_channel_read_routes,
create_discuss_channel_member_read_routes,
create_mail_guest_read_routes,
create_mail_server_read_routes,
create_fetchmail_server_read_routes,
create_mail_gateway_allowed_read_routes,
create_phone_blacklist_read_routes,
create_mail_message_schedule_read_routes,
create_mail_scheduled_message_read_routes,
create_sms_read_routes,
create_sms_template_read_routes,
create_sms_tracker_read_routes,
};
Router::new()
.merge(create_mail_activity_read_routes(self.mail_activity_service.clone()))
.merge(create_mail_activity_type_read_routes(self.mail_activity_type_service.clone()))
.merge(create_mail_activity_plan_read_routes(self.mail_activity_plan_service.clone()))
.merge(create_mail_activity_plan_template_read_routes(self.mail_activity_plan_template_service.clone()))
.merge(create_mail_alias_domain_read_routes(self.mail_alias_domain_service.clone()))
.merge(create_mail_alias_read_routes(self.mail_alias_service.clone()))
.merge(create_mail_attachment_read_routes(self.mail_attachment_service.clone()))
.merge(create_mail_message_attachment_read_routes(self.mail_message_attachment_service.clone()))
.merge(create_mail_message_star_read_routes(self.mail_message_star_service.clone()))
.merge(create_mail_message_read_routes(self.mail_message_service.clone()))
.merge(create_mail_read_routes(self.mail_service.clone()))
.merge(create_mail_notification_read_routes(self.mail_notification_service.clone()))
.merge(create_mail_message_subtype_read_routes(self.mail_message_subtype_service.clone()))
.merge(create_mail_message_reaction_read_routes(self.mail_message_reaction_service.clone()))
.merge(create_mail_followers_read_routes(self.mail_followers_service.clone()))
.merge(create_mail_presence_read_routes(self.mail_presence_service.clone()))
.merge(create_mail_blacklist_read_routes(self.mail_blacklist_service.clone()))
.merge(create_mail_tracking_value_read_routes(self.mail_tracking_value_service.clone()))
.merge(create_discuss_channel_read_routes(self.discuss_channel_service.clone()))
.merge(create_discuss_channel_member_read_routes(self.discuss_channel_member_service.clone()))
.merge(create_mail_guest_read_routes(self.mail_guest_service.clone()))
.merge(create_mail_server_read_routes(self.mail_server_service.clone()))
.merge(create_fetchmail_server_read_routes(self.fetchmail_server_service.clone()))
.merge(create_mail_gateway_allowed_read_routes(self.mail_gateway_allowed_service.clone()))
.merge(create_phone_blacklist_read_routes(self.phone_blacklist_service.clone()))
.merge(create_mail_message_schedule_read_routes(self.mail_message_schedule_service.clone()))
.merge(create_mail_scheduled_message_read_routes(self.mail_scheduled_message_service.clone()))
.merge(create_sms_read_routes(self.sms_service.clone()))
.merge(create_sms_template_read_routes(self.sms_template_service.clone()))
.merge(create_sms_tracker_read_routes(self.sms_tracker_service.clone()))
}
pub fn set_thread_acl(&self, resolver: std::sync::Arc<dyn ThreadAccessResolver>) {
self.thread_acl.install(resolver);
}
pub fn set_phone_book(&self, book: std::sync::Arc<dyn PhoneBookPort>) {
self.phone_book.install(book);
}
pub fn set_static_thread_access(&self, open_models: Vec<String>) {
self.thread_acl.install(std::sync::Arc::new(StaticThreadAccess { open_models }));
}
pub fn db_pool(&self) -> sqlx::PgPool {
self.pool.clone()
}
pub fn discuss_routes(self: &Arc<Self>) -> Router {
presentation::http::channel_routes::composer().with_state(self.clone())
}
pub fn messaging_routes(self: &Arc<Self>) -> Router {
presentation::http::thread_routes::composer().with_state(self.clone())
}
pub fn guest_routes(self: &Arc<Self>) -> Router {
presentation::http::guest_routes::composer().with_state(self.clone())
}
pub fn presence_routes(self: &Arc<Self>) -> Router {
presentation::http::presence_routes::composer().with_state(self.clone())
}
pub fn attachment_routes(self: &Arc<Self>) -> Router {
presentation::http::attachment_routes::composer().with_state(self.clone())
}
pub fn public_routes(self: &Arc<Self>) -> Router {
presentation::http::public_routes::composer().with_state(self.clone())
}
pub fn webhook_routes(self: &Arc<Self>) -> Router {
presentation::http::webhook_routes::composer().with_state(self.clone())
}
pub fn inbound_routes(self: &Arc<Self>) -> Router {
presentation::http::inbound_routes::composer().with_state(self.clone())
}
pub fn realtime_routes(self: &Arc<Self>) -> Router {
realtime::sse::composer().with_state(self.clone())
}
}
pub struct MessagingModuleBuilder {
db_pool: Option<PgPool>,
}
impl MessagingModuleBuilder {
pub fn new() -> Self {
Self {
db_pool: None,
}
}
pub fn with_database(mut self, pool: PgPool) -> Self {
self.db_pool = Some(pool);
self
}
pub fn build(self) -> anyhow::Result<MessagingModule> {
let db_pool = self.db_pool
.ok_or_else(|| anyhow::anyhow!("Database pool not configured"))?;
let mail_activity_repository = Arc::new(MailActivityRepository::new(db_pool.clone()));
let mail_activity_service = Arc::new(MailActivityService::with_repository(mail_activity_repository.clone()));
let mail_activity_type_repository = Arc::new(MailActivityTypeRepository::new(db_pool.clone()));
let mail_activity_type_service = Arc::new(MailActivityTypeService::with_repository(mail_activity_type_repository.clone()));
let mail_activity_plan_repository = Arc::new(MailActivityPlanRepository::new(db_pool.clone()));
let mail_activity_plan_service = Arc::new(MailActivityPlanService::with_repository(mail_activity_plan_repository.clone()));
let mail_activity_plan_template_repository = Arc::new(MailActivityPlanTemplateRepository::new(db_pool.clone()));
let mail_activity_plan_template_service = Arc::new(MailActivityPlanTemplateService::with_repository(mail_activity_plan_template_repository.clone()));
let mail_alias_domain_repository = Arc::new(MailAliasDomainRepository::new(db_pool.clone()));
let mail_alias_domain_service = Arc::new(MailAliasDomainService::with_repository(mail_alias_domain_repository.clone()));
let mail_alias_repository = Arc::new(MailAliasRepository::new(db_pool.clone()));
let mail_alias_service = Arc::new(MailAliasService::with_repository(mail_alias_repository.clone()));
let mail_attachment_repository = Arc::new(MailAttachmentRepository::new(db_pool.clone()));
let mail_attachment_service = Arc::new(MailAttachmentService::with_repository(mail_attachment_repository.clone()));
let mail_message_attachment_repository = Arc::new(MailMessageAttachmentRepository::new(db_pool.clone()));
let mail_message_attachment_service = Arc::new(MailMessageAttachmentService::with_repository(mail_message_attachment_repository.clone()));
let mail_message_star_repository = Arc::new(MailMessageStarRepository::new(db_pool.clone()));
let mail_message_star_service = Arc::new(MailMessageStarService::with_repository(mail_message_star_repository.clone()));
let mail_message_repository = Arc::new(MailMessageRepository::new(db_pool.clone()));
let mail_message_service = Arc::new(MailMessageService::with_repository(mail_message_repository.clone()));
let mail_repository = Arc::new(MailRepository::new(db_pool.clone()));
let mail_service = Arc::new(MailService::with_repository(mail_repository.clone()));
let mail_notification_repository = Arc::new(MailNotificationRepository::new(db_pool.clone()));
let mail_notification_service = Arc::new(MailNotificationService::with_repository(mail_notification_repository.clone()));
let mail_message_subtype_repository = Arc::new(MailMessageSubtypeRepository::new(db_pool.clone()));
let mail_message_subtype_service = Arc::new(MailMessageSubtypeService::with_repository(mail_message_subtype_repository.clone()));
let mail_message_reaction_repository = Arc::new(MailMessageReactionRepository::new(db_pool.clone()));
let mail_message_reaction_service = Arc::new(MailMessageReactionService::with_repository(mail_message_reaction_repository.clone()));
let mail_followers_repository = Arc::new(MailFollowersRepository::new(db_pool.clone()));
let mail_followers_service = Arc::new(MailFollowersService::with_repository(mail_followers_repository.clone()));
let mail_presence_repository = Arc::new(MailPresenceRepository::new(db_pool.clone()));
let mail_presence_service = Arc::new(MailPresenceService::with_repository(mail_presence_repository.clone()));
let mail_blacklist_repository = Arc::new(MailBlacklistRepository::new(db_pool.clone()));
let mail_blacklist_service = Arc::new(MailBlacklistService::with_repository(mail_blacklist_repository.clone()));
let mail_tracking_value_repository = Arc::new(MailTrackingValueRepository::new(db_pool.clone()));
let mail_tracking_value_service = Arc::new(MailTrackingValueService::with_repository(mail_tracking_value_repository.clone()));
let discuss_channel_repository = Arc::new(DiscussChannelRepository::new(db_pool.clone()));
let discuss_channel_service = Arc::new(DiscussChannelService::with_repository(discuss_channel_repository.clone()));
let discuss_channel_member_repository = Arc::new(DiscussChannelMemberRepository::new(db_pool.clone()));
let discuss_channel_member_service = Arc::new(DiscussChannelMemberService::with_repository(discuss_channel_member_repository.clone()));
let mail_guest_repository = Arc::new(MailGuestRepository::new(db_pool.clone()));
let mail_guest_service = Arc::new(MailGuestService::with_repository(mail_guest_repository.clone()));
let mail_server_repository = Arc::new(MailServerRepository::new(db_pool.clone()));
let mail_server_service = Arc::new(MailServerService::with_repository(mail_server_repository.clone()));
let fetchmail_server_repository = Arc::new(FetchmailServerRepository::new(db_pool.clone()));
let fetchmail_server_service = Arc::new(FetchmailServerService::with_repository(fetchmail_server_repository.clone()));
let mail_gateway_allowed_repository = Arc::new(MailGatewayAllowedRepository::new(db_pool.clone()));
let mail_gateway_allowed_service = Arc::new(MailGatewayAllowedService::with_repository(mail_gateway_allowed_repository.clone()));
let phone_blacklist_repository = Arc::new(PhoneBlacklistRepository::new(db_pool.clone()));
let phone_blacklist_service = Arc::new(PhoneBlacklistService::with_repository(phone_blacklist_repository.clone()));
let mail_message_schedule_repository = Arc::new(MailMessageScheduleRepository::new(db_pool.clone()));
let mail_message_schedule_service = Arc::new(MailMessageScheduleService::with_repository(mail_message_schedule_repository.clone()));
let mail_scheduled_message_repository = Arc::new(MailScheduledMessageRepository::new(db_pool.clone()));
let mail_scheduled_message_service = Arc::new(MailScheduledMessageService::with_repository(mail_scheduled_message_repository.clone()));
let sms_repository = Arc::new(SmsRepository::new(db_pool.clone()));
let sms_service = Arc::new(SmsService::with_repository(sms_repository.clone()));
let sms_template_repository = Arc::new(SmsTemplateRepository::new(db_pool.clone()));
let sms_template_service = Arc::new(SmsTemplateService::with_repository(sms_template_repository.clone()));
let sms_tracker_repository = Arc::new(SmsTrackerRepository::new(db_pool.clone()));
let sms_tracker_service = Arc::new(SmsTrackerService::with_repository(sms_tracker_repository.clone()));
let message_write_service = Arc::new(MessageWriteService::new(db_pool.clone()));
let follower_write_service = Arc::new(FollowerWriteService::new(db_pool.clone()));
let activity_write_service = Arc::new(ActivityWriteService::new(db_pool.clone()));
let sms_write_service = Arc::new(SmsWriteService::new(db_pool.clone()));
let mail_queue_write_service = Arc::new(MailQueueWriteService::new(db_pool.clone()));
let alias_write_service = Arc::new(AliasWriteService::new(db_pool.clone()));
let thread_acl = ThreadAclSlot::default();
let acl: Arc<dyn ThreadAccessResolver> = Arc::new(thread_acl.clone());
let thread_chatter_service =
Arc::new(ThreadChatterService::new(db_pool.clone(), Arc::clone(&acl)));
let schedule_write_service =
Arc::new(ScheduleWriteService::new(db_pool.clone(), Arc::clone(&acl)));
let message_query_service =
Arc::new(MessageQueryService::new(db_pool.clone(), Arc::clone(&acl)));
let recipient_query_service =
Arc::new(RecipientQueryService::new(db_pool.clone(), Arc::clone(&acl)));
let channel_write_service = Arc::new(ChannelWriteService::new(db_pool.clone()));
let channel_member_write_service =
Arc::new(ChannelMemberWriteService::new(db_pool.clone()));
let channel_query_service = Arc::new(ChannelQueryService::new(db_pool.clone()));
let typing_service = Arc::new(TypingService::new(db_pool.clone()));
let reaction_write_service = Arc::new(ReactionWriteService::new(db_pool.clone()));
let message_edit_service = Arc::new(MessageEditService::new(db_pool.clone()));
let guest_write_service = Arc::new(GuestWriteService::new(db_pool.clone()));
let presence_write_service = Arc::new(PresenceWriteService::new(db_pool.clone()));
let attachment_write_service = Arc::new(AttachmentWriteService::new(db_pool.clone()));
let realtime_registry = std::sync::Arc::new(realtime::RealtimeRegistry::new());
let phone_blacklist_write_service =
Arc::new(PhoneBlacklistWriteService::new(db_pool.clone()));
let mail_blacklist_write_service =
Arc::new(MailBlacklistWriteService::new(db_pool.clone()));
let phone_book = PhoneBookSlot::default();
let phone_validation_service = Arc::new(PhoneValidationService::new(
db_pool.clone(),
phone_book.clone(),
phone_blacklist_write_service.clone(),
));
Ok(MessagingModule {
mail_activity_service,
mail_activity_type_service,
mail_activity_plan_service,
mail_activity_plan_template_service,
mail_alias_domain_service,
mail_alias_service,
mail_attachment_service,
mail_message_attachment_service,
mail_message_star_service,
mail_message_service,
mail_service,
mail_notification_service,
mail_message_subtype_service,
mail_message_reaction_service,
mail_followers_service,
mail_presence_service,
mail_blacklist_service,
mail_tracking_value_service,
discuss_channel_service,
discuss_channel_member_service,
mail_guest_service,
mail_server_service,
fetchmail_server_service,
mail_gateway_allowed_service,
phone_blacklist_service,
mail_message_schedule_service,
mail_scheduled_message_service,
sms_service,
sms_template_service,
sms_tracker_service,
message_write_service,
follower_write_service,
activity_write_service,
sms_write_service,
mail_queue_write_service,
alias_write_service,
thread_acl,
thread_chatter_service,
channel_write_service,
channel_member_write_service,
typing_service,
reaction_write_service,
message_edit_service,
guest_write_service,
presence_write_service,
schedule_write_service,
attachment_write_service,
message_query_service,
channel_query_service,
recipient_query_service,
pool: db_pool.clone(),
realtime_registry,
phone_blacklist_write_service,
mail_blacklist_write_service,
phone_book,
phone_validation_service,
})
}
}
impl Default for MessagingModuleBuilder {
fn default() -> Self {
Self::new()
}
}