Publication initiale de RelaisSMS : documentation et sources nettoyees
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Recipients;
|
||||
|
||||
final readonly class RecipientResolutionResult
|
||||
{
|
||||
/**
|
||||
* @param array<int, array<string, mixed>> $recipients
|
||||
* @param array<int, array<string, mixed>> $excluded
|
||||
*/
|
||||
public function __construct(
|
||||
public array $recipients,
|
||||
public array $excluded,
|
||||
public int $selectedContactCount,
|
||||
public int $selectedGroupCount,
|
||||
) {}
|
||||
|
||||
/**
|
||||
* @return array<string, int>
|
||||
*/
|
||||
public function summary(): array
|
||||
{
|
||||
return [
|
||||
'selected_contacts' => $this->selectedContactCount,
|
||||
'selected_groups' => $this->selectedGroupCount,
|
||||
'ready_numbers' => count($this->recipients),
|
||||
'excluded_total' => count($this->excluded),
|
||||
'opt_out' => $this->countExcludedReason('opt_out'),
|
||||
'missing_phone' => $this->countExcludedReason('missing_phone'),
|
||||
'invalid' => $this->countExcludedReason('invalid'),
|
||||
'non_mobile' => $this->countExcludedReason('non_mobile'),
|
||||
'duplicate' => $this->countExcludedReason('duplicate'),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<int, array<string, mixed>>
|
||||
*/
|
||||
public function excludedByReason(string $reason): array
|
||||
{
|
||||
return array_values(array_filter(
|
||||
$this->excluded,
|
||||
fn (array $entry): bool => ($entry['reason'] ?? null) === $reason,
|
||||
));
|
||||
}
|
||||
|
||||
private function countExcludedReason(string $reason): int
|
||||
{
|
||||
return count($this->excludedByReason($reason));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user