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; namespace App\Models;
use App\Jobs\PullHelperImageJob; use App\Jobs\PullHelperImageJob;
use App\Notifications\Channels\SendsEmail;
use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Spatie\Url\Url; use Spatie\Url\Url;
class InstanceSettings extends Model implements SendsEmail class InstanceSettings extends Model
{ {
use Notifiable;
protected $guarded = []; protected $guarded = [];
protected $casts = [ protected $casts = [
@@ -92,15 +88,15 @@ class InstanceSettings extends Model implements SendsEmail
return InstanceSettings::findOrFail(0); return InstanceSettings::findOrFail(0);
} }
public function getRecipients($notification) // public function getRecipients($notification)
{ // {
$recipients = data_get($notification, 'emails', null); // $recipients = data_get($notification, 'emails', null);
if (is_null($recipients) || $recipients === '') { // if (is_null($recipients) || $recipients === '') {
return []; // return [];
} // }
return explode(',', $recipients); // return explode(',', $recipients);
} // }
public function getTitleDisplayName(): string 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); $recipients = $this->members()->pluck('email')->toArray();
if (is_null($recipients)) { $validatedEmails = array_filter($recipients, function ($email) {
return $this->members()->pluck('email')->toArray(); return filter_var($email, FILTER_VALIDATE_EMAIL);
});
if (is_null($validatedEmails)) {
return [];
} }
return explode(',', $recipients); return array_values($validatedEmails);
} }
public function isAnyNotificationEnabled() public function isAnyNotificationEnabled()

View File

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

View File

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

View File

@@ -4,5 +4,5 @@ namespace App\Notifications\Channels;
interface SendsEmail 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();
}