environment() !== 'local') { $this->error('This command can only be run in local environment'); return; } if ($this->confirm('This command removes all releases, nzb files, samples, previews , nfos, truncates all article tables and resets all groups. Are you sure you want reset the DB?')) { $timestart = now(); DB::statement('SET FOREIGN_KEY_CHECKS = 0;'); UsenetGroup::query()->update([ 'first_record' => 0, 'first_record_postdate' => null, 'last_record' => 0, 'last_record_postdate' => null, 'last_updated' => null, ]); $this->info('Reseting all groups completed.'); $arr = [ 'binaries', 'collections', 'parts', 'missed_parts', 'videos', 'tv_episodes', 'tv_info', 'release_nfos', 'release_comments', 'users_releases', 'user_movies', 'user_series', 'movieinfo', 'musicinfo', 'release_files', 'audio_data', 'release_subtitles', 'video_data', 'media_infos', 'releases', 'anidb_titles', 'anidb_info', 'releases_groups', ]; foreach ($arr as &$value) { DB::statement("TRUNCATE TABLE $value"); $this->info('Truncating '.$value.' completed.'); } unset($value); if (config('search.default') === 'elasticsearch') { /** @var ElasticsearchClient $client */ $client = app('elasticsearch'); if (ElasticsearchResponseHelper::boolResponse($client, fn (ElasticsearchClient $elasticClient) => $elasticClient->indices()->exists(['index' => 'releases']))) { Elasticsearch::indices()->delete(['index' => 'releases']); } $releases_index = [ 'index' => 'releases', 'body' => [ 'settings' => [ 'number_of_shards' => 2, 'number_of_replicas' => 0, ], 'mappings' => [ 'properties' => [ 'id' => [ 'type' => 'long', 'index' => false, ], 'name' => ['type' => 'text'], 'searchname' => [ 'type' => 'text', 'fields' => [ 'sort' => [ 'type' => 'keyword', ], ], ], 'plainsearchname' => [ 'type' => 'text', 'fields' => [ 'sort' => [ 'type' => 'keyword', ], ], ], 'fromname' => ['type' => 'text'], 'filename' => ['type' => 'text'], 'add_date' => ['type' => 'date', 'format' => 'yyyy-MM-dd HH:mm:ss'], 'post_date' => ['type' => 'date', 'format' => 'yyyy-MM-dd HH:mm:ss'], ], ], ], ]; Elasticsearch::indices()->create($releases_index); if (ElasticsearchResponseHelper::boolResponse($client, fn (ElasticsearchClient $elasticClient) => $elasticClient->indices()->exists(['index' => 'predb']))) { Elasticsearch::indices()->delete(['index' => 'predb']); } $predb_index = [ 'index' => 'predb', 'body' => [ 'settings' => [ 'number_of_shards' => 2, 'number_of_replicas' => 0, ], 'mappings' => [ 'properties' => [ 'id' => [ 'type' => 'long', 'index' => false, ], 'title' => [ 'type' => 'text', 'fields' => [ 'sort' => [ 'type' => 'keyword', ], ], ], 'filename' => ['type' => 'text'], 'source' => ['type' => 'text'], ], ], ], ]; Elasticsearch::indices()->create($predb_index); // Delete and recreate movies index if (ElasticsearchResponseHelper::boolResponse($client, fn (ElasticsearchClient $elasticClient) => $elasticClient->indices()->exists(['index' => 'movies']))) { Elasticsearch::indices()->delete(['index' => 'movies']); } $movies_index = [ 'index' => 'movies', 'body' => [ 'settings' => [ 'number_of_shards' => 2, 'number_of_replicas' => 0, ], 'mappings' => [ 'properties' => [ 'id' => [ 'type' => 'long', 'index' => false, ], 'imdbid' => ['type' => 'keyword'], 'tmdbid' => ['type' => 'integer'], 'traktid' => ['type' => 'integer'], 'title' => [ 'type' => 'text', 'fields' => [ 'sort' => [ 'type' => 'keyword', ], ], ], 'year' => ['type' => 'text'], 'genre' => ['type' => 'text'], 'actors' => ['type' => 'text'], 'director' => ['type' => 'text'], 'rating' => ['type' => 'text'], 'plot' => ['type' => 'text'], ], ], ], ]; Elasticsearch::indices()->create($movies_index); // Delete and recreate tvshows index if (ElasticsearchResponseHelper::boolResponse($client, fn (ElasticsearchClient $elasticClient) => $elasticClient->indices()->exists(['index' => 'tvshows']))) { Elasticsearch::indices()->delete(['index' => 'tvshows']); } $tvshows_index = [ 'index' => 'tvshows', 'body' => [ 'settings' => [ 'number_of_shards' => 2, 'number_of_replicas' => 0, ], 'mappings' => [ 'properties' => [ 'id' => [ 'type' => 'long', 'index' => false, ], 'title' => [ 'type' => 'text', 'fields' => [ 'sort' => [ 'type' => 'keyword', ], ], ], 'tvdb' => ['type' => 'integer'], 'trakt' => ['type' => 'integer'], 'tvmaze' => ['type' => 'integer'], 'tvrage' => ['type' => 'integer'], 'imdb' => ['type' => 'keyword'], 'tmdb' => ['type' => 'integer'], 'started' => ['type' => 'text'], 'type' => ['type' => 'integer'], ], ], ], ]; Elasticsearch::indices()->create($tvshows_index); $this->info('All done! ElasticSearch indexes are deleted and recreated.'); } else { Search::truncateIndex([ 'releases_rt', 'predb_rt', 'movies_rt', 'tvshows_rt', 'music_rt', 'books_rt', 'games_rt', 'console_rt', 'steam_rt', 'anime_rt', ]); } $this->info('Deleting nzbfiles subfolders.'); $files = File::allFiles(config('nntmux_settings.path_to_nzbs')); File::delete($files); $this->info('Deleting all images, previews and samples that still remain.'); $files = File::allFiles(storage_path('covers/')); foreach ($files as $file) { $path = $file->getPathname(); if (basename($path) !== '.gitignore' && basename($path) !== 'no-cover.jpg' && basename($path) !== 'no-backdrop.jpg') { File::delete($path); } } $this->call('cache:clear'); $this->info('Deleted all releases, images, previews and samples. This script finished '.now()->diffForHumans($timestart).' start'); DB::statement('SET FOREIGN_KEY_CHECKS = 1;'); } else { $this->info('Script execution stopped'); } } }