public function getIndex() { $recentQuery = Track::summary()->with(['genre', 'user', 'cover', 'user.avatar'])->whereIsLatest(true)->listed()->userDetails()->explicitFilter()->published()->orderBy('published_at', 'desc')->take(30); $recentTracks = []; foreach ($recentQuery->get() as $track) { $recentTracks[] = Track::mapPublicTrackSummary($track); } return Response::json(['recent_tracks' => $recentTracks, 'popular_tracks' => Track::popular(30, Auth::check() && Auth::user()->can_see_explicit_content)], 200); }
public function latest() { $tracks = Track::summary()->userDetails()->listed()->explicitFilter()->published()->with('user', 'genre', 'cover', 'album', 'album.user')->take(10)->get(); $tracks = $tracks->map(function (Track $track) { return Track::mapPublicTrackSummary($track); }); $json = ['total_tracks' => $tracks->count(), 'tracks' => $tracks->toArray()]; return Response::json($json, 200); }
public static function popular($count, $allowExplicit = false) { $trackIds = Cache::remember('popular_tracks' . $count . '-' . ($allowExplicit ? 'explicit' : 'safe'), 5, function () use($allowExplicit, $count) { $query = static::published()->listed()->join(DB::raw(' ( SELECT `track_id`, `created_at` FROM `resource_log_items` WHERE track_id IS NOT NULL AND log_type = 3 AND `created_at` > now() - INTERVAL 1 DAY ) AS ranged_plays'), 'tracks.id', '=', 'ranged_plays.track_id')->groupBy('id')->orderBy('plays', 'desc')->take($count); if (!$allowExplicit) { $query->whereIsExplicit(false); } $results = []; foreach ($query->get(['*', DB::raw('count(*) as plays')]) as $track) { $results[] = $track->id; } return $results; }); if (!count($trackIds)) { return []; } $tracks = Track::summary()->userDetails()->explicitFilter()->published()->with('user', 'genre', 'cover', 'album', 'album.user')->whereIn('id', $trackIds); $processed = []; foreach ($tracks->get() as $track) { $processed[] = Track::mapPublicTrackSummary($track); } // Songs that get played more should drop down // in the list so they don't hog the top spots. array_reverse($processed); return $processed; }
public function getOwned() { $query = Track::summary()->where('user_id', \Auth::user()->id)->orderBy('created_at', 'desc'); $tracks = []; foreach ($query->get() as $track) { $tracks[] = Track::mapPrivateTrackSummary($track); } return Response::json($tracks, 200); }
public function getShow($slug) { $user = User::whereSlug($slug)->whereNull('disabled_at')->userDetails()->with(['comments' => function ($query) { $query->with('user'); }])->first(); if (!$user) { App::abort(404); } $trackQuery = Track::summary()->published()->explicitFilter()->listed()->with('genre', 'cover', 'user')->userDetails()->whereUserId($user->id)->whereNotNull('published_at')->orderBy('created_at', 'desc')->take(20); $latestTracks = []; foreach ($trackQuery->get() as $track) { $latestTracks[] = Track::mapPublicTrackSummary($track); } $comments = []; foreach ($user->comments as $comment) { $comments[] = Comment::mapPublic($comment); } $userData = ['is_following' => false]; if ($user->users->count()) { $userRow = $user->users[0]; $userData = ['is_following' => (bool) $userRow->is_followed]; } return Response::json(['artist' => ['id' => (int) $user->id, 'name' => $user->display_name, 'slug' => $user->slug, 'is_archived' => (bool) $user->is_archived, 'avatars' => ['small' => $user->getAvatarUrl(Image::SMALL), 'normal' => $user->getAvatarUrl(Image::NORMAL)], 'created_at' => $user->created_at, 'followers' => [], 'following' => [], 'latest_tracks' => $latestTracks, 'comments' => $comments, 'bio' => $user->bio, 'mlpforums_username' => $user->username, 'message_url' => $user->message_url, 'user_data' => $userData]], 200); }