refactor(notifications): standardize getRecipients method signatures

This commit is contained in:
Andras Bacsai
2025-03-24 17:55:10 +01:00
parent 5e6c112fcc
commit e7f32a1c44
6 changed files with 43 additions and 22 deletions

View File

@@ -3,16 +3,12 @@
namespace App\Models;
use App\Jobs\PullHelperImageJob;
use App\Notifications\Channels\SendsEmail;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Spatie\Url\Url;
class InstanceSettings extends Model implements SendsEmail
class InstanceSettings extends Model
{
use Notifiable;
protected $guarded = [];
protected $casts = [
@@ -92,15 +88,15 @@ class InstanceSettings extends Model implements SendsEmail
return InstanceSettings::findOrFail(0);
}
public function getRecipients($notification)
{
$recipients = data_get($notification, 'emails', null);
if (is_null($recipients) || $recipients === '') {
return [];
}
// public function getRecipients($notification)
// {
// $recipients = data_get($notification, 'emails', null);
// if (is_null($recipients) || $recipients === '') {
// return [];
// }
return explode(',', $recipients);
}
// return explode(',', $recipients);
// }
public function getTitleDisplayName(): string
{

View File

@@ -163,14 +163,17 @@ class Team extends Model implements SendsDiscord, SendsEmail, SendsPushover, Sen
];
}
public function getRecipients($notification)
public function getRecipients(): array
{
$recipients = data_get($notification, 'emails', null);
if (is_null($recipients)) {
return $this->members()->pluck('email')->toArray();
$recipients = $this->members()->pluck('email')->toArray();
$validatedEmails = array_filter($recipients, function ($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL);
});
if (is_null($validatedEmails)) {
return [];
}
return explode(',', $recipients);
return array_values($validatedEmails);
}
public function isAnyNotificationEnabled()

View File

@@ -116,9 +116,9 @@ class User extends Authenticatable implements SendsEmail
return $this->belongsToMany(Team::class)->withPivot('role');
}
public function getRecipients($notification)
public function getRecipients(): array
{
return $this->email;
return [$this->email];
}
public function sendVerificationEmail()

View File

@@ -13,7 +13,7 @@ class EmailChannel
{
try {
$this->bootConfigs($notifiable);
$recipients = $notifiable->getRecipients($notification);
$recipients = $notifiable->getRecipients();
if (count($recipients) === 0) {
throw new Exception('No email recipients found');
}

View File

@@ -4,5 +4,5 @@ namespace App\Notifications\Channels;
interface SendsEmail
{
public function getRecipients($notification);
public function getRecipients(): array;
}

View File

@@ -0,0 +1,22 @@
<?php
namespace Illuminate\Notifications;
use App\Notifications\Channels\SendsEmail;
use App\Notifications\Dto\DiscordMessage;
use App\Notifications\Dto\PushoverMessage;
use App\Notifications\Dto\SlackMessage;
use Illuminate\Notifications\Messages\MailMessage;
interface Notification
{
public function toMail(SendsEmail $notifiable): MailMessage;
public function toPushover(): PushoverMessage;
public function toDiscord(): DiscordMessage;
public function toSlack(): SlackMessage;
public function toTelegram();
}