Files
alrahma_sunday_school_api/app/Services/BroadcastEmail/BroadcastEmailDispatchService.php
T
2026-06-09 01:03:53 -04:00

82 lines
2.2 KiB
PHP

<?php
namespace App\Services\BroadcastEmail;
use App\Services\EmailService;
class BroadcastEmailDispatchService
{
private EmailService $mailer;
private BroadcastEmailComposerService $composer;
public function __construct(EmailService $mailer, BroadcastEmailComposerService $composer)
{
$this->mailer = $mailer;
$this->composer = $composer;
}
public function sendTest(array $payload): array
{
$html = $this->composer->compose(
(bool) $payload['wrap_layout'],
$payload['subject'],
$payload['body_html'],
$payload['recipient_name'],
$payload['preheader'],
$payload['cta_text'],
$payload['cta_url'],
(bool) $payload['personalize']
);
$ok = $this->mailer->send(
$payload['test_email'],
'[TEST] ' . $payload['subject'],
$html,
$payload['from_key']
);
return [
'ok' => $ok,
'message' => $ok
? "Test email sent to {$payload['test_email']}."
: 'Test email failed (mailer->send() returned false). Check logs.',
];
}
public function sendBroadcast(array $payload, array $recipients): array
{
$stats = [
'attempted' => 0,
'sent' => 0,
'failed' => 0,
'mode' => $payload['mode'],
];
foreach ($recipients as $recipient) {
$stats['attempted']++;
$recipientName = $recipient['name'] ?: 'Parent';
$html = $this->composer->compose(
(bool) $payload['wrap_layout'],
$payload['subject'],
$payload['body_html'],
$recipientName,
$payload['preheader'],
$payload['cta_text'],
$payload['cta_url'],
(bool) $payload['personalize']
);
$ok = $this->mailer->send(
(string) $recipient['email'],
$payload['subject'],
$html,
$payload['from_key']
);
$ok ? $stats['sent']++ : $stats['failed']++;
}
return $stats;
}
}