. */ namespace Poniverse\Ponyfm\Http\Controllers\Api\Web; use Auth; use Illuminate\Support\Facades\Request; use Poniverse\Ponyfm\Http\Controllers\ApiControllerBase; use Poniverse\Ponyfm\Models\Notification; use Poniverse\Ponyfm\Models\Subscription; use Poniverse\Ponyfm\Models\Track; use Poniverse\Ponyfm\Models\User; use Minishlink\WebPush\WebPush; class NotificationsController extends ApiControllerBase { /** * Returns the logged-in user's last 20 notifications. * * @return array */ public function getNotifications() { $notifications = Notification::forUser(Auth::user()) ->take(20) ->get(); $outputArray = $notifications->toArray(); return ['notifications' => array_values(array_filter($outputArray))]; } /** * This action returns the number of notifications that were updated. * Any notifications that were specified that don't belong to the logged-in * user are ignored. * * @return array */ public function putMarkAsRead() { $notificationIds = Request::json('notification_ids'); $numberOfUpdatedRows = Auth::user() ->notifications() ->whereIn('id', $notificationIds) ->update(['is_read' => true]); return ['notifications_updated' => $numberOfUpdatedRows]; } /** * Subscribe a user to native push notifications. Takes an endpoint and * encryption keys from the client and stores them in the database * for future use. * * @return string */ public function postSubscribe() { $input = json_decode(Request::json('subscription')); if ($input != 'null') { $existing = Subscription::where('endpoint', '=', $input->endpoint) ->where('user_id', '=', Auth::user()->id) ->first(); if ($existing === null) { $subscription = Subscription::create([ 'user_id' => Auth::user()->id, 'endpoint' => $input->endpoint, 'p256dh' => $input->keys->p256dh, 'auth' => $input->keys->auth ]); return ['id' => $subscription->id]; } else { return ['id' => $existing->id]; } } else { return ['error' => 'No data']; } } /** * Removes a user's notification subscription * * @return string */ public function postUnsubscribe() { $input = json_decode(Request::json('subscription')); $existing = Subscription::where('endpoint', '=', $input->endpoint) ->where('user_id', '=', Auth::user()->id) ->delete(); return ['result' => 'success']; } }