feat(push notification): membuat trait untuk simpan data subcription dan use di di semua component

This commit is contained in:
Yoga Pangestu 2025-11-16 14:38:01 +07:00
parent 163a90b857
commit fd5a85400c
28 changed files with 90 additions and 52 deletions

View File

@ -3,6 +3,7 @@
namespace App\Livewire\Studio\Catalog\Bottle; namespace App\Livewire\Studio\Catalog\Bottle;
use App\Models\Bottle; use App\Models\Bottle;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
use App\Traits\WithShowPrice; use App\Traits\WithShowPrice;
use App\Traits\WithToast; use App\Traits\WithToast;
@ -13,7 +14,7 @@
#[Title('Botol')] #[Title('Botol')]
class Index extends Component class Index extends Component
{ {
use WithConfirmation, WithShowPrice, WithToast; use WithConfirmation, WithShowPrice, WithSubscribeNotification, WithToast;
public function delete(Bottle $bottle) public function delete(Bottle $bottle)
{ {

View File

@ -4,6 +4,7 @@
use App\Livewire\Forms\Studio\Catalog\BrandForm; use App\Livewire\Forms\Studio\Catalog\BrandForm;
use App\Models\Brand as BrandModel; use App\Models\Brand as BrandModel;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
@ -17,7 +18,7 @@
#[Title('Merek')] #[Title('Merek')]
class Brand extends Component class Brand extends Component
{ {
use WithAuthorization, WithCloseModal, WithConfirmation, WithToast, WithUpdatedData; use WithAuthorization, WithCloseModal, WithConfirmation, WithSubscribeNotification, WithToast, WithUpdatedData;
public BrandForm $form; public BrandForm $form;

View File

@ -4,6 +4,7 @@
use App\Livewire\Forms\Studio\Catalog\CategoryForm; use App\Livewire\Forms\Studio\Catalog\CategoryForm;
use App\Models\Category as CategoryModel; use App\Models\Category as CategoryModel;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
@ -17,7 +18,7 @@
#[Title('Kategori')] #[Title('Kategori')]
class Category extends Component class Category extends Component
{ {
use WithAuthorization, WithCloseModal, WithConfirmation, WithToast, WithUpdatedData; use WithAuthorization, WithCloseModal, WithConfirmation, WithSubscribeNotification, WithToast, WithUpdatedData;
public CategoryForm $form; public CategoryForm $form;

View File

@ -3,6 +3,7 @@
namespace App\Livewire\Studio\Catalog\Perfume; namespace App\Livewire\Studio\Catalog\Perfume;
use App\Models\Perfume; use App\Models\Perfume;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
use App\Traits\WithShowPrice; use App\Traits\WithShowPrice;
use App\Traits\WithToast; use App\Traits\WithToast;
@ -13,7 +14,7 @@
#[Title('Parfum')] #[Title('Parfum')]
class Index extends Component class Index extends Component
{ {
use WithConfirmation, WithShowPrice, WithToast; use WithConfirmation, WithShowPrice, WithSubscribeNotification, WithToast;
public function delete(Perfume $perfume) public function delete(Perfume $perfume)
{ {

View File

@ -3,6 +3,7 @@
namespace App\Livewire\Studio\Catalog\Product; namespace App\Livewire\Studio\Catalog\Product;
use App\Models\Product; use App\Models\Product;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
use App\Traits\WithShowPrice; use App\Traits\WithShowPrice;
use App\Traits\WithToast; use App\Traits\WithToast;
@ -13,7 +14,7 @@
#[Title('Produk')] #[Title('Produk')]
class Index extends Component class Index extends Component
{ {
use WithConfirmation, WithShowPrice,WithToast; use WithConfirmation, WithShowPrice, WithSubscribeNotification, WithToast;
public function delete(Product $product) public function delete(Product $product)
{ {

View File

@ -17,6 +17,7 @@
use App\Models\Tier; use App\Models\Tier;
use App\Models\User; use App\Models\User;
use App\Models\Voucher; use App\Models\Voucher;
use App\Traits\Notification\WithSubscribeNotification;
use Carbon\Carbon; use Carbon\Carbon;
use Livewire\Attributes\Title; use Livewire\Attributes\Title;
use Livewire\Component; use Livewire\Component;
@ -24,6 +25,8 @@
#[Title('Analisa')] #[Title('Analisa')]
class Analysis extends Component class Analysis extends Component
{ {
use WithSubscribeNotification;
public string $period = 'all'; public string $period = 'all';
public array $outlets = []; public array $outlets = [];

View File

@ -7,15 +7,16 @@
use App\Models\OrderItem; use App\Models\OrderItem;
use App\Models\Perfume; use App\Models\Perfume;
use App\Models\Purchase; use App\Models\Purchase;
use App\Models\PushNotification; use App\Traits\Notification\WithSubscribeNotification;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Livewire\Attributes\On;
use Livewire\Attributes\Title; use Livewire\Attributes\Title;
use Livewire\Component; use Livewire\Component;
#[Title('Ringkasan')] #[Title('Ringkasan')]
class Overview extends Component class Overview extends Component
{ {
use WithSubscribeNotification;
public array $outlets = []; public array $outlets = [];
public array $selectedOutletIds = []; public array $selectedOutletIds = [];
@ -250,31 +251,6 @@ protected function loadStats()
]); ]);
} }
#[On('notification:subscribe')]
public function notificationSubscribe(string $subscription)
{
$subscription = json_decode($subscription, true);
$isExist = PushNotification::where('user_id', auth()->id())
->whereJsonContains('subscriptions->keys->auth', $subscription['keys']['auth'])
->first();
if ($isExist) {
return;
}
$userId = auth()->id();
$encodedSubscription = json_encode($subscription);
PushNotification::updateOrCreate(
[
'user_id' => $userId,
'subscriptions' => $encodedSubscription,
],
['subscriptions' => $encodedSubscription],
);
}
public function render() public function render()
{ {
return view('livewire.studio.dashboard.overview'); return view('livewire.studio.dashboard.overview');

View File

@ -4,6 +4,7 @@
use App\Livewire\Forms\Studio\Feature\ChooseUsForm; use App\Livewire\Forms\Studio\Feature\ChooseUsForm;
use App\Models\ChooseUs as ChooseUsModel; use App\Models\ChooseUs as ChooseUsModel;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
@ -17,7 +18,7 @@
#[Title('Pilih Kami')] #[Title('Pilih Kami')]
class ChooseUs extends Component class ChooseUs extends Component
{ {
use WithAuthorization, WithCloseModal, WithConfirmation, WithToast, WithUpdatedData; use WithAuthorization, WithCloseModal, WithConfirmation, WithSubscribeNotification, WithToast, WithUpdatedData;
public ChooseUsForm $form; public ChooseUsForm $form;

View File

@ -4,6 +4,7 @@
use App\Livewire\Forms\Studio\Feature\PerfumeFeatureForm; use App\Livewire\Forms\Studio\Feature\PerfumeFeatureForm;
use App\Models\PerfumeFeature as PerfumeFeatureModel; use App\Models\PerfumeFeature as PerfumeFeatureModel;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
@ -17,7 +18,7 @@
#[Title('Keunggulan Parfum')] #[Title('Keunggulan Parfum')]
class PerfumeFeature extends Component class PerfumeFeature extends Component
{ {
use WithAuthorization, WithCloseModal, WithConfirmation, WithToast, WithUpdatedData; use WithAuthorization, WithCloseModal, WithConfirmation, WithSubscribeNotification, WithToast, WithUpdatedData;
public PerfumeFeatureForm $form; public PerfumeFeatureForm $form;

View File

@ -5,6 +5,7 @@
use App\Livewire\Forms\Studio\Finance\ExpenseForm; use App\Livewire\Forms\Studio\Finance\ExpenseForm;
use App\Models\Expense as ExpenseModel; use App\Models\Expense as ExpenseModel;
use App\Models\Outlet; use App\Models\Outlet;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
@ -18,7 +19,7 @@
#[Title('Pengeluaran')] #[Title('Pengeluaran')]
class Expense extends Component class Expense extends Component
{ {
use WithAuthorization, WithCloseModal, WithConfirmation, WithToast, WithUpdatedData; use WithAuthorization, WithCloseModal, WithConfirmation, WithSubscribeNotification, WithToast, WithUpdatedData;
public ExpenseForm $form; public ExpenseForm $form;

View File

@ -7,6 +7,7 @@
use App\Models\Payroll as PayrollModel; use App\Models\Payroll as PayrollModel;
use App\Models\PayrollAdjustment; use App\Models\PayrollAdjustment;
use App\Models\User; use App\Models\User;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
@ -22,7 +23,7 @@
#[Title('Penggajian')] #[Title('Penggajian')]
class Payroll extends Component class Payroll extends Component
{ {
use WithAuthorization, WithCloseModal, WithConfirmation, WithToast, WithUpdatedData, WithUserSelector; use WithAuthorization, WithCloseModal, WithConfirmation, WithSubscribeNotification, WithToast, WithUpdatedData, WithUserSelector;
public PayrollForm $form; public PayrollForm $form;

View File

@ -4,6 +4,7 @@
use App\Livewire\Forms\Studio\Loyalty\CustomerForm; use App\Livewire\Forms\Studio\Loyalty\CustomerForm;
use App\Models\Customer as CustomerModel; use App\Models\Customer as CustomerModel;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
@ -17,7 +18,7 @@
#[Title('Customer')] #[Title('Customer')]
class Customer extends Component class Customer extends Component
{ {
use WithAuthorization, WithCloseModal, WithConfirmation, WithToast, WithUpdatedData; use WithAuthorization, WithCloseModal, WithConfirmation, WithSubscribeNotification, WithToast, WithUpdatedData;
public CustomerForm $form; public CustomerForm $form;

View File

@ -7,6 +7,7 @@
use App\Models\Perfume; use App\Models\Perfume;
use App\Models\Product; use App\Models\Product;
use App\Models\Tier as TierModel; use App\Models\Tier as TierModel;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
@ -20,7 +21,7 @@
#[Title('Tier')] #[Title('Tier')]
class Tier extends Component class Tier extends Component
{ {
use WithAuthorization, WithCloseModal, WithConfirmation, WithToast, WithUpdatedData; use WithAuthorization, WithCloseModal, WithConfirmation, WithSubscribeNotification, WithToast, WithUpdatedData;
public array $tiers = []; public array $tiers = [];

View File

@ -5,6 +5,7 @@
use App\Livewire\Forms\Studio\Loyalty\Tier\RewardForm; use App\Livewire\Forms\Studio\Loyalty\Tier\RewardForm;
use App\Livewire\Studio\Loyalty\Tier; use App\Livewire\Studio\Loyalty\Tier;
use App\Models\TierReward; use App\Models\TierReward;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
@ -18,7 +19,7 @@
#[Title('Hadiah')] #[Title('Hadiah')]
class Reward extends Component class Reward extends Component
{ {
use WithAuthorization, WithCloseModal, WithConfirmation, WithToast, WithUpdatedData; use WithAuthorization, WithCloseModal, WithConfirmation, WithSubscribeNotification, WithToast, WithUpdatedData;
public RewardForm $form; public RewardForm $form;

View File

@ -3,6 +3,7 @@
namespace App\Livewire\Studio\Loyalty\Voucher; namespace App\Livewire\Studio\Loyalty\Voucher;
use App\Models\Voucher; use App\Models\Voucher;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
use App\Traits\WithToast; use App\Traits\WithToast;
use Flux\Flux; use Flux\Flux;
@ -12,7 +13,7 @@
#[Title('Voucher')] #[Title('Voucher')]
class Index extends Component class Index extends Component
{ {
use WithConfirmation, WithToast; use WithConfirmation, WithSubscribeNotification, WithToast;
public array $stats = []; public array $stats = [];

View File

@ -3,6 +3,7 @@
namespace App\Livewire\Studio\Manage\Article; namespace App\Livewire\Studio\Manage\Article;
use App\Models\Article; use App\Models\Article;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
use App\Traits\WithToast; use App\Traits\WithToast;
use Flux\Flux; use Flux\Flux;
@ -12,7 +13,7 @@
#[Title('Artikel')] #[Title('Artikel')]
class Index extends Component class Index extends Component
{ {
use WithConfirmation, WithToast; use WithConfirmation, WithSubscribeNotification, WithToast;
public function delete(Article $article) public function delete(Article $article)
{ {

View File

@ -4,6 +4,7 @@
use App\Livewire\Forms\Studio\Manage\FaqForm; use App\Livewire\Forms\Studio\Manage\FaqForm;
use App\Models\Faq as FaqModel; use App\Models\Faq as FaqModel;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
@ -17,7 +18,7 @@
#[Title('FAQs')] #[Title('FAQs')]
class Faq extends Component class Faq extends Component
{ {
use WithAuthorization, WithCloseModal, WithConfirmation, WithToast, WithUpdatedData; use WithAuthorization, WithCloseModal, WithConfirmation, WithSubscribeNotification, WithToast, WithUpdatedData;
public FaqForm $form; public FaqForm $form;

View File

@ -3,6 +3,7 @@
namespace App\Livewire\Studio\Manage\Order; namespace App\Livewire\Studio\Manage\Order;
use App\Models\Order; use App\Models\Order;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\Order\WithUpdateStock; use App\Traits\Order\WithUpdateStock;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
@ -14,7 +15,7 @@
#[Title('Order')] #[Title('Order')]
class Index extends Component class Index extends Component
{ {
use WithCloseModal, WithConfirmation, WithToast, WithUpdateStock; use WithCloseModal, WithConfirmation, WithSubscribeNotification, WithToast, WithUpdateStock;
public function delete(Order $order) public function delete(Order $order)
{ {

View File

@ -3,6 +3,7 @@
namespace App\Livewire\Studio\Manage\Purchase; namespace App\Livewire\Studio\Manage\Purchase;
use App\Models\Purchase; use App\Models\Purchase;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\Purchase\WithUpdateStock; use App\Traits\Purchase\WithUpdateStock;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
@ -14,7 +15,7 @@
#[Title('Belanja')] #[Title('Belanja')]
class Index extends Component class Index extends Component
{ {
use WithCloseModal, WithConfirmation, WithToast, WithUpdateStock; use WithCloseModal, WithConfirmation, WithSubscribeNotification, WithToast, WithUpdateStock;
public function delete(Purchase $purchase) public function delete(Purchase $purchase)
{ {

View File

@ -6,6 +6,7 @@
use App\Models\Bottle; use App\Models\Bottle;
use App\Models\Formula as FormulaModel; use App\Models\Formula as FormulaModel;
use App\Models\PushNotification; use App\Models\PushNotification;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
@ -21,7 +22,7 @@
#[Title('Rumus')] #[Title('Rumus')]
class Formula extends Component class Formula extends Component
{ {
use WithAuthorization, WithCloseModal, WithConfirmation, WithToast, WithUpdatedData; use WithAuthorization, WithCloseModal, WithConfirmation, WithSubscribeNotification, WithToast, WithUpdatedData;
public FormulaForm $form; public FormulaForm $form;

View File

@ -4,6 +4,7 @@
use App\Enums\Day; use App\Enums\Day;
use App\Models\Outlet; use App\Models\Outlet;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithCloseModal; use App\Traits\WithCloseModal;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
use App\Traits\WithMediaHandler; use App\Traits\WithMediaHandler;
@ -16,7 +17,7 @@
#[Title('Outlet')] #[Title('Outlet')]
class Index extends Component class Index extends Component
{ {
use WithCloseModal, WithConfirmation, WithMediaHandler, WithToast; use WithCloseModal, WithConfirmation, WithMediaHandler, WithSubscribeNotification, WithToast;
public array $outlets = []; public array $outlets = [];

View File

@ -4,6 +4,7 @@
use App\Models\Employee; use App\Models\Employee;
use App\Models\User; use App\Models\User;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithConfirmation; use App\Traits\WithConfirmation;
use App\Traits\WithToast; use App\Traits\WithToast;
use Flux\Flux; use Flux\Flux;
@ -14,7 +15,7 @@
#[Title('Pegawai')] #[Title('Pegawai')]
class Index extends Component class Index extends Component
{ {
use WithConfirmation, WithToast; use WithConfirmation, WithSubscribeNotification, WithToast;
public array $employees = []; public array $employees = [];

View File

@ -4,6 +4,7 @@
use App\Livewire\Forms\Studio\Setting\AccountForm; use App\Livewire\Forms\Studio\Setting\AccountForm;
use App\Models\User; use App\Models\User;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithToast; use App\Traits\WithToast;
use App\Traits\WithUpdatedData; use App\Traits\WithUpdatedData;
@ -13,7 +14,7 @@
#[Title('Akun')] #[Title('Akun')]
class Account extends Component class Account extends Component
{ {
use WithAuthorization, WithToast, WithUpdatedData; use WithAuthorization, WithSubscribeNotification, WithToast, WithUpdatedData;
public AccountForm $form; public AccountForm $form;

View File

@ -10,6 +10,7 @@
use App\Settings\GeneralSettings; use App\Settings\GeneralSettings;
use App\Settings\SeoSettings; use App\Settings\SeoSettings;
use App\Settings\SocialSettings; use App\Settings\SocialSettings;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithToast; use App\Traits\WithToast;
use App\Traits\WithUpdatedData; use App\Traits\WithUpdatedData;
@ -19,7 +20,7 @@
#[Title('Aplikasi')] #[Title('Aplikasi')]
class Application extends Component class Application extends Component
{ {
use WithAuthorization, WithToast, WithUpdatedData; use WithAuthorization, WithSubscribeNotification, WithToast, WithUpdatedData;
public GeneralForm $generalForm; public GeneralForm $generalForm;

View File

@ -4,6 +4,7 @@
use App\Livewire\Forms\Studio\Setting\PasswordForm; use App\Livewire\Forms\Studio\Setting\PasswordForm;
use App\Models\User; use App\Models\User;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithToast; use App\Traits\WithToast;
use App\Traits\WithUpdatedData; use App\Traits\WithUpdatedData;
@ -14,7 +15,7 @@
#[Title('Kata Sandi')] #[Title('Kata Sandi')]
class Password extends Component class Password extends Component
{ {
use WithAuthorization, WithToast, WithUpdatedData; use WithAuthorization, WithSubscribeNotification, WithToast, WithUpdatedData;
public PasswordForm $form; public PasswordForm $form;

View File

@ -4,6 +4,7 @@
use App\Livewire\Forms\Studio\Setting\ProfileForm; use App\Livewire\Forms\Studio\Setting\ProfileForm;
use App\Models\Employee; use App\Models\Employee;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithAuthorization; use App\Traits\WithAuthorization;
use App\Traits\WithToast; use App\Traits\WithToast;
use App\Traits\WithUpdatedData; use App\Traits\WithUpdatedData;
@ -13,7 +14,7 @@
#[Title('Profil')] #[Title('Profil')]
class Profile extends Component class Profile extends Component
{ {
use WithAuthorization, WithToast, WithUpdatedData; use WithAuthorization, WithSubscribeNotification, WithToast, WithUpdatedData;
public ProfileForm $form; public ProfileForm $form;

View File

@ -3,6 +3,7 @@
namespace App\Livewire\Studio\Setting; namespace App\Livewire\Studio\Setting;
use App\Models\Whatsapp as WhatsappModel; use App\Models\Whatsapp as WhatsappModel;
use App\Traits\Notification\WithSubscribeNotification;
use App\Traits\WithToast; use App\Traits\WithToast;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
@ -12,7 +13,7 @@
#[Title('Whatsapp')] #[Title('Whatsapp')]
class Whatsapp extends Component class Whatsapp extends Component
{ {
use WithToast; use WithSubscribeNotification, WithToast;
public array $whatsapp = []; public array $whatsapp = [];

View File

@ -0,0 +1,34 @@
<?php
namespace App\Traits\Notification;
use App\Models\PushNotification;
use Livewire\Attributes\On;
trait WithSubscribeNotification
{
#[On('notification:subscribe')]
public function notificationSubscribe(string $subscription)
{
$subscription = json_decode($subscription, true);
$isExist = PushNotification::where('user_id', auth()->id())
->whereJsonContains('subscriptions->keys->auth', $subscription['keys']['auth'])
->first();
if ($isExist) {
return;
}
$userId = auth()->id();
$encodedSubscription = json_encode($subscription);
PushNotification::updateOrCreate(
[
'user_id' => $userId,
'subscriptions' => $encodedSubscription,
],
['subscriptions' => $encodedSubscription],
);
}
}