"""Channel dispatch — email / SMS / postcard.""" from dataclasses import dataclass from contacts.models import Channel from messaging.models import Message from messaging.providers.email.smtp2go import send_email from messaging.providers.postcard import get_postcard_provider from messaging.providers.sms.smtp2go import send_sms @dataclass class ProviderResult: provider: str provider_id: str def dispatch_message(message: Message) -> ProviderResult: if message.channel == Channel.EMAIL: result = send_email(message) return ProviderResult(provider="smtp2go_email", provider_id=result) if message.channel == Channel.SMS: result = send_sms(message) return ProviderResult(provider="smtp2go_sms", provider_id=result) if message.channel == Channel.POSTCARD: provider = get_postcard_provider() result = provider.send_postcard(message) return ProviderResult(provider=provider.name, provider_id=result.provider_id) raise ValueError(f"Unsupported channel: {message.channel}")