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'];