diff --git a/app/controllers/Api/Web/AlbumsController.php b/app/controllers/Api/Web/AlbumsController.php index 302ef1c3..d5117c5a 100644 --- a/app/controllers/Api/Web/AlbumsController.php +++ b/app/controllers/Api/Web/AlbumsController.php @@ -28,7 +28,7 @@ } public function getShow($id) { - $album = Album::with(['tracks' => function($query) { $query->details(); }, 'user', 'comments' => function($query) { $query->with('user'); }])->details()->find($id); + $album = Album::with(['tracks' => function($query) { $query->details(); }, 'tracks.cover', 'tracks.genre', 'tracks.user', 'user', 'comments' => function($query) { $query->with('user'); }])->details()->find($id); if (!$album) App::abort(404); @@ -48,10 +48,10 @@ $page = Input::get('page'); $query = Album::summary() - ->with(['tracks' => function($query) { $query->details(); }, 'user']) + ->with('user', 'user.avatar', 'cover') ->details() ->orderBy('created_at', 'desc') - ->whereRaw('(SELECT COUNT(id) FROM tracks WHERE tracks.album_id = albums.id) > 0'); + ->where('track_count', '>', 0); $count = $query->count(); $perPage = 15; diff --git a/app/controllers/Api/Web/ArtistsController.php b/app/controllers/Api/Web/ArtistsController.php index 06a33e96..2321b01a 100644 --- a/app/controllers/Api/Web/ArtistsController.php +++ b/app/controllers/Api/Web/ArtistsController.php @@ -68,9 +68,9 @@ } $query = Album::summary() - ->with('tracks', 'user') + ->with('user') ->orderBy('created_at', 'desc') - ->whereRaw('(SELECT COUNT(id) FROM tracks WHERE tracks.album_id = albums.id) > 0') + ->where('track_count', '>', 0) ->whereUserId($user->id); $albums = []; @@ -125,7 +125,7 @@ $page = Input::get('page'); $query = User::orderBy('created_at', 'desc') - ->whereRaw('(SELECT COUNT(id) FROM tracks WHERE tracks.user_id = users.id) > 0'); + ->where('track_count', '>', 0); $count = $query->count(); $perPage = 15; diff --git a/app/controllers/Api/Web/PlaylistsController.php b/app/controllers/Api/Web/PlaylistsController.php index 76e9b118..349c17ff 100644 --- a/app/controllers/Api/Web/PlaylistsController.php +++ b/app/controllers/Api/Web/PlaylistsController.php @@ -48,8 +48,8 @@ public function getPinned() { $query = Playlist - ::with(['tracks.user', 'tracks' => function($query) {}, 'comments', 'comments.user']) - ->details() + ::details() + ->with('tracks', 'tracks.cover', 'tracks.user', 'user') ->join('pinned_playlists', function($join) { $join->on('playlist_id', '=', 'playlists.id'); }) diff --git a/app/database/migrations/2013_06_07_003952_create_users_table.php b/app/database/migrations/2013_06_07_003952_create_users_table.php index 6f4c91a8..23a8b967 100644 --- a/app/database/migrations/2013_06_07_003952_create_users_table.php +++ b/app/database/migrations/2013_06_07_003952_create_users_table.php @@ -18,6 +18,7 @@ class CreateUsersTable extends Migration { $table->boolean('uses_gravatar')->default(true); $table->boolean('can_see_explicit_content'); $table->text('bio'); + $table->integer('track_count')->unsigned(); $table->integer('comment_count')->unsigned(); $table->timestamps(); }); diff --git a/app/database/migrations/2013_07_28_060804_create_albums.php b/app/database/migrations/2013_07_28_060804_create_albums.php index dca1d0dc..d2aa6456 100644 --- a/app/database/migrations/2013_07_28_060804_create_albums.php +++ b/app/database/migrations/2013_07_28_060804_create_albums.php @@ -12,6 +12,7 @@ class CreateAlbums extends Migration { $table->text('description'); $table->integer('cover_id')->unsigned()->nullable(); + $table->integer('track_count')->unsigned(); $table->integer('view_count')->unsigned(); $table->integer('download_count')->unsigned(); $table->integer('favourite_count')->unsigned(); diff --git a/app/database/migrations/2013_07_28_135136_create_playlists.php b/app/database/migrations/2013_07_28_135136_create_playlists.php index 6fa43eb1..9c61a5a5 100644 --- a/app/database/migrations/2013_07_28_135136_create_playlists.php +++ b/app/database/migrations/2013_07_28_135136_create_playlists.php @@ -12,6 +12,7 @@ class CreatePlaylists extends Migration { $table->text('description'); $table->boolean('is_public'); + $table->integer('track_count')->unsigned(); $table->integer('view_count')->unsigned(); $table->integer('download_count')->unsigned(); $table->integer('favourite_count')->unsigned(); diff --git a/app/models/Commands/AddTrackToPlaylistCommand.php b/app/models/Commands/AddTrackToPlaylistCommand.php index 36a2f737..e016743c 100644 --- a/app/models/Commands/AddTrackToPlaylistCommand.php +++ b/app/models/Commands/AddTrackToPlaylistCommand.php @@ -7,6 +7,7 @@ use Entities\Playlist; use Entities\Track; use Illuminate\Support\Facades\Auth; + use Illuminate\Support\Facades\DB; class AddTrackToPlaylistCommand extends CommandBase { private $_track; @@ -32,6 +33,11 @@ public function execute() { $songIndex = $this->_playlist->tracks()->count() + 1; $this->_playlist->tracks()->attach($this->_track, ['position' => $songIndex]); + + Playlist::whereId($this->_playlist->id)->update([ + 'track_count' => DB::raw('(SELECT COUNT(id) FROM playlist_track WHERE playlist_id = ' . $this->_playlist->id . ')') + ]); + return CommandResponse::succeed(['message' => 'Track added!']); } } \ No newline at end of file diff --git a/app/models/Commands/EditAlbumCommand.php b/app/models/Commands/EditAlbumCommand.php index 40d30170..3f7cf989 100644 --- a/app/models/Commands/EditAlbumCommand.php +++ b/app/models/Commands/EditAlbumCommand.php @@ -6,6 +6,7 @@ use Entities\Image; use Entities\Track; use Illuminate\Support\Facades\Auth; + use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Validator; @@ -61,6 +62,10 @@ $this->_album->syncTrackIds($trackIds); $this->_album->save(); + Album::whereId($this->_album->id)->update([ + 'track_count' => DB::raw('(SELECT COUNT(id) FROM tracks WHERE album_id = ' . $this->_album->id . ')') + ]); + return CommandResponse::succeed(['real_cover_url' => $this->_album->getCoverUrl(Image::NORMAL)]); } } \ No newline at end of file diff --git a/app/models/Commands/EditTrackCommand.php b/app/models/Commands/EditTrackCommand.php index 3e9700d8..baf0218d 100644 --- a/app/models/Commands/EditTrackCommand.php +++ b/app/models/Commands/EditTrackCommand.php @@ -5,8 +5,10 @@ use Entities\Album; use Entities\Image; use Entities\Track; + use Entities\User; use External; use Illuminate\Support\Facades\Auth; + use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; class EditTrackCommand extends CommandBase { @@ -76,6 +78,10 @@ $album = Album::find($this->_input['album_id']); $track->track_number = $album->tracks()->count() + 1; $track->album_id = $this->_input['album_id']; + + Album::whereId($album->id)->update([ + 'track_count' => DB::raw('SELECT COUNT(id) FROM tracks WHERE album_id = ' . $album->id) + ]); } } else { if ($track->album_id != null) { @@ -107,6 +113,10 @@ $track->updateTags(); $track->save(); + User::whereId($this->_track->user_id)->update([ + 'track_count' => DB::raw('(SELECT COUNT(id) FROM tracks WHERE deleted_at IS NULL AND published_at IS NOT NULL AND user_id = ' . $this->_track->user_id . ')') + ]); + return CommandResponse::succeed(['real_cover_url' => $track->getCoverUrl(Image::NORMAL)]); } @@ -122,5 +132,9 @@ $track->updateTags(); $track->save(); } + + Album::whereId($album->id)->update([ + 'track_count' => DB::raw('(SELECT COUNT(id) FROM tracks WHERE album_id = ' . $album->id . ')') + ]); } } \ No newline at end of file diff --git a/app/models/Entities/Album.php b/app/models/Entities/Album.php index 79953ab8..00b91099 100644 --- a/app/models/Entities/Album.php +++ b/app/models/Entities/Album.php @@ -106,7 +106,7 @@ return [ 'id' => $album->id, - 'track_count' => $album->tracks()->count(), + 'track_count' => $album->track_count, 'title' => $album->title, 'slug' => $album->slug, 'created_at' => $album->created_at, diff --git a/app/models/Entities/Playlist.php b/app/models/Entities/Playlist.php index 73472ddf..fdc513ce 100644 --- a/app/models/Entities/Playlist.php +++ b/app/models/Entities/Playlist.php @@ -79,7 +79,7 @@ return [ 'id' => $playlist->id, - 'track_count' => $playlist->tracks()->count(), + 'track_count' => $playlist->track_count, 'title' => $playlist->title, 'slug' => $playlist->slug, 'created_at' => $playlist->created_at, diff --git a/app/models/Entities/ProfileRequest.php b/app/models/Entities/ProfileRequest.php index a2c36f15..7b2e2bfd 100644 --- a/app/models/Entities/ProfileRequest.php +++ b/app/models/Entities/ProfileRequest.php @@ -41,7 +41,19 @@ } public function after($request, $response) { - $this->_data['queries'] = DB::getQueryLog(); + $this->_data['queries'] = []; + foreach (DB::getQueryLog() as $query) { + if (starts_with($query['query'], 'select * from `cache` where')) + continue; + + if (starts_with($query['query'], 'delete from `cache` where')) + continue; + + if (starts_with($query['query'], 'insert into `cache`')) + continue; + + $this->_data['queries'][] = $query; + } } public function log($level, $message, $context) { diff --git a/public/scripts/debug/profiler.coffee b/public/scripts/debug/profiler.coffee index b972247b..470c0cca 100644 --- a/public/scripts/debug/profiler.coffee +++ b/public/scripts/debug/profiler.coffee @@ -36,11 +36,15 @@ appendRequest = (method, url, req) -> $liItem.appendTo $logItems for query in req.request.queries + queryText = query.query + for binding in query.bindings + queryText = queryText.replace '?', '"' + binding + '"' + $liItem = $("
  • ") ($("").text query.time).appendTo $liItem $("

    ") - .html(prettyPrintOne(query.query, 'lang-sql')) + .html(prettyPrintOne(queryText, 'lang-sql')) .click () -> $(this).toggleClass 'open' .appendTo($liItem)