. */ namespace Poniverse\Ponyfm\Console\Commands; use Illuminate\Console\Command; use Illuminate\Database\Eloquent\Collection; use Poniverse\Ponyfm\Models\Album; use Poniverse\Ponyfm\Models\Playlist; use Poniverse\Ponyfm\Models\Track; use Poniverse\Ponyfm\Models\User; use Symfony\Component\Console\Helper\ProgressBar; class RebuildSearchIndex extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'rebuild:search'; /** * The console command description. * * @var string */ protected $description = 'Rebuilds the Elasticsearch index.'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { $totalTracks = Track::withTrashed()->count(); $totalAlbums = Album::withTrashed()->count(); $totalPlaylists = Playlist::withTrashed()->count(); $totalUsers = User::count(); $trackProgress = $this->output->createProgressBar($totalTracks); $this->info("Processing tracks..."); Track::withTrashed()->chunk(200, function(Collection $tracks) use ($trackProgress) { foreach($tracks as $track) { /** @var Track $track */ $trackProgress->advance(); $track->updateElasticsearchEntry(); } }); $trackProgress->finish(); $this->line(''); $albumProgress = $this->output->createProgressBar($totalAlbums); $this->info("Processing albums..."); Album::withTrashed()->chunk(200, function(Collection $albums) use ($albumProgress) { foreach($albums as $album) { /** @var Album $album */ $albumProgress->advance(); $album->updateElasticsearchEntry(); } }); $albumProgress->finish(); $this->line(''); $playlistProgress = $this->output->createProgressBar($totalPlaylists); $this->info("Processing playlists..."); Playlist::withTrashed()->chunk(200, function(Collection $playlists) use ($playlistProgress) { foreach($playlists as $playlist) { /** @var Playlist $playlist */ $playlistProgress->advance(); $playlist->updateElasticsearchEntry(); } }); $playlistProgress->finish(); $this->line(''); $userProgress = $this->output->createProgressBar($totalUsers); $this->info("Processing users..."); User::chunk(200, function(Collection $users) use ($userProgress) { foreach($users as $user) { /** @var User $user */ $userProgress->advance(); $user->updateElasticsearchEntry(); } }); $userProgress->finish(); $this->line(''); $this->info('Everything has been queued for re-indexing!'); } }