This commit is contained in:
Konstantinos Arvanitakis
2026-07-01 18:35:39 +03:00
commit 9f58a36c82
44 changed files with 3848 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
<?php
namespace Modules\Core\Notification;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;
abstract class BaseNotification extends Notification implements RegisterableNotification, ShouldQueue
{
use Queueable;
}
+63
View File
@@ -0,0 +1,63 @@
<?php
namespace Modules\Core\Notification;
use Illuminate\Support\Facades\Event;
class NotificationRegistry
{
private static ?self $instance = null;
private array $notifications = [];
private function __construct() {}
public static function get(): static
{
if (static::$instance == null) {
static::$instance = new static();
}
return static::$instance;
}
public function register(array $notifications): void
{
foreach ($notifications as $class) {
$key = $class::getKey();
$alreadyRegistered = isset($this->notifications[$key]);
$this->notifications[$key] = $class;
if ($alreadyRegistered) {
continue;
}
Event::listen($class::listensTo(), function (object $event) use ($key) {
$class = $this->notifications[$key] ?? null;
if ($class == null) {
return;
}
try {
$notification = new $class($event);
if (isset($event->delaySeconds) && $event->delaySeconds > 0) {
$notification->delay($event->delaySeconds);
}
$notification->notifiable()->notify($notification);
} catch (\Throwable $e) {
report($e);
}
});
}
}
public function unregister(string $key): void
{
unset($this->notifications[$key]);
}
public function all(): array
{
return $this->notifications;
}
}
@@ -0,0 +1,15 @@
<?php
namespace Modules\Core\Notification;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\AnonymousNotifiable;
interface RegisterableNotification
{
public static function getKey(): string;
public static function listensTo(): string;
public function notifiable(): AnonymousNotifiable|Model;
}