lms/app/Services/NewsletterService.php
2025-12-15 12:26:23 +01:00

62 lines
1.7 KiB
PHP

<?php
namespace App\Services;
use App\Models\Newsletter;
use App\Models\User;
use App\Notifications\NewsletterNotification;
use App\Services\MediaService;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Database\Eloquent\Collection;
class NewsletterService extends MediaService
{
function getNewsletters(array $data, bool $paginate = false): LengthAwarePaginator|Collection
{
$page = array_key_exists('per_page', $data) ? intval($data['per_page']) : 10;
$newsletters = Newsletter::when(array_key_exists('search', $data), function ($query) use ($data) {
return $query->where('subject', 'LIKE', '%' . $data['search'] . '%');
})
->orderBy('created_at', 'desc');
if ($paginate) {
return $newsletters->paginate($page);
}
return $newsletters->get();
}
function createNewsletter(array $data): Newsletter
{
return Newsletter::create($data);
}
function updateNewsletter(string $id, array $data): Newsletter
{
$newsletter = Newsletter::find($id);
$newsletter->update($data);
return $newsletter;
}
function deleteNewsletter(string $id): bool
{
return Newsletter::find($id)->delete();
}
function NewsletterNotification(array $data)
{
$newsletter = Newsletter::find($data['newsletter_id']);
$users = User::when($data['user_type'] === 'all', function ($query) {
return $query->where('role', '!=', 'admin');
})->when($data['user_type'] !== 'all', function ($query) use ($data) {
return $query->where('role', $data['user_type']);
})->get();
foreach ($users as $user) {
$user->notify(new NewsletterNotification($newsletter));
}
}
}