From 7dfb80f13bd40e531c538fe24285a7984f607b74 Mon Sep 17 00:00:00 2001 From: Peter Deltchev Date: Fri, 6 Nov 2015 03:26:23 -0800 Subject: [PATCH] Fixes #5: Implemented a rebuild:artists command to recount all users' tracks. --- app/Console/Commands/RebuildArtists.php | 67 +++++++++++++++++++++++++ app/Console/Kernel.php | 1 + app/User.php | 5 ++ 3 files changed, 73 insertions(+) create mode 100644 app/Console/Commands/RebuildArtists.php diff --git a/app/Console/Commands/RebuildArtists.php b/app/Console/Commands/RebuildArtists.php new file mode 100644 index 00000000..3c540711 --- /dev/null +++ b/app/Console/Commands/RebuildArtists.php @@ -0,0 +1,67 @@ +. + */ + +namespace Poniverse\Ponyfm\Console\Commands; + +use Illuminate\Console\Command; +use Poniverse\Ponyfm\User; + +class RebuildArtists extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'rebuild:artists'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Recounts every user\'s tracks, ensuring that the artist directory isn\'t missing anyone.'; + + /** + * Create a new command instance. + * + * @return void + */ + public function __construct() + { + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + foreach(User::with(['tracks' => function($query) { + $query->published()->listed(); + }])->get() as $user) { + $user->track_count = $user->tracks->count(); + $user->save(); + $this->info('Updated user #'.$user->id.'!'); + } + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 884d8855..61b2ca07 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -37,6 +37,7 @@ class Kernel extends ConsoleKernel \Poniverse\Ponyfm\Console\Commands\ClassifyMLPMA::class, \Poniverse\Ponyfm\Console\Commands\PublishUnclassifiedMlpmaTracks::class, \Poniverse\Ponyfm\Console\Commands\RebuildTags::class, + \Poniverse\Ponyfm\Console\Commands\RebuildArtists::class, \Poniverse\Ponyfm\Console\Commands\FixYearZeroLogs::class, \Poniverse\Ponyfm\Console\Commands\BootstrapLocalEnvironment::class, \Poniverse\Ponyfm\Console\Commands\PoniverseApiSetup::class, diff --git a/app/User.php b/app/User.php index 12050c80..6fb45c93 100644 --- a/app/User.php +++ b/app/User.php @@ -66,6 +66,11 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon return $this->hasMany('Poniverse\Ponyfm\Comment', 'profile_id')->orderBy('created_at', 'desc'); } + public function tracks() + { + return $this->hasMany('Poniverse\Ponyfm\Track', 'user_id'); + } + public function getIsArchivedAttribute() { return (bool)$this->attributes['is_archived'];