add notifications logic and add support of both JWT and Sanctum
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Notifications;
|
||||
|
||||
use App\Models\Configuration;
|
||||
use App\Models\Notification;
|
||||
use App\Models\UserNotification;
|
||||
|
||||
class UserNotificationDispatchService
|
||||
{
|
||||
public function notifyUser(
|
||||
int $userId,
|
||||
string $title,
|
||||
string $message,
|
||||
array $channels = ['in_app'],
|
||||
string $topic = 'general',
|
||||
?string $targetGroup = null
|
||||
): array {
|
||||
if ($userId <= 0) {
|
||||
return ['ok' => false, 'message' => 'Invalid user id.'];
|
||||
}
|
||||
|
||||
$channels = array_values(array_unique(array_map('strtolower', (array) $channels)));
|
||||
if (empty($channels)) {
|
||||
$channels = ['in_app'];
|
||||
}
|
||||
|
||||
$schoolYear = Configuration::getConfigValueByKey('school_year');
|
||||
$semester = Configuration::getConfigValueByKey('semester');
|
||||
|
||||
$notification = Notification::query()->create([
|
||||
'title' => $title,
|
||||
'message' => $message,
|
||||
'target_group' => $targetGroup ?: 'everyone',
|
||||
'delivery_channels' => $channels,
|
||||
'priority' => 'normal',
|
||||
'status' => 'sent',
|
||||
'scheduled_at' => now(),
|
||||
'sent_at' => now(),
|
||||
'school_year' => $schoolYear,
|
||||
'semester' => $semester,
|
||||
]);
|
||||
|
||||
UserNotification::query()->create([
|
||||
'notification_id' => (int) $notification->id,
|
||||
'user_id' => $userId,
|
||||
'is_read' => 0,
|
||||
'delivered' => in_array('in_app', $channels, true) ? 1 : 0,
|
||||
'delivered_at' => in_array('in_app', $channels, true) ? now() : null,
|
||||
'school_year' => $schoolYear,
|
||||
'semester' => $semester,
|
||||
]);
|
||||
|
||||
return [
|
||||
'ok' => true,
|
||||
'notification_id' => (int) $notification->id,
|
||||
'topic' => $topic,
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user