feat(api): add playlists to global search endpoint (#555)

This commit is contained in:
paranarimasu
2023-03-14 22:36:48 -05:00
committed by GitHub
parent 4dfd46be9a
commit 315de28398
14 changed files with 70 additions and 27 deletions
@@ -2,7 +2,7 @@
declare(strict_types=1);
namespace App\Http\Api\Field\Wiki\Search;
namespace App\Http\Api\Field\Search;
use App\Http\Api\Field\Field;
use App\Http\Api\Schema\Schema;
@@ -2,7 +2,7 @@
declare(strict_types=1);
namespace App\Http\Api\Field\Wiki\Search;
namespace App\Http\Api\Field\Search;
use App\Http\Api\Field\Field;
use App\Http\Api\Schema\Schema;
@@ -0,0 +1,25 @@
<?php
declare(strict_types=1);
namespace App\Http\Api\Field\Search;
use App\Http\Api\Field\Field;
use App\Http\Api\Schema\Schema;
use App\Http\Resources\List\Collection\PlaylistCollection;
/**
* Class SearchPlaylistField.
*/
class SearchPlaylistField extends Field
{
/**
* Create a new field instance.
*
* @param Schema $schema
*/
public function __construct(Schema $schema)
{
parent::__construct($schema, PlaylistCollection::$wrap);
}
}
@@ -2,7 +2,7 @@
declare(strict_types=1);
namespace App\Http\Api\Field\Wiki\Search;
namespace App\Http\Api\Field\Search;
use App\Http\Api\Field\Field;
use App\Http\Api\Schema\Schema;
@@ -2,7 +2,7 @@
declare(strict_types=1);
namespace App\Http\Api\Field\Wiki\Search;
namespace App\Http\Api\Field\Search;
use App\Http\Api\Field\Field;
use App\Http\Api\Schema\Schema;
@@ -2,7 +2,7 @@
declare(strict_types=1);
namespace App\Http\Api\Field\Wiki\Search;
namespace App\Http\Api\Field\Search;
use App\Http\Api\Field\Field;
use App\Http\Api\Schema\Schema;
@@ -2,7 +2,7 @@
declare(strict_types=1);
namespace App\Http\Api\Field\Wiki\Search;
namespace App\Http\Api\Field\Search;
use App\Http\Api\Field\Field;
use App\Http\Api\Schema\Schema;
@@ -2,7 +2,7 @@
declare(strict_types=1);
namespace App\Http\Api\Field\Wiki\Search;
namespace App\Http\Api\Field\Search;
use App\Http\Api\Field\Field;
use App\Http\Api\Schema\Schema;
@@ -2,20 +2,27 @@
declare(strict_types=1);
namespace App\Http\Api\Schema\Wiki;
namespace App\Http\Api\Schema;
use App\Http\Api\Field\Field;
use App\Http\Api\Field\Wiki\Search\SearchAnimeField;
use App\Http\Api\Field\Wiki\Search\SearchArtistField;
use App\Http\Api\Field\Wiki\Search\SearchSeriesField;
use App\Http\Api\Field\Wiki\Search\SearchSongField;
use App\Http\Api\Field\Wiki\Search\SearchStudioField;
use App\Http\Api\Field\Wiki\Search\SearchThemeField;
use App\Http\Api\Field\Wiki\Search\SearchVideoField;
use App\Http\Api\Field\Search\SearchAnimeField;
use App\Http\Api\Field\Search\SearchArtistField;
use App\Http\Api\Field\Search\SearchPlaylistField;
use App\Http\Api\Field\Search\SearchSeriesField;
use App\Http\Api\Field\Search\SearchSongField;
use App\Http\Api\Field\Search\SearchStudioField;
use App\Http\Api\Field\Search\SearchThemeField;
use App\Http\Api\Field\Search\SearchVideoField;
use App\Http\Api\Include\AllowedInclude;
use App\Http\Api\Schema\Schema;
use App\Http\Api\Schema\List\PlaylistSchema;
use App\Http\Api\Schema\Wiki\Anime\ThemeSchema;
use App\Http\Resources\Wiki\Resource\SearchResource;
use App\Http\Api\Schema\Wiki\AnimeSchema;
use App\Http\Api\Schema\Wiki\ArtistSchema;
use App\Http\Api\Schema\Wiki\SeriesSchema;
use App\Http\Api\Schema\Wiki\SongSchema;
use App\Http\Api\Schema\Wiki\StudioSchema;
use App\Http\Api\Schema\Wiki\VideoSchema;
use App\Http\Resources\SearchResource;
/**
* Class SearchSchema.
@@ -43,6 +50,7 @@ class SearchSchema extends Schema
new AllowedInclude(new AnimeSchema(), ''),
new AllowedInclude(new ThemeSchema(), ''),
new AllowedInclude(new ArtistSchema(), ''),
new AllowedInclude(new PlaylistSchema(), ''),
new AllowedInclude(new SeriesSchema(), ''),
new AllowedInclude(new SongSchema(), ''),
new AllowedInclude(new StudioSchema(), ''),
@@ -63,6 +71,7 @@ class SearchSchema extends Schema
new SearchAnimeField($this),
new SearchThemeField($this),
new SearchArtistField($this),
new SearchPlaylistField($this),
new SearchSeriesField($this),
new SearchSongField($this),
new SearchStudioField($this),
@@ -2,15 +2,15 @@
declare(strict_types=1);
namespace App\Http\Controllers\Api\Wiki;
namespace App\Http\Controllers\Api;
use App\Contracts\Http\Api\InteractsWithSchema;
use App\Http\Api\Query\Query;
use App\Http\Api\Schema\Schema;
use App\Http\Api\Schema\Wiki\SearchSchema;
use App\Http\Api\Schema\SearchSchema;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\Wiki\SearchRequest;
use App\Http\Resources\Wiki\Resource\SearchResource;
use App\Http\Requests\Api\SearchRequest;
use App\Http\Resources\SearchResource;
use Illuminate\Http\JsonResponse;
/**
@@ -2,14 +2,13 @@
declare(strict_types=1);
namespace App\Http\Requests\Api\Wiki;
namespace App\Http\Requests\Api;
use App\Http\Api\Parser\FieldParser;
use App\Http\Api\Parser\FilterParser;
use App\Http\Api\Parser\IncludeParser;
use App\Http\Api\Parser\SearchParser;
use App\Http\Api\Parser\SortParser;
use App\Http\Requests\Api\ReadRequest;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
use Illuminate\Validation\Validator;
@@ -2,11 +2,12 @@
declare(strict_types=1);
namespace App\Http\Resources\Wiki\Resource;
namespace App\Http\Resources;
use App\Actions\Http\Api\IndexAction;
use App\Enums\Http\Api\Paging\PaginationStrategy;
use App\Http\Api\Query\Query;
use App\Http\Api\Schema\List\PlaylistSchema;
use App\Http\Api\Schema\Wiki\Anime\ThemeSchema;
use App\Http\Api\Schema\Wiki\AnimeSchema;
use App\Http\Api\Schema\Wiki\ArtistSchema;
@@ -14,6 +15,7 @@ use App\Http\Api\Schema\Wiki\SeriesSchema;
use App\Http\Api\Schema\Wiki\SongSchema;
use App\Http\Api\Schema\Wiki\StudioSchema;
use App\Http\Api\Schema\Wiki\VideoSchema;
use App\Http\Resources\List\Collection\PlaylistCollection;
use App\Http\Resources\Wiki\Anime\Collection\ThemeCollection;
use App\Http\Resources\Wiki\Collection\AnimeCollection;
use App\Http\Resources\Wiki\Collection\ArtistCollection;
@@ -83,6 +85,11 @@ class SearchResource extends JsonResource
$result[ArtistCollection::$wrap] = new ArtistCollection($artists, $this->query);
}
if ($criteria->isAllowedField(PlaylistCollection::$wrap)) {
$series = $action->search($this->query, new PlaylistSchema(), PaginationStrategy::LIMIT());
$result[PlaylistCollection::$wrap] = new PlaylistCollection($series, $this->query);
}
if ($criteria->isAllowedField(SeriesCollection::$wrap)) {
$series = $action->search($this->query, new SeriesSchema(), PaginationStrategy::LIMIT());
$result[SeriesCollection::$wrap] = new SeriesCollection($series, $this->query);
+1 -1
View File
@@ -28,6 +28,7 @@ use App\Http\Controllers\Api\Pivot\Wiki\ArtistResourceController;
use App\Http\Controllers\Api\Pivot\Wiki\ArtistSongController;
use App\Http\Controllers\Api\Pivot\Wiki\StudioImageController;
use App\Http\Controllers\Api\Pivot\Wiki\StudioResourceController;
use App\Http\Controllers\Api\SearchController;
use App\Http\Controllers\Api\Wiki\Anime\SynonymController;
use App\Http\Controllers\Api\Wiki\Anime\Theme\EntryController;
use App\Http\Controllers\Api\Wiki\Anime\ThemeController;
@@ -37,7 +38,6 @@ use App\Http\Controllers\Api\Wiki\ArtistController;
use App\Http\Controllers\Api\Wiki\AudioController;
use App\Http\Controllers\Api\Wiki\ExternalResourceController;
use App\Http\Controllers\Api\Wiki\ImageController;
use App\Http\Controllers\Api\Wiki\SearchController;
use App\Http\Controllers\Api\Wiki\SeriesController;
use App\Http\Controllers\Api\Wiki\SongController;
use App\Http\Controllers\Api\Wiki\StudioController;
@@ -2,10 +2,12 @@
declare(strict_types=1);
namespace Tests\Feature\Http\Api\Wiki;
namespace Http\Api;
use App\Http\Api\Parser\FieldParser;
use App\Http\Api\Parser\SearchParser;
use App\Http\Resources\List\Collection\PlaylistCollection;
use App\Http\Resources\SearchResource;
use App\Http\Resources\Wiki\Anime\Collection\ThemeCollection;
use App\Http\Resources\Wiki\Collection\AnimeCollection;
use App\Http\Resources\Wiki\Collection\ArtistCollection;
@@ -13,7 +15,6 @@ use App\Http\Resources\Wiki\Collection\SeriesCollection;
use App\Http\Resources\Wiki\Collection\SongCollection;
use App\Http\Resources\Wiki\Collection\StudioCollection;
use App\Http\Resources\Wiki\Collection\VideoCollection;
use App\Http\Resources\Wiki\Resource\SearchResource;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Config;
@@ -63,6 +64,7 @@ class SearchTest extends TestCase
AnimeCollection::$wrap => [],
ThemeCollection::$wrap => [],
ArtistCollection::$wrap => [],
PlaylistCollection::$wrap => [],
SeriesCollection::$wrap => [],
SongCollection::$wrap => [],
StudioCollection::$wrap => [],
@@ -87,6 +89,7 @@ class SearchTest extends TestCase
AnimeCollection::$wrap,
ThemeCollection::$wrap,
ArtistCollection::$wrap,
PlaylistCollection::$wrap,
SeriesCollection::$wrap,
SongCollection::$wrap,
StudioCollection::$wrap,