add notifications logic and add support of both JWT and Sanctum

This commit is contained in:
root
2026-03-11 01:20:31 -04:00
parent f6be51576c
commit 182036cc41
141 changed files with 8685 additions and 648 deletions
@@ -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,
];
}
}