diff --git a/app/Models/WebPushSubscription.php b/app/Models/WebPushSubscription.php new file mode 100644 index 0000000..82afaeb --- /dev/null +++ b/app/Models/WebPushSubscription.php @@ -0,0 +1,19 @@ +json(['success' => true]); // })->middleware('auth'); - Route::post('/push/subscribe', function (Request $request) { + // Route::post('/push/subscribe', function (Request $request) { + // $user = Filament::auth()->user(); + + // abort_if(!$user, 401); + + // $user->updatePushSubscription( + // $request->endpoint, + // $request->keys['p256dh'], + // $request->keys['auth'], + // $request->contentEncoding ?? 'aesgcm' + // ); + + // return response()->json(['success' => true]); + // }); + + Route::post('/push/subscribe', function (Request $request) { + $user = Filament::auth()->user(); + abort_if(!$user, 401); - abort_if(!$user, 401); + $request->validate([ + 'endpoint' => 'required|string', + 'keys.p256dh' => 'required|string', + 'keys.auth' => 'required|string', + ]); - $user->updatePushSubscription( - $request->endpoint, - $request->keys['p256dh'], - $request->keys['auth'], - $request->contentEncoding ?? 'aesgcm' - ); + WebPushSubscription::updateOrCreate( + // ✅ UNIQUE PER DEVICE + ['endpoint' => $request->endpoint], + [ + 'subscribable_type' => get_class($user), // 🔥 important + 'subscribable_id' => $user->id, + 'public_key' => $request->keys['p256dh'], + 'auth_token' => $request->keys['auth'], + 'content_encoding' => $request->contentEncoding ?? 'aesgcm', + ] + ); - return response()->json(['success' => true]); - }); + return response()->json(['success' => true]); +}); // routes/web.php