integer('per_page', 20), 60)); $notifications = $request->user() ->notifications() ->whereIn('type', MobileNotification::TYPES) ->latest() ->paginate($perPage); return NotificationResource::collection($notifications)->additional([ 'unreadCount' => $this->unreadCountFor($request), ]); } public function unreadCount(Request $request): JsonResponse { return response()->json([ 'data' => [ 'count' => $this->unreadCountFor($request), ], ]); } public function markAsRead(Request $request, string $notification): NotificationResource { $databaseNotification = $request->user() ->notifications() ->whereIn('type', MobileNotification::TYPES) ->findOrFail($notification); $databaseNotification->markAsRead(); return NotificationResource::make($databaseNotification->fresh()); } public function markAllAsRead(Request $request): JsonResponse { $updated = $request->user() ->unreadNotifications() ->whereIn('type', MobileNotification::TYPES) ->update(['read_at' => now()]); return response()->json([ 'data' => [ 'updated' => $updated, ], 'code' => 'NOTIFICATIONS_MARKED_AS_READ', ]); } private function unreadCountFor(Request $request): int { return $request->user() ->unreadNotifications() ->whereIn('type', MobileNotification::TYPES) ->count(); } }