validate([ 'endpoint' => 'required|string|max:500', 'keys.p256dh' => 'required|string', 'keys.auth' => 'required|string', 'contentEncoding' => 'nullable|string|max:32', ]); $user = $request->user(); PushSubscription::updateOrCreate( ['endpoint' => $data['endpoint']], [ 'company_id' => $user?->company_id, 'user_id' => $user?->id, 'public_key' => $data['keys']['p256dh'], 'auth_token' => $data['keys']['auth'], 'content_encoding' => $data['contentEncoding'] ?? 'aesgcm', 'user_agent' => substr((string) $request->userAgent(), 0, 255), ] ); return response()->json(['ok' => true]); } public function unsubscribe(Request $request) { $endpoint = $request->input('endpoint'); if ($endpoint) { PushSubscription::where('endpoint', $endpoint)->delete(); } return response()->json(['ok' => true]); } }