query('metric', 'views')); if (! in_array($metric, ['views', 'downloads'])) { $metric = 'views'; } // Aggregate artwork_stats grouped by artwork.user_id, filtering only public+approved+published artworks $sub = Artwork::query() ->select('artworks.user_id') ->join('artwork_stats', 'artwork_stats.artwork_id', '=', 'artworks.id') ->where('artworks.is_public', true) ->where('artworks.is_approved', true) ->whereNotNull('artworks.published_at') ->where('artworks.published_at', '<=', now()) ->whereNull('artworks.deleted_at') ->selectRaw('artworks.user_id, SUM(artwork_stats.' . $metric . ') as total_metric, MAX(artworks.published_at) as latest_published') ->groupBy('artworks.user_id'); // Join with users to fetch profile info $query = DB::table(DB::raw('(' . $sub->toSql() . ') as t')) ->mergeBindings($sub->getQuery()) ->join('users as u', 'u.id', '=', 't.user_id') ->select('u.id as user_id', 'u.name as uname', 'u.username', 't.total_metric', 't.latest_published') ->orderByDesc('t.total_metric') ->orderByDesc('t.latest_published'); $authors = $query->paginate($perPage)->withQueryString(); // Map to legacy view shape $authors->getCollection()->transform(function ($row) use ($metric) { return (object) [ 'user_id' => $row->user_id, 'uname' => $row->uname, 'username' => $row->username, 'total' => (int) $row->total_metric, 'metric' => $metric, ]; }); $page_title = 'Top Authors'; return view('legacy.top-authors', compact('page_title', 'authors', 'metric')); } }