clean: remove old anime synonyms & media format (#1206)

This commit is contained in:
Kyrch
2026-05-12 04:13:07 -03:00
committed by GitHub
parent 7182fa39bd
commit af2bc6c2dc
91 changed files with 154 additions and 1048 deletions
@@ -8,9 +8,9 @@ use App\Actions\Models\Wiki\ExternalApiAction;
use App\Contracts\Actions\Models\Wiki\BackfillImages; use App\Contracts\Actions\Models\Wiki\BackfillImages;
use App\Contracts\Actions\Models\Wiki\BackfillResources; use App\Contracts\Actions\Models\Wiki\BackfillResources;
use App\Contracts\Actions\Models\Wiki\BackfillSynonyms; use App\Contracts\Actions\Models\Wiki\BackfillSynonyms;
use App\Enums\Models\Wiki\AnimeSynonymType;
use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ImageFacet;
use App\Enums\Models\Wiki\ResourceSite; use App\Enums\Models\Wiki\ResourceSite;
use App\Enums\Models\Wiki\SynonymType;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\ExternalResource; use App\Models\Wiki\ExternalResource;
use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany;
@@ -145,9 +145,9 @@ class AnilistAnimeExternalApiAction extends ExternalApiAction implements Backfil
public function getSynonymsMapping(): array public function getSynonymsMapping(): array
{ {
return [ return [
AnimeSynonymType::ENGLISH->value => 'data.Media.title.english', SynonymType::ENGLISH->value => 'data.Media.title.english',
AnimeSynonymType::NATIVE->value => 'data.Media.title.native', SynonymType::NATIVE->value => 'data.Media.title.native',
AnimeSynonymType::OTHER->value => 'data.Media.title.romaji', SynonymType::OTHER->value => 'data.Media.title.romaji',
]; ];
} }
} }
@@ -197,10 +197,10 @@ class BackfillAudioAction extends BackfillAction
$orderByNameQuery = $sortRelation->getRelationExistenceQuery($sortRelation->getQuery(), $builder, [Anime::ATTRIBUTE_NAME]); $orderByNameQuery = $sortRelation->getRelationExistenceQuery($sortRelation->getQuery(), $builder, [Anime::ATTRIBUTE_NAME]);
$orderBySeasonQuery = $sortRelation->getRelationExistenceQuery($sortRelation->getQuery(), $builder, [Anime::ATTRIBUTE_SEASON]); $orderBySeasonQuery = $sortRelation->getRelationExistenceQuery($sortRelation->getQuery(), $builder, [Anime::ATTRIBUTE_SEASON]);
$orderByYearQuery = $sortRelation->getRelationExistenceQuery($sortRelation->getQuery(), $builder, [Anime::ATTRIBUTE_YEAR]); $orderByYearQuery = $sortRelation->getRelationExistenceQuery($sortRelation->getQuery(), $builder, [Anime::ATTRIBUTE_YEAR]);
$orderByMediaFormatQuery = $sortRelation->getRelationExistenceQuery($sortRelation->getQuery(), $builder, [Anime::ATTRIBUTE_FORMAT]); $orderByformatQuery = $sortRelation->getRelationExistenceQuery($sortRelation->getQuery(), $builder, [Anime::ATTRIBUTE_FORMAT]);
return $builder->whereHas(AnimeTheme::RELATION_VIDEOS, fn (Builder $relationBuilder) => $relationBuilder->whereKey($this->getModel())) return $builder->whereHas(AnimeTheme::RELATION_VIDEOS, fn (Builder $relationBuilder) => $relationBuilder->whereKey($this->getModel()))
->orderBy($orderByMediaFormatQuery->toBase()) ->orderBy($orderByformatQuery->toBase())
->orderBy($orderByYearQuery->toBase()) ->orderBy($orderByYearQuery->toBase())
->orderBy($orderBySeasonQuery->toBase()) ->orderBy($orderBySeasonQuery->toBase())
->orderBy($orderByNameQuery->toBase()) ->orderBy($orderByNameQuery->toBase())
@@ -6,7 +6,6 @@ namespace App\Actions\Storage\Admin\Dump;
use App\Concerns\Repositories\Admin\ReconcilesDumpRepositories; use App\Concerns\Repositories\Admin\ReconcilesDumpRepositories;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist; use App\Models\Wiki\Artist;
@@ -46,19 +45,16 @@ class DumpContentAction extends DumpAction
Anime::TABLE, Anime::TABLE,
AnimeSeries::TABLE, AnimeSeries::TABLE,
AnimeStudio::TABLE, AnimeStudio::TABLE,
AnimeSynonym::TABLE,
AnimeTheme::TABLE, AnimeTheme::TABLE,
AnimeThemeEntry::TABLE, AnimeThemeEntry::TABLE,
AnimeThemeEntryVideo::TABLE, AnimeThemeEntryVideo::TABLE,
Artist::TABLE, Artist::TABLE,
ArtistMember::TABLE, ArtistMember::TABLE,
'artist_song',
Audio::TABLE, Audio::TABLE,
ExternalResource::TABLE, ExternalResource::TABLE,
Group::TABLE, Group::TABLE,
Image::TABLE, Image::TABLE,
Imageable::TABLE, Imageable::TABLE,
'memberships',
Performance::TABLE, Performance::TABLE,
Resourceable::TABLE, Resourceable::TABLE,
Series::TABLE, Series::TABLE,
@@ -7,7 +7,6 @@ namespace App\Console\Commands\Models;
use App\Console\Commands\BaseCommand; use App\Console\Commands\BaseCommand;
use App\Models\List\Playlist; use App\Models\List\Playlist;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist; use App\Models\Wiki\Artist;
@@ -48,7 +47,6 @@ class ImportModelsCommand extends BaseCommand
if ($this->option('flush')) { if ($this->option('flush')) {
$this->scoutFlush(Playlist::class); $this->scoutFlush(Playlist::class);
$this->scoutFlush(Anime::class); $this->scoutFlush(Anime::class);
$this->scoutFlush(AnimeSynonym::class);
$this->scoutFlush(AnimeTheme::class); $this->scoutFlush(AnimeTheme::class);
$this->scoutFlush(AnimeThemeEntry::class); $this->scoutFlush(AnimeThemeEntry::class);
$this->scoutFlush(Artist::class); $this->scoutFlush(Artist::class);
@@ -61,7 +59,6 @@ class ImportModelsCommand extends BaseCommand
$this->scoutImport(Playlist::class); $this->scoutImport(Playlist::class);
$this->scoutImport(Anime::class); $this->scoutImport(Anime::class);
$this->scoutImport(AnimeSynonym::class);
$this->scoutImport(AnimeTheme::class); $this->scoutImport(AnimeTheme::class);
$this->scoutImport(AnimeThemeEntry::class); $this->scoutImport(AnimeThemeEntry::class);
$this->scoutImport(Artist::class); $this->scoutImport(Artist::class);
@@ -1,12 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Contracts\Events;
use Illuminate\Contracts\Events\ShouldHandleEventsAfterCommit;
interface UpdateAnimeSynonymsEvent extends ShouldHandleEventsAfterCommit
{
public function updateAnimeSynonyms(): void;
}
@@ -6,7 +6,6 @@ namespace App\Enums\GraphQL\Filter\Wiki;
use App\Contracts\GraphQL\EnumFilterableColumns; use App\Contracts\GraphQL\EnumFilterableColumns;
use App\Enums\Models\Wiki\AnimeFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeMediaFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\GraphQL\Filter\EnumFilter; use App\GraphQL\Filter\EnumFilter;
use App\GraphQL\Filter\Filter; use App\GraphQL\Filter\Filter;
@@ -14,14 +13,11 @@ use App\GraphQL\Filter\IntFilter;
use App\GraphQL\Filter\StringFilter; use App\GraphQL\Filter\StringFilter;
use App\GraphQL\Filter\TimestampFilter; use App\GraphQL\Filter\TimestampFilter;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use GraphQL\Type\Definition\Deprecated;
enum AnimeFilterableColumns implements EnumFilterableColumns enum AnimeFilterableColumns implements EnumFilterableColumns
{ {
case ID; case ID;
case NAME; case NAME;
#[Deprecated('Use FORMAT instead')]
case MEDIA_FORMAT;
case FORMAT; case FORMAT;
case SEASON; case SEASON;
case SYNOPSIS; case SYNOPSIS;
@@ -34,7 +30,6 @@ enum AnimeFilterableColumns implements EnumFilterableColumns
return match ($this) { return match ($this) {
self::ID => new IntFilter($this->name, Anime::ATTRIBUTE_ID), self::ID => new IntFilter($this->name, Anime::ATTRIBUTE_ID),
self::NAME => new StringFilter($this->name, Anime::ATTRIBUTE_NAME), self::NAME => new StringFilter($this->name, Anime::ATTRIBUTE_NAME),
self::MEDIA_FORMAT => new EnumFilter($this->name, AnimeMediaFormat::class, Anime::ATTRIBUTE_MEDIA_FORMAT),
self::FORMAT => new EnumFilter($this->name, AnimeFormat::class, Anime::ATTRIBUTE_FORMAT), self::FORMAT => new EnumFilter($this->name, AnimeFormat::class, Anime::ATTRIBUTE_FORMAT),
self::SEASON => new EnumFilter($this->name, AnimeSeason::class, Anime::ATTRIBUTE_SEASON), self::SEASON => new EnumFilter($this->name, AnimeSeason::class, Anime::ATTRIBUTE_SEASON),
self::YEAR => new IntFilter($this->name, Anime::ATTRIBUTE_YEAR), self::YEAR => new IntFilter($this->name, Anime::ATTRIBUTE_YEAR),
@@ -1,22 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Enums\Models\Wiki;
use App\Concerns\Enums\LocalizesName;
use Filament\Support\Contracts\HasLabel;
use GraphQL\Type\Definition\Deprecated;
#[Deprecated('Use \'AnimeFormat\' instead')]
enum AnimeMediaFormat: int implements HasLabel
{
use LocalizesName;
case TV = 0;
case TV_SHORT = 1;
case OVA = 2;
case MOVIE = 3;
case SPECIAL = 4;
case ONA = 5;
}
@@ -1,23 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Enums\Models\Wiki;
use App\Concerns\Enums\LocalizesName;
use Filament\Support\Contracts\HasLabel;
use GraphQL\Type\Definition\Deprecated as GraphQLDeprecated;
/**
* @deprecated Use SynonymType instead.
*/
#[GraphQLDeprecated('Use SynonymType instead.')]
enum AnimeSynonymType: int implements HasLabel
{
use LocalizesName;
case OTHER = 0;
case NATIVE = 1;
case ENGLISH = 2;
case SHORT = 3;
}
+1 -14
View File
@@ -4,11 +4,9 @@ declare(strict_types=1);
namespace App\Events\Wiki\Synonym; namespace App\Events\Wiki\Synonym;
use App\Contracts\Events\UpdateAnimeSynonymsEvent;
use App\Contracts\Events\UpdateRelatedIndicesEvent; use App\Contracts\Events\UpdateRelatedIndicesEvent;
use App\Events\Base\Wiki\WikiCreatedEvent; use App\Events\Base\Wiki\WikiCreatedEvent;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Series; use App\Models\Wiki\Series;
@@ -19,7 +17,7 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
/** /**
* @extends WikiCreatedEvent<Synonym> * @extends WikiCreatedEvent<Synonym>
*/ */
class SynonymCreated extends WikiCreatedEvent implements UpdateAnimeSynonymsEvent, UpdateRelatedIndicesEvent class SynonymCreated extends WikiCreatedEvent implements UpdateRelatedIndicesEvent
{ {
protected function getDiscordMessageDescription(): string protected function getDiscordMessageDescription(): string
{ {
@@ -49,15 +47,4 @@ class SynonymCreated extends WikiCreatedEvent implements UpdateAnimeSynonymsEven
}); });
} }
} }
public function updateAnimeSynonyms(): void
{
if ($this->getModel()->synonymable instanceof Anime) {
AnimeSynonym::query()->create([
AnimeSynonym::ATTRIBUTE_ANIME => $this->getModel()->synonymable_id,
AnimeSynonym::ATTRIBUTE_TEXT => $this->getModel()->text,
AnimeSynonym::ATTRIBUTE_TYPE => $this->getModel()->type->value,
]);
}
}
} }
+1 -13
View File
@@ -4,12 +4,10 @@ declare(strict_types=1);
namespace App\Events\Wiki\Synonym; namespace App\Events\Wiki\Synonym;
use App\Contracts\Events\UpdateAnimeSynonymsEvent;
use App\Contracts\Events\UpdateRelatedIndicesEvent; use App\Contracts\Events\UpdateRelatedIndicesEvent;
use App\Events\Base\Wiki\WikiDeletedEvent; use App\Events\Base\Wiki\WikiDeletedEvent;
use App\Filament\Resources\Wiki\SynonymResource as SynonymFilament; use App\Filament\Resources\Wiki\SynonymResource as SynonymFilament;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Series; use App\Models\Wiki\Series;
@@ -20,7 +18,7 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
/** /**
* @extends WikiDeletedEvent<Synonym> * @extends WikiDeletedEvent<Synonym>
*/ */
class SynonymDeleted extends WikiDeletedEvent implements UpdateAnimeSynonymsEvent, UpdateRelatedIndicesEvent class SynonymDeleted extends WikiDeletedEvent implements UpdateRelatedIndicesEvent
{ {
protected function getDiscordMessageDescription(): string protected function getDiscordMessageDescription(): string
{ {
@@ -60,14 +58,4 @@ class SynonymDeleted extends WikiDeletedEvent implements UpdateAnimeSynonymsEven
}); });
} }
} }
public function updateAnimeSynonyms(): void
{
if ($this->getModel()->synonymable instanceof Anime) {
AnimeSynonym::query()
->where(AnimeSynonym::ATTRIBUTE_ANIME, $this->getModel()->synonymable_id)
->where(AnimeSynonym::ATTRIBUTE_TEXT, $this->getModel()->text)
->{$this->getModel()->isForceDeleting() ? 'forceDelete' : 'delete'}();
}
}
} }
+1 -15
View File
@@ -4,11 +4,9 @@ declare(strict_types=1);
namespace App\Events\Wiki\Synonym; namespace App\Events\Wiki\Synonym;
use App\Contracts\Events\UpdateAnimeSynonymsEvent;
use App\Contracts\Events\UpdateRelatedIndicesEvent; use App\Contracts\Events\UpdateRelatedIndicesEvent;
use App\Events\Base\Wiki\WikiRestoredEvent; use App\Events\Base\Wiki\WikiRestoredEvent;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Series; use App\Models\Wiki\Series;
@@ -19,7 +17,7 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
/** /**
* @extends WikiRestoredEvent<Synonym> * @extends WikiRestoredEvent<Synonym>
*/ */
class SynonymRestored extends WikiRestoredEvent implements UpdateAnimeSynonymsEvent, UpdateRelatedIndicesEvent class SynonymRestored extends WikiRestoredEvent implements UpdateRelatedIndicesEvent
{ {
protected function getDiscordMessageDescription(): string protected function getDiscordMessageDescription(): string
{ {
@@ -49,16 +47,4 @@ class SynonymRestored extends WikiRestoredEvent implements UpdateAnimeSynonymsEv
}); });
} }
} }
public function updateAnimeSynonyms(): void
{
if ($this->getModel()->synonymable instanceof Anime) {
AnimeSynonym::query()
->withTrashed()
->where(AnimeSynonym::ATTRIBUTE_ANIME, $this->getModel()->synonymable_id)
->where(AnimeSynonym::ATTRIBUTE_TEXT, $this->getModel()->text)
->first()
?->restore();
}
}
} }
+1 -16
View File
@@ -4,11 +4,9 @@ declare(strict_types=1);
namespace App\Events\Wiki\Synonym; namespace App\Events\Wiki\Synonym;
use App\Contracts\Events\UpdateAnimeSynonymsEvent;
use App\Contracts\Events\UpdateRelatedIndicesEvent; use App\Contracts\Events\UpdateRelatedIndicesEvent;
use App\Events\Base\Wiki\WikiUpdatedEvent; use App\Events\Base\Wiki\WikiUpdatedEvent;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Series; use App\Models\Wiki\Series;
@@ -19,7 +17,7 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
/** /**
* @extends WikiUpdatedEvent<Synonym> * @extends WikiUpdatedEvent<Synonym>
*/ */
class SynonymUpdated extends WikiUpdatedEvent implements UpdateAnimeSynonymsEvent, UpdateRelatedIndicesEvent class SynonymUpdated extends WikiUpdatedEvent implements UpdateRelatedIndicesEvent
{ {
public function __construct(Synonym $synonym) public function __construct(Synonym $synonym)
{ {
@@ -55,17 +53,4 @@ class SynonymUpdated extends WikiUpdatedEvent implements UpdateAnimeSynonymsEven
}); });
} }
} }
public function updateAnimeSynonyms(): void
{
if ($this->getModel()->synonymable instanceof Anime) {
AnimeSynonym::query()
->where(AnimeSynonym::ATTRIBUTE_ANIME, $this->getModel()->getOriginal(Synonym::ATTRIBUTE_SYNONYMABLE_ID))
->where(AnimeSynonym::ATTRIBUTE_TEXT, $this->getModel()->getOriginal(Synonym::ATTRIBUTE_TEXT))
->update([
AnimeSynonym::ATTRIBUTE_TEXT => $this->getModel()->text,
AnimeSynonym::ATTRIBUTE_TYPE => $this->getModel()->type->value,
]);
}
}
} }
@@ -4,7 +4,7 @@ declare(strict_types=1);
namespace App\Filament\Submission\Resources\Schema; namespace App\Filament\Submission\Resources\Schema;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Filament\Components\Fields\Select; use App\Filament\Components\Fields\Select;
use App\Filament\Components\Fields\TextInput; use App\Filament\Components\Fields\TextInput;
@@ -59,7 +59,7 @@ class AnimeForm
Select::make(SubmissionAnime::ATTRIBUTE_FORMAT) Select::make(SubmissionAnime::ATTRIBUTE_FORMAT)
->label(__('filament.fields.anime.format.name')) ->label(__('filament.fields.anime.format.name'))
->helperText(__('filament.fields.anime.format.help')) ->helperText(__('filament.fields.anime.format.help'))
->options(AnimeMediaFormat::class) ->options(AnimeFormat::class)
->required(), ->required(),
MarkdownEditor::make(SubmissionAnime::ATTRIBUTE_SYNOPSIS) MarkdownEditor::make(SubmissionAnime::ATTRIBUTE_SYNOPSIS)
@@ -17,7 +17,7 @@ class AnimeMediaFormatField extends EnumField implements CreatableField, Updatab
{ {
public function __construct(Schema $schema) public function __construct(Schema $schema)
{ {
parent::__construct($schema, Anime::ATTRIBUTE_MEDIA_FORMAT, AnimeFormat::class, Anime::ATTRIBUTE_FORMAT); parent::__construct($schema, 'media_format', AnimeFormat::class, Anime::ATTRIBUTE_FORMAT);
} }
public function getCreationRules(Request $request): array public function getCreationRules(Request $request): array
@@ -1,38 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Http\Api\Field\Wiki\Anime\Synonym;
use App\Contracts\Http\Api\Field\CreatableField;
use App\Contracts\Http\Api\Field\SelectableField;
use App\Http\Api\Field\Field;
use App\Http\Api\Query\Query;
use App\Http\Api\Schema\Schema;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class AnimeSynonymAnimeIdField extends Field implements CreatableField, SelectableField
{
public function __construct(Schema $schema)
{
parent::__construct($schema, AnimeSynonym::ATTRIBUTE_ANIME);
}
public function getCreationRules(Request $request): array
{
return [
'required',
'integer',
Rule::exists(Anime::class, Anime::ATTRIBUTE_ID),
];
}
public function shouldSelect(Query $query, Schema $schema): bool
{
// Needed to match anime relation.
return true;
}
}
@@ -1,39 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Http\Api\Field\Wiki\Anime\Synonym;
use App\Contracts\Http\Api\Field\CreatableField;
use App\Contracts\Http\Api\Field\UpdatableField;
use App\Http\Api\Field\StringField;
use App\Http\Api\Schema\Schema;
use App\Models\Wiki\Anime\AnimeSynonym;
use Illuminate\Http\Request;
class AnimeSynonymTextField extends StringField implements CreatableField, UpdatableField
{
public function __construct(Schema $schema)
{
parent::__construct($schema, AnimeSynonym::ATTRIBUTE_TEXT);
}
public function getCreationRules(Request $request): array
{
return [
'required',
'string',
'max:192',
];
}
public function getUpdateRules(Request $request): array
{
return [
'sometimes',
'required',
'string',
'max:192',
];
}
}
@@ -1,39 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Http\Api\Field\Wiki\Anime\Synonym;
use App\Contracts\Http\Api\Field\CreatableField;
use App\Contracts\Http\Api\Field\UpdatableField;
use App\Enums\Models\Wiki\AnimeSynonymType;
use App\Http\Api\Field\EnumField;
use App\Http\Api\Schema\Schema;
use App\Models\Wiki\Anime\AnimeSynonym;
use Illuminate\Http\Request;
use Illuminate\Validation\Rules\Enum;
class AnimeSynonymTypeField extends EnumField implements CreatableField, UpdatableField
{
public function __construct(Schema $schema)
{
parent::__construct($schema, AnimeSynonym::ATTRIBUTE_TYPE, AnimeSynonymType::class);
}
public function getCreationRules(Request $request): array
{
return [
'required',
new Enum(AnimeSynonymType::class),
];
}
public function getUpdateRules(Request $request): array
{
return [
'sometimes',
'required',
new Enum(AnimeSynonymType::class),
];
}
}
@@ -1,51 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Http\Api\Schema\Wiki\Anime;
use App\Contracts\Http\Api\Schema\SearchableSchema;
use App\Http\Api\Field\Base\IdField;
use App\Http\Api\Field\Field;
use App\Http\Api\Field\Wiki\Anime\Synonym\AnimeSynonymAnimeIdField;
use App\Http\Api\Field\Wiki\Anime\Synonym\AnimeSynonymTextField;
use App\Http\Api\Field\Wiki\Anime\Synonym\AnimeSynonymTypeField;
use App\Http\Api\Include\AllowedInclude;
use App\Http\Api\Schema\EloquentSchema;
use App\Http\Api\Schema\Wiki\AnimeSchema;
use App\Http\Resources\Wiki\Anime\Resource\AnimeSynonymJsonResource;
use App\Models\Wiki\Anime\AnimeSynonym;
class AnimeSynonymSchema extends EloquentSchema implements SearchableSchema
{
public function type(): string
{
return AnimeSynonymJsonResource::$wrap;
}
/**
* @return AllowedInclude[]
*/
public function allowedIncludes(): array
{
return $this->withIntermediatePaths([
new AllowedInclude(new AnimeSchema(), AnimeSynonym::RELATION_ANIME),
]);
}
/**
* @return Field[]
*/
public function fields(): array
{
return array_merge(
parent::fields(),
[
new IdField($this, AnimeSynonym::ATTRIBUTE_ID),
new AnimeSynonymTextField($this),
new AnimeSynonymTypeField($this),
new AnimeSynonymAnimeIdField($this),
],
);
}
}
+1 -2
View File
@@ -18,7 +18,6 @@ use App\Http\Api\Include\AllowedInclude;
use App\Http\Api\Schema\Auth\UserSchema; use App\Http\Api\Schema\Auth\UserSchema;
use App\Http\Api\Schema\EloquentSchema; use App\Http\Api\Schema\EloquentSchema;
use App\Http\Api\Schema\Pivot\Morph\ResourceableSchema; use App\Http\Api\Schema\Pivot\Morph\ResourceableSchema;
use App\Http\Api\Schema\Wiki\Anime\AnimeSynonymSchema;
use App\Http\Api\Schema\Wiki\Anime\Theme\EntrySchema; use App\Http\Api\Schema\Wiki\Anime\Theme\EntrySchema;
use App\Http\Api\Schema\Wiki\Anime\ThemeSchema; use App\Http\Api\Schema\Wiki\Anime\ThemeSchema;
use App\Http\Api\Schema\Wiki\Video\ScriptSchema; use App\Http\Api\Schema\Wiki\Video\ScriptSchema;
@@ -60,7 +59,7 @@ class AnimeSchema extends EloquentSchema implements InteractsWithPivots, Searcha
new AllowedInclude(new SeriesSchema(), Anime::RELATION_SERIES), new AllowedInclude(new SeriesSchema(), Anime::RELATION_SERIES),
new AllowedInclude(new SongSchema(), Anime::RELATION_SONG), new AllowedInclude(new SongSchema(), Anime::RELATION_SONG),
new AllowedInclude(new StudioSchema(), Anime::RELATION_STUDIOS), new AllowedInclude(new StudioSchema(), Anime::RELATION_STUDIOS),
new AllowedInclude(new AnimeSynonymSchema(), Anime::RELATION_ANIMESYNONYMS), new AllowedInclude(new SynonymSchema(), Anime::RELATION_ANIMESYNONYMS),
new AllowedInclude(new SynonymSchema(), Anime::RELATION_SYNONYMS), new AllowedInclude(new SynonymSchema(), Anime::RELATION_SYNONYMS),
new AllowedInclude(new ThemeSchema(), Anime::RELATION_THEMES), new AllowedInclude(new ThemeSchema(), Anime::RELATION_THEMES),
new AllowedInclude(new VideoSchema(), Anime::RELATION_VIDEOS), new AllowedInclude(new VideoSchema(), Anime::RELATION_VIDEOS),
+1 -2
View File
@@ -11,7 +11,6 @@ use App\Http\Api\Field\Wiki\Series\SeriesNameField;
use App\Http\Api\Field\Wiki\Series\SeriesSlugField; use App\Http\Api\Field\Wiki\Series\SeriesSlugField;
use App\Http\Api\Include\AllowedInclude; use App\Http\Api\Include\AllowedInclude;
use App\Http\Api\Schema\EloquentSchema; use App\Http\Api\Schema\EloquentSchema;
use App\Http\Api\Schema\Wiki\Anime\AnimeSynonymSchema;
use App\Http\Resources\Wiki\Resource\SeriesJsonResource; use App\Http\Resources\Wiki\Resource\SeriesJsonResource;
use App\Models\Wiki\Series; use App\Models\Wiki\Series;
@@ -35,7 +34,7 @@ class SeriesSchema extends EloquentSchema implements SearchableSchema
new AllowedInclude(new VideoSchema(), 'anime.animethemes.animethemeentries.videos'), new AllowedInclude(new VideoSchema(), 'anime.animethemes.animethemeentries.videos'),
new AllowedInclude(new GroupSchema(), 'anime.animethemes.group'), new AllowedInclude(new GroupSchema(), 'anime.animethemes.group'),
new AllowedInclude(new SongSchema(), 'anime.animethemes.song'), new AllowedInclude(new SongSchema(), 'anime.animethemes.song'),
new AllowedInclude(new AnimeSynonymSchema(), 'anime.animesynonyms'), new AllowedInclude(new SynonymSchema(), 'anime.animesynonyms'),
]); ]);
} }
@@ -1,91 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Api\Wiki\Anime;
use App\Actions\Http\Api\DestroyAction;
use App\Actions\Http\Api\ForceDeleteAction;
use App\Actions\Http\Api\IndexAction;
use App\Actions\Http\Api\RestoreAction;
use App\Actions\Http\Api\ShowAction;
use App\Actions\Http\Api\StoreAction;
use App\Actions\Http\Api\UpdateAction;
use App\Http\Api\Query\Query;
use App\Http\Controllers\Api\BaseController;
use App\Http\Requests\Api\IndexRequest;
use App\Http\Requests\Api\ShowRequest;
use App\Http\Requests\Api\StoreRequest;
use App\Http\Requests\Api\UpdateRequest;
use App\Http\Resources\Wiki\Anime\Collection\AnimeSynonymCollection;
use App\Http\Resources\Wiki\Anime\Resource\AnimeSynonymJsonResource;
use App\Models\Wiki\Anime\AnimeSynonym;
use Illuminate\Http\JsonResponse;
class AnimeSynonymController extends BaseController
{
public function __construct()
{
parent::__construct(AnimeSynonym::class, 'animesynonym');
}
public function index(IndexRequest $request, IndexAction $action): AnimeSynonymCollection
{
$query = new Query($request->validated());
$synonyms = $query->hasSearchCriteria()
? $action->search($query, $request->schema())
: $action->index(AnimeSynonym::query(), $query, $request->schema());
return new AnimeSynonymCollection($synonyms, $query);
}
/**
* @param StoreAction<AnimeSynonym> $action
*/
public function store(StoreRequest $request, StoreAction $action): AnimeSynonymJsonResource
{
$synonym = $action->store(AnimeSynonym::query(), $request->validated());
return new AnimeSynonymJsonResource($synonym, new Query());
}
public function show(ShowRequest $request, AnimeSynonym $animesynonym, ShowAction $action): AnimeSynonymJsonResource
{
$query = new Query($request->validated());
$show = $action->show($animesynonym, $query, $request->schema());
return new AnimeSynonymJsonResource($show, $query);
}
public function update(UpdateRequest $request, AnimeSynonym $animesynonym, UpdateAction $action): AnimeSynonymJsonResource
{
$updated = $action->update($animesynonym, $request->validated());
return new AnimeSynonymJsonResource($updated, new Query());
}
public function destroy(AnimeSynonym $animesynonym, DestroyAction $action): AnimeSynonymJsonResource
{
$deleted = $action->destroy($animesynonym);
return new AnimeSynonymJsonResource($deleted, new Query());
}
public function restore(AnimeSynonym $animesynonym, RestoreAction $action): AnimeSynonymJsonResource
{
$restored = $action->restore($animesynonym);
return new AnimeSynonymJsonResource($restored, new Query());
}
public function forceDelete(AnimeSynonym $animesynonym, ForceDeleteAction $action): JsonResponse
{
$message = $action->forceDelete($animesynonym);
return new JsonResponse([
'message' => $message,
]);
}
}
@@ -1,33 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Http\Resources\Wiki\Anime\Collection;
use App\Http\Resources\BaseCollection;
use App\Http\Resources\Wiki\Anime\Resource\AnimeSynonymJsonResource;
use App\Models\Wiki\Anime\AnimeSynonym;
use Illuminate\Http\Request;
class AnimeSynonymCollection extends BaseCollection
{
/**
* The "data" wrapper that should be applied.
*
* @var string|null
*/
public static $wrap = 'animesynonyms';
/**
* Transform the resource into a JSON array.
*
*
* @noinspection PhpMissingParentCallCommonInspection
*/
public function toArray(Request $request): array
{
return $this->collection->map(
fn (AnimeSynonym $synonym): AnimeSynonymJsonResource => new AnimeSynonymJsonResource($synonym, $this->query)
)->all();
}
}
@@ -1,27 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Http\Resources\Wiki\Anime\Resource;
use App\Http\Api\Schema\Schema;
use App\Http\Api\Schema\Wiki\Anime\AnimeSynonymSchema;
use App\Http\Resources\BaseJsonResource;
class AnimeSynonymJsonResource extends BaseJsonResource
{
/**
* The "data" wrapper that should be applied.
*
* @var string|null
*/
public static $wrap = 'animesynonym';
/**
* Get the resource schema.
*/
protected function schema(): Schema
{
return new AnimeSynonymSchema();
}
}
@@ -1,16 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Listeners\Wiki;
use App\Contracts\Events\UpdateAnimeSynonymsEvent;
use Illuminate\Contracts\Events\ShouldHandleEventsAfterCommit;
class UpdateAnimeSynonyms implements ShouldHandleEventsAfterCommit
{
public function handle(UpdateAnimeSynonymsEvent $event): void
{
$event->updateAnimeSynonyms();
}
}
+1 -16
View File
@@ -5,10 +5,8 @@ declare(strict_types=1);
namespace App\Models\User\Submission; namespace App\Models\User\Submission;
use App\Concerns\Models\SubmissionModel; use App\Concerns\Models\SubmissionModel;
use App\Enums\Models\Wiki\AnimeMediaFormat;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use Illuminate\Database\Eloquent\Attributes\Table; use Illuminate\Database\Eloquent\Attributes\Table;
use Illuminate\Support\Arr;
#[Table('submission_anime', 'id')] #[Table('submission_anime', 'id')]
class SubmissionAnime extends Anime class SubmissionAnime extends Anime
@@ -21,24 +19,11 @@ class SubmissionAnime extends Anime
* @var list<string> * @var list<string>
*/ */
protected $fillable = [ protected $fillable = [
Anime::ATTRIBUTE_FORMAT,
Anime::ATTRIBUTE_NAME, Anime::ATTRIBUTE_NAME,
Anime::ATTRIBUTE_SEASON, Anime::ATTRIBUTE_SEASON,
Anime::ATTRIBUTE_SLUG, Anime::ATTRIBUTE_SLUG,
Anime::ATTRIBUTE_SYNOPSIS, Anime::ATTRIBUTE_SYNOPSIS,
Anime::ATTRIBUTE_YEAR, Anime::ATTRIBUTE_YEAR,
'format',
]; ];
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return Arr::flatten([
parent::casts(),
'format' => AnimeMediaFormat::class,
]);
}
} }
+4 -12
View File
@@ -11,7 +11,6 @@ use App\Contracts\Models\HasResources;
use App\Contracts\Models\HasSynonyms; use App\Contracts\Models\HasSynonyms;
use App\Contracts\Models\SoftDeletable; use App\Contracts\Models\SoftDeletable;
use App\Enums\Models\Wiki\AnimeFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeMediaFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Events\Wiki\Anime\AnimeCreated; use App\Events\Wiki\Anime\AnimeCreated;
use App\Events\Wiki\Anime\AnimeDeleted; use App\Events\Wiki\Anime\AnimeDeleted;
@@ -22,9 +21,7 @@ use App\Http\Resources\Pivot\Wiki\Resource\AnimeSeriesJsonResource;
use App\Http\Resources\Pivot\Wiki\Resource\AnimeStudioJsonResource; use App\Http\Resources\Pivot\Wiki\Resource\AnimeStudioJsonResource;
use App\Models\BaseModel; use App\Models\BaseModel;
use App\Models\List\External\ExternalEntry; use App\Models\List\External\ExternalEntry;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Observers\Wiki\AnimeObserver;
use App\Pivots\Morph\Imageable; use App\Pivots\Morph\Imageable;
use App\Pivots\Morph\Resourceable; use App\Pivots\Morph\Resourceable;
use App\Pivots\Wiki\AnimeSeries; use App\Pivots\Wiki\AnimeSeries;
@@ -34,7 +31,6 @@ use App\Scout\Typesense\Models\Wiki\AnimeTypesenseModel;
use Database\Factories\Wiki\AnimeFactory; use Database\Factories\Wiki\AnimeFactory;
use Deprecated; use Deprecated;
use Elastic\ScoutDriverPlus\Searchable; use Elastic\ScoutDriverPlus\Searchable;
use Illuminate\Database\Eloquent\Attributes\ObservedBy;
use Illuminate\Database\Eloquent\Attributes\Table; use Illuminate\Database\Eloquent\Attributes\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
@@ -54,7 +50,6 @@ use RuntimeException;
* @property Collection<int, ExternalEntry> $externalentries * @property Collection<int, ExternalEntry> $externalentries
* @property AnimeFormat|null $format * @property AnimeFormat|null $format
* @property Collection<int, Image> $images * @property Collection<int, Image> $images
* @property AnimeMediaFormat|null $media_format
* @property string $name * @property string $name
* @property Collection<int, ExternalResource> $resources * @property Collection<int, ExternalResource> $resources
* @property AnimeSeason|null $season * @property AnimeSeason|null $season
@@ -67,7 +62,6 @@ use RuntimeException;
* *
* @method static AnimeFactory factory(...$parameters) * @method static AnimeFactory factory(...$parameters)
*/ */
#[ObservedBy(AnimeObserver::class)]
#[Table(Anime::TABLE, Anime::ATTRIBUTE_ID)] #[Table(Anime::TABLE, Anime::ATTRIBUTE_ID)]
class Anime extends BaseModel implements Auditable, HasImages, HasResources, HasSynonyms, SoftDeletable class Anime extends BaseModel implements Auditable, HasImages, HasResources, HasSynonyms, SoftDeletable
{ {
@@ -80,7 +74,6 @@ class Anime extends BaseModel implements Auditable, HasImages, HasResources, Has
final public const string TABLE = 'anime'; final public const string TABLE = 'anime';
final public const string ATTRIBUTE_ID = 'anime_id'; final public const string ATTRIBUTE_ID = 'anime_id';
final public const string ATTRIBUTE_MEDIA_FORMAT = 'media_format';
final public const string ATTRIBUTE_FORMAT = 'format'; final public const string ATTRIBUTE_FORMAT = 'format';
final public const string ATTRIBUTE_NAME = 'name'; final public const string ATTRIBUTE_NAME = 'name';
final public const string ATTRIBUTE_SEASON = 'season'; final public const string ATTRIBUTE_SEASON = 'season';
@@ -134,7 +127,7 @@ class Anime extends BaseModel implements Auditable, HasImages, HasResources, Has
Anime::ATTRIBUTE_SLUG, Anime::ATTRIBUTE_SLUG,
Anime::ATTRIBUTE_SYNOPSIS, Anime::ATTRIBUTE_SYNOPSIS,
Anime::ATTRIBUTE_YEAR, Anime::ATTRIBUTE_YEAR,
Anime::ATTRIBUTE_MEDIA_FORMAT, 'media_format',
]; ];
/** /**
@@ -147,7 +140,6 @@ class Anime extends BaseModel implements Auditable, HasImages, HasResources, Has
return [ return [
Anime::ATTRIBUTE_FORMAT => AnimeFormat::class, Anime::ATTRIBUTE_FORMAT => AnimeFormat::class,
Anime::ATTRIBUTE_NAME => 'string', Anime::ATTRIBUTE_NAME => 'string',
Anime::ATTRIBUTE_MEDIA_FORMAT => AnimeMediaFormat::class,
Anime::ATTRIBUTE_SEASON => AnimeSeason::class, Anime::ATTRIBUTE_SEASON => AnimeSeason::class,
Anime::ATTRIBUTE_SLUG => 'string', Anime::ATTRIBUTE_SLUG => 'string',
Anime::ATTRIBUTE_SYNOPSIS => 'string', Anime::ATTRIBUTE_SYNOPSIS => 'string',
@@ -197,12 +189,12 @@ class Anime extends BaseModel implements Auditable, HasImages, HasResources, Has
} }
/** /**
* @return HasMany<AnimeSynonym, $this> * @return MorphMany<Synonym, $this>
*/ */
#[Deprecated('Use synonyms() instead.')] #[Deprecated('Use synonyms() instead.')]
public function animesynonyms(): HasMany public function animesynonyms(): MorphMany
{ {
return $this->hasMany(AnimeSynonym::class, AnimeSynonym::ATTRIBUTE_ANIME); return $this->synonyms();
} }
/** /**
-106
View File
@@ -1,106 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Models\Wiki\Anime;
use App\Concerns\Models\SoftDeletes;
use App\Contracts\Models\SoftDeletable;
use App\Enums\Models\Wiki\AnimeSynonymType;
use App\Models\BaseModel;
use App\Models\Wiki\Anime;
use App\Scout\Elasticsearch\Models\Wiki\Anime\AnimeSynonymElasticModel;
use App\Scout\Typesense\Models\Wiki\Anime\AnimeSynonymTypesenseModel;
use Elastic\ScoutDriverPlus\Searchable;
use Illuminate\Database\Eloquent\Attributes\Table;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Facades\Config;
use OwenIt\Auditing\Auditable as HasAudits;
use OwenIt\Auditing\Contracts\Auditable;
use RuntimeException;
/**
* @property Anime $anime
* @property int $anime_id
* @property int $synonym_id
* @property string|null $text
* @property AnimeSynonymType $type
*
* @deprecated Use Synonym instead.
*/
#[Table(AnimeSynonym::TABLE, AnimeSynonym::ATTRIBUTE_ID)]
class AnimeSynonym extends BaseModel implements Auditable, SoftDeletable
{
use HasAudits;
use HasFactory;
use Searchable;
use SoftDeletes;
final public const string TABLE = 'anime_synonyms';
final public const string ATTRIBUTE_ANIME = 'anime_id';
final public const string ATTRIBUTE_ID = 'synonym_id';
final public const string ATTRIBUTE_TEXT = 'text';
final public const string ATTRIBUTE_TYPE = 'type';
final public const string RELATION_ANIME = 'anime';
final public const string RELATION_SERIES = 'anime.series';
final public const string RELATION_VIDEOS = 'anime.animethemes.animethemeentries.videos';
/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
AnimeSynonym::ATTRIBUTE_ANIME,
AnimeSynonym::ATTRIBUTE_TEXT,
AnimeSynonym::ATTRIBUTE_TYPE,
];
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
AnimeSynonym::ATTRIBUTE_ANIME => 'int',
AnimeSynonym::ATTRIBUTE_TEXT => 'string',
AnimeSynonym::ATTRIBUTE_TYPE => AnimeSynonymType::class,
];
}
/**
* Get the indexable data array for the model.
*/
public function toSearchableArray(): array
{
return match ($driver = Config::get('scout.driver')) {
'collection',
'elastic' => AnimeSynonymElasticModel::toSearchableArray($this),
'typesense' => AnimeSynonymTypesenseModel::toSearchableArray($this),
default => throw new RuntimeException("Unsupported {$driver} search driver configured."),
};
}
public function getName(): string
{
return $this->text;
}
public function getSubtitle(): string
{
return $this->anime->getName();
}
/**
* @return BelongsTo<Anime, $this>
*/
public function anime(): BelongsTo
{
return $this->belongsTo(Anime::class, AnimeSynonym::ATTRIBUTE_ANIME);
}
}
@@ -91,7 +91,7 @@ class AnimeThemeEntry extends BaseModel implements Auditable, HasAggregateLikes,
final public const string RELATION_RESOURCES = 'resources'; final public const string RELATION_RESOURCES = 'resources';
final public const string RELATION_SONG = 'animetheme.song'; final public const string RELATION_SONG = 'animetheme.song';
final public const string RELATION_SONG_SHALLOW = 'song'; final public const string RELATION_SONG_SHALLOW = 'song';
final public const string RELATION_SYNONYMS = 'animetheme.anime.animesynonyms'; final public const string RELATION_SYNONYMS = 'animetheme.anime.synonyms';
final public const string RELATION_THEME = 'animetheme'; final public const string RELATION_THEME = 'animetheme';
final public const string RELATION_THEME_GROUP = 'animetheme.group'; final public const string RELATION_THEME_GROUP = 'animetheme.group';
final public const string RELATION_TRACKS = 'tracks'; final public const string RELATION_TRACKS = 'tracks';
+8
View File
@@ -119,6 +119,14 @@ class Synonym extends BaseModel implements Auditable, SoftDeletable
return $this->synonymable->getName(); return $this->synonymable->getName();
} }
/**
* @return MorphTo<Model, $this>
*/
public function anime(): MorphTo
{
return $this->synonymable();
}
/** /**
* @return MorphTo<Model, $this> * @return MorphTo<Model, $this>
*/ */
-26
View File
@@ -1,26 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Observers\Wiki;
use App\Models\Wiki\Anime;
class AnimeObserver
{
/**
* Handle the Anime "creating" event.
*/
public function creating(Anime $anime): void
{
$anime->setAttribute(Anime::ATTRIBUTE_MEDIA_FORMAT, $anime->getAttribute(Anime::ATTRIBUTE_FORMAT)->value);
}
/**
* Handle the Anime "updating" event.
*/
public function updating(Anime $anime): void
{
$anime->setAttribute(Anime::ATTRIBUTE_MEDIA_FORMAT, $anime->getAttribute(Anime::ATTRIBUTE_FORMAT)->value);
}
}
@@ -1,9 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Policies\Wiki\Anime;
use App\Policies\BasePolicy;
class AnimeSynonymPolicy extends BasePolicy {}
-2
View File
@@ -17,7 +17,6 @@ use App\Models\User\Submission\SubmissionSong;
use App\Models\User\Submission\SubmissionStudio; use App\Models\User\Submission\SubmissionStudio;
use App\Models\User\Submission\SubmissionSynonym; use App\Models\User\Submission\SubmissionSynonym;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist; use App\Models\Wiki\Artist;
@@ -112,7 +111,6 @@ class AppServiceProvider extends ServiceProvider
Relation::morphMap([ Relation::morphMap([
'page' => Page::class, 'page' => Page::class,
'anime' => Anime::class, 'anime' => Anime::class,
'animesynonym' => AnimeSynonym::class,
'animetheme' => AnimeTheme::class, 'animetheme' => AnimeTheme::class,
'animethemeentry' => AnimeThemeEntry::class, 'animethemeentry' => AnimeThemeEntry::class,
'artist' => Artist::class, 'artist' => Artist::class,
-4
View File
@@ -53,9 +53,7 @@ use App\Enums\Models\List\ExternalProfileVisibility;
use App\Enums\Models\List\PlaylistVisibility; use App\Enums\Models\List\PlaylistVisibility;
use App\Enums\Models\User\NotificationType; use App\Enums\Models\User\NotificationType;
use App\Enums\Models\Wiki\AnimeFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeMediaFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\AnimeSynonymType;
use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ImageFacet;
use App\Enums\Models\Wiki\ResourceSite; use App\Enums\Models\Wiki\ResourceSite;
use App\Enums\Models\Wiki\SynonymType; use App\Enums\Models\Wiki\SynonymType;
@@ -131,10 +129,8 @@ class GraphQLServiceProvider extends ServiceProvider
$typeRegistry->register(new PhpEnumType(ExternalProfileVisibility::class)); $typeRegistry->register(new PhpEnumType(ExternalProfileVisibility::class));
$typeRegistry->register(new PhpEnumType(PlaylistVisibility::class)); $typeRegistry->register(new PhpEnumType(PlaylistVisibility::class));
$typeRegistry->register(new PhpEnumType(NotificationType::class)); $typeRegistry->register(new PhpEnumType(NotificationType::class));
$typeRegistry->register(new PhpEnumType(AnimeMediaFormat::class));
$typeRegistry->register(new PhpEnumType(AnimeFormat::class)); $typeRegistry->register(new PhpEnumType(AnimeFormat::class));
$typeRegistry->register(new PhpEnumType(AnimeSeason::class)); $typeRegistry->register(new PhpEnumType(AnimeSeason::class));
$typeRegistry->register(new PhpEnumType(AnimeSynonymType::class));
$typeRegistry->register(new PhpEnumType(ImageFacet::class)); $typeRegistry->register(new PhpEnumType(ImageFacet::class));
$typeRegistry->register(new PhpEnumType(ResourceSite::class)); $typeRegistry->register(new PhpEnumType(ResourceSite::class));
$typeRegistry->register(new PhpEnumType(SynonymType::class)); $typeRegistry->register(new PhpEnumType(SynonymType::class));
@@ -4,7 +4,7 @@ declare(strict_types=1);
namespace App\Scout\Elasticsearch\Api\Field\Wiki\Anime; namespace App\Scout\Elasticsearch\Api\Field\Wiki\Anime;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Scout\Elasticsearch\Api\Field\EnumField; use App\Scout\Elasticsearch\Api\Field\EnumField;
use App\Scout\Elasticsearch\Api\Schema\Schema; use App\Scout\Elasticsearch\Api\Schema\Schema;
@@ -13,6 +13,6 @@ class AnimeMediaFormatField extends EnumField
{ {
public function __construct(Schema $schema) public function __construct(Schema $schema)
{ {
parent::__construct($schema, Anime::ATTRIBUTE_MEDIA_FORMAT, AnimeMediaFormat::class, Anime::ATTRIBUTE_FORMAT); parent::__construct($schema, 'media_format', AnimeFormat::class, Anime::ATTRIBUTE_FORMAT);
} }
} }
@@ -1,18 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Scout\Elasticsearch\Api\Field\Wiki\Anime\Synonym;
use App\Enums\Models\Wiki\AnimeSynonymType;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Scout\Elasticsearch\Api\Field\EnumField;
use App\Scout\Elasticsearch\Api\Schema\Schema;
class SynonymTypeField extends EnumField
{
public function __construct(Schema $schema)
{
parent::__construct($schema, AnimeSynonym::ATTRIBUTE_TYPE, AnimeSynonymType::class);
}
}
@@ -2,9 +2,9 @@
declare(strict_types=1); declare(strict_types=1);
namespace App\Scout\Elasticsearch\Api\Field\Wiki\Anime\Synonym; namespace App\Scout\Elasticsearch\Api\Field\Wiki\Synonym;
use App\Models\Wiki\Anime\AnimeSynonym; use App\Models\Wiki\Synonym;
use App\Scout\Elasticsearch\Api\Field\StringField; use App\Scout\Elasticsearch\Api\Field\StringField;
use App\Scout\Elasticsearch\Api\Schema\Schema; use App\Scout\Elasticsearch\Api\Schema\Schema;
@@ -12,6 +12,6 @@ class SynonymTextField extends StringField
{ {
public function __construct(Schema $schema) public function __construct(Schema $schema)
{ {
parent::__construct($schema, AnimeSynonym::ATTRIBUTE_TEXT); parent::__construct($schema, Synonym::ATTRIBUTE_TEXT);
} }
} }
@@ -0,0 +1,18 @@
<?php
declare(strict_types=1);
namespace App\Scout\Elasticsearch\Api\Field\Wiki\Synonym;
use App\Enums\Models\Wiki\SynonymType;
use App\Models\Wiki\Synonym;
use App\Scout\Elasticsearch\Api\Field\EnumField;
use App\Scout\Elasticsearch\Api\Schema\Schema;
class SynonymTypeField extends EnumField
{
public function __construct(Schema $schema)
{
parent::__construct($schema, Synonym::ATTRIBUTE_TYPE, SynonymType::class);
}
}
@@ -1,32 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Scout\Elasticsearch\Api\Query\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Scout\Criteria;
use App\Scout\Elasticsearch\Api\Query\ElasticQuery;
use Elastic\ScoutDriverPlus\Builders\SearchParametersBuilder;
use Elastic\ScoutDriverPlus\Support\Query;
class SynonymQuery extends ElasticQuery
{
public function build(Criteria $criteria): SearchParametersBuilder
{
$query = Query::bool()
->mustRaw([
'dis_max' => [
'queries' => [
[
'bool' => [
'should' => $this->createTextQuery('text', $criteria->getTerm()),
],
],
],
],
]);
return AnimeSynonym::searchQuery($query);
}
}
@@ -21,7 +21,6 @@ use App\Scout\Elasticsearch\Api\Field\Wiki\Anime\AnimeSlugField;
use App\Scout\Elasticsearch\Api\Field\Wiki\Anime\AnimeSynopsisField; use App\Scout\Elasticsearch\Api\Field\Wiki\Anime\AnimeSynopsisField;
use App\Scout\Elasticsearch\Api\Field\Wiki\Anime\AnimeYearField; use App\Scout\Elasticsearch\Api\Field\Wiki\Anime\AnimeYearField;
use App\Scout\Elasticsearch\Api\Schema\Schema; use App\Scout\Elasticsearch\Api\Schema\Schema;
use App\Scout\Elasticsearch\Api\Schema\Wiki\Anime\AnimeSynonymSchema;
use App\Scout\Elasticsearch\Api\Schema\Wiki\Anime\Theme\EntrySchema; use App\Scout\Elasticsearch\Api\Schema\Wiki\Anime\Theme\EntrySchema;
use App\Scout\Elasticsearch\Api\Schema\Wiki\Anime\ThemeSchema; use App\Scout\Elasticsearch\Api\Schema\Wiki\Anime\ThemeSchema;
@@ -48,7 +47,7 @@ class AnimeSchema extends Schema
new AllowedInclude(new SeriesSchema(), Anime::RELATION_SERIES), new AllowedInclude(new SeriesSchema(), Anime::RELATION_SERIES),
new AllowedInclude(new SongSchema(), Anime::RELATION_SONG), new AllowedInclude(new SongSchema(), Anime::RELATION_SONG),
new AllowedInclude(new StudioSchema(), Anime::RELATION_STUDIOS), new AllowedInclude(new StudioSchema(), Anime::RELATION_STUDIOS),
new AllowedInclude(new AnimeSynonymSchema(), Anime::RELATION_ANIMESYNONYMS), new AllowedInclude(new SynonymSchema(), Anime::RELATION_ANIMESYNONYMS),
new AllowedInclude(new ThemeSchema(), Anime::RELATION_THEMES), new AllowedInclude(new ThemeSchema(), Anime::RELATION_THEMES),
new AllowedInclude(new VideoSchema(), Anime::RELATION_VIDEOS), new AllowedInclude(new VideoSchema(), Anime::RELATION_VIDEOS),
]); ]);
@@ -2,23 +2,22 @@
declare(strict_types=1); declare(strict_types=1);
namespace App\Scout\Elasticsearch\Api\Schema\Wiki\Anime; namespace App\Scout\Elasticsearch\Api\Schema\Wiki;
use App\Http\Api\Include\AllowedInclude; use App\Http\Api\Include\AllowedInclude;
use App\Http\Resources\Wiki\Anime\Resource\AnimeSynonymJsonResource; use App\Http\Resources\Wiki\Resource\SynonymJsonResource;
use App\Models\Wiki\Anime\AnimeSynonym; use App\Models\Wiki\Synonym;
use App\Scout\Elasticsearch\Api\Field\Base\IdField; use App\Scout\Elasticsearch\Api\Field\Base\IdField;
use App\Scout\Elasticsearch\Api\Field\Field; use App\Scout\Elasticsearch\Api\Field\Field;
use App\Scout\Elasticsearch\Api\Field\Wiki\Anime\Synonym\SynonymTextField; use App\Scout\Elasticsearch\Api\Field\Wiki\Synonym\SynonymTextField;
use App\Scout\Elasticsearch\Api\Field\Wiki\Anime\Synonym\SynonymTypeField; use App\Scout\Elasticsearch\Api\Field\Wiki\Synonym\SynonymTypeField;
use App\Scout\Elasticsearch\Api\Schema\Schema; use App\Scout\Elasticsearch\Api\Schema\Schema;
use App\Scout\Elasticsearch\Api\Schema\Wiki\AnimeSchema;
class AnimeSynonymSchema extends Schema class SynonymSchema extends Schema
{ {
public function type(): string public function type(): string
{ {
return AnimeSynonymJsonResource::$wrap; return SynonymJsonResource::$wrap;
} }
/** /**
@@ -27,7 +26,7 @@ class AnimeSynonymSchema extends Schema
public function allowedIncludes(): array public function allowedIncludes(): array
{ {
return $this->withIntermediatePaths([ return $this->withIntermediatePaths([
new AllowedInclude(new AnimeSchema(), AnimeSynonym::RELATION_ANIME), new AllowedInclude(new AnimeSchema(), 'anime'),
]); ]);
} }
@@ -39,7 +38,7 @@ class AnimeSynonymSchema extends Schema
return array_merge( return array_merge(
parent::fields(), parent::fields(),
[ [
new IdField($this, AnimeSynonym::ATTRIBUTE_ID), new IdField($this, Synonym::ATTRIBUTE_ID),
new SynonymTextField($this), new SynonymTextField($this),
new SynonymTypeField($this), new SynonymTypeField($this),
], ],
@@ -12,7 +12,6 @@ use App\Http\Api\Schema\EloquentSchema;
use App\Http\Api\Scope\ScopeParser; use App\Http\Api\Scope\ScopeParser;
use App\Models\List\Playlist; use App\Models\List\Playlist;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist; use App\Models\Wiki\Artist;
@@ -28,7 +27,6 @@ use App\Scout\Elasticsearch\Api\Parser\PagingParser;
use App\Scout\Elasticsearch\Api\Parser\SortParser; use App\Scout\Elasticsearch\Api\Parser\SortParser;
use App\Scout\Elasticsearch\Api\Query\ElasticQuery; use App\Scout\Elasticsearch\Api\Query\ElasticQuery;
use App\Scout\Elasticsearch\Api\Query\List\PlaylistQuery; use App\Scout\Elasticsearch\Api\Query\List\PlaylistQuery;
use App\Scout\Elasticsearch\Api\Query\Wiki\Anime\SynonymQuery as AnimeSynonymQuery;
use App\Scout\Elasticsearch\Api\Query\Wiki\Anime\Theme\EntryQuery; use App\Scout\Elasticsearch\Api\Query\Wiki\Anime\Theme\EntryQuery;
use App\Scout\Elasticsearch\Api\Query\Wiki\Anime\ThemeQuery; use App\Scout\Elasticsearch\Api\Query\Wiki\Anime\ThemeQuery;
use App\Scout\Elasticsearch\Api\Query\Wiki\AnimeQuery; use App\Scout\Elasticsearch\Api\Query\Wiki\AnimeQuery;
@@ -215,7 +213,6 @@ class Elasticsearch extends Search
return match ($model) { return match ($model) {
Playlist::class => new PlaylistQuery(), Playlist::class => new PlaylistQuery(),
AnimeThemeEntry::class => new EntryQuery(), AnimeThemeEntry::class => new EntryQuery(),
AnimeSynonym::class => new AnimeSynonymQuery(),
AnimeTheme::class => new ThemeQuery(), AnimeTheme::class => new ThemeQuery(),
Anime::class => new AnimeQuery(), Anime::class => new AnimeQuery(),
Artist::class => new ArtistQuery(), Artist::class => new ArtistQuery(),
@@ -1,18 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Scout\Elasticsearch\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
class AnimeSynonymElasticModel
{
/**
* @return array<string, mixed>
*/
public static function toSearchableArray(AnimeSynonym $synonym): array
{
return $synonym->attributesToArray();
}
}
@@ -1,21 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Scout\Typesense\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
class AnimeSynonymTypesenseModel
{
/**
* @return array<string, mixed>
*/
public static function toSearchableArray(AnimeSynonym $synonym): array
{
return [
'id' => (string) $synonym->getKey(),
'text' => $synonym->text,
];
}
}
-18
View File
@@ -5,7 +5,6 @@ declare(strict_types=1);
use App\Models\List\ExternalProfile; use App\Models\List\ExternalProfile;
use App\Models\List\Playlist; use App\Models\List\Playlist;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist; use App\Models\Wiki\Artist;
@@ -502,23 +501,6 @@ return [
'query_by' => 'name', 'query_by' => 'name',
], ],
], ],
AnimeSynonym::class => [
'collection-schema' => [
'fields' => [
[
'name' => 'id',
'type' => 'string',
],
[
'name' => 'text',
'type' => 'string',
],
],
],
'search-parameters' => [
'query_by' => 'text',
],
],
Synonym::class => [ Synonym::class => [
'collection-schema' => [ 'collection-schema' => [
'fields' => [ 'fields' => [
-1
View File
@@ -47,7 +47,6 @@ class AnimeFactory extends Factory
Anime::ATTRIBUTE_SYNOPSIS => fake()->text(), Anime::ATTRIBUTE_SYNOPSIS => fake()->text(),
Anime::ATTRIBUTE_YEAR => fake()->numberBetween(1960, intval(date('Y')) + 1), Anime::ATTRIBUTE_YEAR => fake()->numberBetween(1960, intval(date('Y')) + 1),
Anime::ATTRIBUTE_FORMAT => $format->value, Anime::ATTRIBUTE_FORMAT => $format->value,
Anime::ATTRIBUTE_MEDIA_FORMAT => $format->value,
]; ];
} }
@@ -22,7 +22,7 @@ return new class extends Migration
$table->string('name'); $table->string('name');
$table->integer('year')->nullable(); $table->integer('year')->nullable();
$table->integer('season')->nullable(); $table->integer('season')->nullable();
$table->integer('media_format')->nullable(); $table->integer('format')->nullable();
$table->text('synopsis')->nullable(); $table->text('synopsis')->nullable();
}); });
} }
@@ -1,30 +0,0 @@
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
if (! Schema::hasTable('artist_song')) {
Schema::create('artist_song', function (Blueprint $table) {
$table->id();
$table->timestamps(6);
$table->unsignedBigInteger('artist_id');
$table->foreign('artist_id')->references('artist_id')->on('artists')->cascadeOnDelete();
$table->unsignedBigInteger('song_id');
$table->foreign('song_id')->references('song_id')->on('songs')->cascadeOnDelete();
$table->string('as')->nullable();
$table->string('alias')->nullable();
$table->unique(['artist_id', 'song_id'], 'artist_song_unique');
});
}
}
};
@@ -1,22 +0,0 @@
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
if (! Schema::hasColumn('anime', 'format')) {
Schema::table('anime', function (Blueprint $table) {
$table->integer('format')->nullable()->after('season');
});
}
}
};
@@ -26,7 +26,6 @@ use App\Models\User\Notification;
use App\Models\User\Submission; use App\Models\User\Submission;
use App\Models\User\WatchHistory; use App\Models\User\WatchHistory;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist; use App\Models\Wiki\Artist;
@@ -82,7 +81,6 @@ class PermissionSeeder extends Seeder
// Wiki Resources // Wiki Resources
$this->registerResource(Anime::class, $extendedCrudPermissions); $this->registerResource(Anime::class, $extendedCrudPermissions);
$this->registerResource(AnimeSynonym::class, $extendedCrudPermissions);
$this->registerResource(AnimeTheme::class, $extendedCrudPermissions); $this->registerResource(AnimeTheme::class, $extendedCrudPermissions);
$this->registerResource(AnimeThemeEntry::class, $extendedCrudPermissions); $this->registerResource(AnimeThemeEntry::class, $extendedCrudPermissions);
$this->registerResource(Artist::class, $extendedCrudPermissions); $this->registerResource(Artist::class, $extendedCrudPermissions);
@@ -27,7 +27,6 @@ use App\Models\User\Notification;
use App\Models\User\Submission; use App\Models\User\Submission;
use App\Models\User\WatchHistory; use App\Models\User\WatchHistory;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist; use App\Models\Wiki\Artist;
@@ -90,7 +89,6 @@ class AdminSeeder extends RoleSeeder
// Wiki Resources // Wiki Resources
$this->configureResource($role, Anime::class, $extendedCrudPermissions); $this->configureResource($role, Anime::class, $extendedCrudPermissions);
$this->configureResource($role, AnimeSynonym::class, $extendedCrudPermissions);
$this->configureResource($role, AnimeTheme::class, $extendedCrudPermissions); $this->configureResource($role, AnimeTheme::class, $extendedCrudPermissions);
$this->configureResource($role, AnimeThemeEntry::class, $extendedCrudPermissions); $this->configureResource($role, AnimeThemeEntry::class, $extendedCrudPermissions);
$this->configureResource($role, Artist::class, $extendedCrudPermissions); $this->configureResource($role, Artist::class, $extendedCrudPermissions);
@@ -18,7 +18,6 @@ use App\Models\User\Like;
use App\Models\User\Notification; use App\Models\User\Notification;
use App\Models\User\WatchHistory; use App\Models\User\WatchHistory;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist; use App\Models\Wiki\Artist;
@@ -73,7 +72,6 @@ class ContentModeratorRoleSeeder extends RoleSeeder
// Wiki Resources // Wiki Resources
$this->configureResource($role, Anime::class, $extendedCrudPermissions); $this->configureResource($role, Anime::class, $extendedCrudPermissions);
$this->configureResource($role, AnimeSynonym::class, $extendedCrudPermissions);
$this->configureResource($role, AnimeTheme::class, $extendedCrudPermissions); $this->configureResource($role, AnimeTheme::class, $extendedCrudPermissions);
$this->configureResource($role, AnimeThemeEntry::class, $extendedCrudPermissions); $this->configureResource($role, AnimeThemeEntry::class, $extendedCrudPermissions);
$this->configureResource($role, Artist::class, $extendedCrudPermissions); $this->configureResource($role, Artist::class, $extendedCrudPermissions);
@@ -17,7 +17,6 @@ use App\Models\User\Like;
use App\Models\User\Notification; use App\Models\User\Notification;
use App\Models\User\WatchHistory; use App\Models\User\WatchHistory;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist; use App\Models\Wiki\Artist;
@@ -60,7 +59,6 @@ class ContributorRoleSeeder extends RoleSeeder
// Wiki Resources // Wiki Resources
$this->configureResource($role, Anime::class, [CrudPermission::VIEW]); $this->configureResource($role, Anime::class, [CrudPermission::VIEW]);
$this->configureResource($role, AnimeSynonym::class, [CrudPermission::VIEW]);
$this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW]); $this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW]);
$this->configureResource($role, AnimeThemeEntry::class, [CrudPermission::VIEW]); $this->configureResource($role, AnimeThemeEntry::class, [CrudPermission::VIEW]);
$this->configureResource($role, Artist::class, [CrudPermission::VIEW]); $this->configureResource($role, Artist::class, [CrudPermission::VIEW]);
@@ -17,7 +17,6 @@ use App\Models\User\Like;
use App\Models\User\Notification; use App\Models\User\Notification;
use App\Models\User\WatchHistory; use App\Models\User\WatchHistory;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist; use App\Models\Wiki\Artist;
@@ -60,7 +59,6 @@ class DeveloperRoleSeeder extends RoleSeeder
// Wiki Resources // Wiki Resources
$this->configureResource($role, Anime::class, [CrudPermission::VIEW]); $this->configureResource($role, Anime::class, [CrudPermission::VIEW]);
$this->configureResource($role, AnimeSynonym::class, [CrudPermission::VIEW]);
$this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW]); $this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW]);
$this->configureResource($role, AnimeThemeEntry::class, [CrudPermission::VIEW]); $this->configureResource($role, AnimeThemeEntry::class, [CrudPermission::VIEW]);
$this->configureResource($role, Artist::class, [CrudPermission::VIEW]); $this->configureResource($role, Artist::class, [CrudPermission::VIEW]);
@@ -18,7 +18,6 @@ use App\Models\User\Like;
use App\Models\User\Notification; use App\Models\User\Notification;
use App\Models\User\WatchHistory; use App\Models\User\WatchHistory;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist; use App\Models\Wiki\Artist;
@@ -73,7 +72,6 @@ class EncoderRoleSeeder extends RoleSeeder
// Wiki Resources // Wiki Resources
$this->configureResource($role, Anime::class, $extendedCrudPermissions); $this->configureResource($role, Anime::class, $extendedCrudPermissions);
$this->configureResource($role, AnimeSynonym::class, $extendedCrudPermissions);
$this->configureResource($role, AnimeTheme::class, $extendedCrudPermissions); $this->configureResource($role, AnimeTheme::class, $extendedCrudPermissions);
$this->configureResource($role, AnimeThemeEntry::class, $extendedCrudPermissions); $this->configureResource($role, AnimeThemeEntry::class, $extendedCrudPermissions);
$this->configureResource($role, Artist::class, $extendedCrudPermissions); $this->configureResource($role, Artist::class, $extendedCrudPermissions);
@@ -17,7 +17,6 @@ use App\Models\User\Like;
use App\Models\User\Notification; use App\Models\User\Notification;
use App\Models\User\WatchHistory; use App\Models\User\WatchHistory;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist; use App\Models\Wiki\Artist;
@@ -60,7 +59,6 @@ class PanelViewerRoleSeeder extends RoleSeeder
// Wiki Resources // Wiki Resources
$this->configureResource($role, Anime::class, [CrudPermission::VIEW]); $this->configureResource($role, Anime::class, [CrudPermission::VIEW]);
$this->configureResource($role, AnimeSynonym::class, [CrudPermission::VIEW]);
$this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW]); $this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW]);
$this->configureResource($role, AnimeThemeEntry::class, [CrudPermission::VIEW]); $this->configureResource($role, AnimeThemeEntry::class, [CrudPermission::VIEW]);
$this->configureResource($role, Artist::class, [CrudPermission::VIEW]); $this->configureResource($role, Artist::class, [CrudPermission::VIEW]);
@@ -17,7 +17,6 @@ use App\Models\User\Like;
use App\Models\User\Notification; use App\Models\User\Notification;
use App\Models\User\WatchHistory; use App\Models\User\WatchHistory;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme; use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist; use App\Models\Wiki\Artist;
@@ -60,7 +59,6 @@ class PatronRoleSeeder extends RoleSeeder
// Wiki Resources // Wiki Resources
$this->configureResource($role, Anime::class, [CrudPermission::VIEW]); $this->configureResource($role, Anime::class, [CrudPermission::VIEW]);
$this->configureResource($role, AnimeSynonym::class, [CrudPermission::VIEW]);
$this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW]); $this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW]);
$this->configureResource($role, AnimeThemeEntry::class, [CrudPermission::VIEW]); $this->configureResource($role, AnimeThemeEntry::class, [CrudPermission::VIEW]);
$this->configureResource($role, Artist::class, [CrudPermission::VIEW]); $this->configureResource($role, Artist::class, [CrudPermission::VIEW]);
@@ -1,78 +0,0 @@
<?php
declare(strict_types=1);
use App\Concerns\Elastic\ConfiguresTextAnalyzers;
use Elastic\Adapter\Indices\Mapping;
use Elastic\Adapter\Indices\Settings;
use Elastic\Migrations\Facades\Index;
use Elastic\Migrations\MigrationInterface;
final class CreateAnimeSynonymIndex implements MigrationInterface
{
use ConfiguresTextAnalyzers;
/**
* Run the migration.
*/
public function up(): void
{
Index::createIfNotExists('anime_synonyms', function (Mapping $mapping, Settings $settings) {
$this->configureTextAnalyzers($settings);
$mapping->nested('anime', [
'properties' => [
'anime_id' => [
'type' => 'long',
],
'created_at' => [
'type' => 'date',
],
'name' => [
'type' => 'text',
'analyzer' => 'name_search',
],
'format' => [
'type' => 'long',
],
'season' => [
'type' => 'long',
],
'slug' => [
'type' => 'text',
],
'synopsis' => [
'type' => 'text',
],
'updated_at' => [
'type' => 'date',
],
'year' => [
'type' => 'long',
],
],
]);
$mapping->long('anime_id');
$mapping->date('created_at');
$mapping->long('synonym_id');
$mapping->text('text', [
'analyzer' => 'name_search',
'fields' => [
'keyword' => [
'type' => 'keyword',
],
],
]);
$mapping->long('type');
$mapping->date('updated_at');
});
}
/**
* Reverse the migration.
*/
public function down(): void
{
Index::dropIfExists('anime_synonyms');
}
}
-8
View File
@@ -10,12 +10,6 @@ type Anime @model(class: "App\\Models\\Wiki\\Anime") {
"The primary title of the anime" "The primary title of the anime"
name: String! name: String!
"The media format of the anime"
mediaFormat: AnimeMediaFormat @rename(attribute: "media_format") @deprecated(reason: "Use 'format' instead")
"The formatted string value of the mediaFormat field"
mediaFormatLocalized: String @localized @deprecated(reason: "Use 'formatLocalized' instead")
"The format of the anime" "The format of the anime"
format: AnimeFormat format: AnimeFormat
@@ -126,8 +120,6 @@ extend type Query {
search: String @search search: String @search
name: String @eq name: String @eq
name_like: String @like(key: "name") name_like: String @like(key: "name")
mediaFormat: AnimeMediaFormat @eq(key: "media_format") @deprecated(reason: "Use 'format' instead")
mediaFormat_in: [AnimeMediaFormat!] @in(key: "media_format") @deprecated(reason: "Use 'format_in' instead")
format: AnimeFormat @eq format: AnimeFormat @eq
format_in: [AnimeFormat!] @in(key: "format") format_in: [AnimeFormat!] @in(key: "format")
season: AnimeSeason @eq season: AnimeSeason @eq
-4
View File
@@ -21,8 +21,6 @@ type AnimeYearSeasons {
"The animes of the season year filtered" "The animes of the season year filtered"
anime( anime(
name_like: String @like(key: "name") name_like: String @like(key: "name")
mediaFormat: AnimeMediaFormat @eq(key: "media_format") @deprecated(reason: "Use 'format' instead")
mediaFormat_in: [AnimeMediaFormat!] @in(key: "media_format") @deprecated(reason: "Use 'format_in' instead")
format: AnimeFormat @eq(key: "format") format: AnimeFormat @eq(key: "format")
format_in: [AnimeFormat!] @in(key: "format") format_in: [AnimeFormat!] @in(key: "format")
season: AnimeSeason @eq season: AnimeSeason @eq
@@ -48,8 +46,6 @@ type AnimeYearSeason {
"The animes of the season year filtered" "The animes of the season year filtered"
anime( anime(
name_like: String @like(key: "name") name_like: String @like(key: "name")
mediaFormat: AnimeMediaFormat @eq(key: "media_format") @deprecated(reason: "Use 'format' instead")
mediaFormat_in: [AnimeMediaFormat!] @in(key: "media_format") @deprecated(reason: "Use 'format_in' instead")
format: AnimeFormat @eq(key: "format") format: AnimeFormat @eq(key: "format")
format_in: [AnimeFormat!] @in(key: "format") format_in: [AnimeFormat!] @in(key: "format")
season: AnimeSeason @eq season: AnimeSeason @eq
-2
View File
@@ -21,8 +21,6 @@ type Series @model(class: "App\\Models\\Wiki\\Series") {
anime( anime(
name_like: String @like(key: "name") name_like: String @like(key: "name")
mediaFormat: AnimeMediaFormat @eq(key: "media_format") @deprecated(reason: "Use 'format' instead")
mediaFormat_in: [AnimeMediaFormat!] @in(key: "media_format") @deprecated(reason: "Use 'format_in' instead")
format: AnimeFormat @eq format: AnimeFormat @eq
format_in: [AnimeFormat!] @in(key: "format") format_in: [AnimeFormat!] @in(key: "format")
season: AnimeSeason @eq season: AnimeSeason @eq
-2
View File
@@ -21,8 +21,6 @@ type Studio @model(class: "App\\Models\\Wiki\\Studio") {
anime( anime(
name_like: String @like(key: "name") name_like: String @like(key: "name")
mediaFormat: AnimeMediaFormat @eq(key: "media_format") @deprecated(reason: "Use 'format' instead")
mediaFormat_in: [AnimeMediaFormat!] @in(key: "media_format") @deprecated(reason: "Use 'format_in' instead")
format: AnimeFormat @eq format: AnimeFormat @eq
format_in: [AnimeFormat!] @in(key: "format") format_in: [AnimeFormat!] @in(key: "format")
season: AnimeSeason @eq season: AnimeSeason @eq
-16
View File
@@ -9,9 +9,7 @@ use App\Enums\Models\List\ExternalProfileVisibility;
use App\Enums\Models\List\PlaylistVisibility; use App\Enums\Models\List\PlaylistVisibility;
use App\Enums\Models\User\SubmissionStatus; use App\Enums\Models\User\SubmissionStatus;
use App\Enums\Models\Wiki\AnimeFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeMediaFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\AnimeSynonymType;
use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ImageFacet;
use App\Enums\Models\Wiki\ResourceSite; use App\Enums\Models\Wiki\ResourceSite;
use App\Enums\Models\Wiki\ThemeType; use App\Enums\Models\Wiki\ThemeType;
@@ -33,26 +31,12 @@ return [
AnimeFormat::SPECIAL->name => 'Special', AnimeFormat::SPECIAL->name => 'Special',
AnimeFormat::ONA->name => 'ONA', AnimeFormat::ONA->name => 'ONA',
], ],
AnimeMediaFormat::class => [
AnimeMediaFormat::TV->name => 'TV',
AnimeMediaFormat::TV_SHORT->name => 'TV Short',
AnimeMediaFormat::OVA->name => 'OVA',
AnimeMediaFormat::MOVIE->name => 'Movie',
AnimeMediaFormat::SPECIAL->name => 'Special',
AnimeMediaFormat::ONA->name => 'ONA',
],
AnimeSeason::class => [ AnimeSeason::class => [
AnimeSeason::WINTER->name => 'Winter', AnimeSeason::WINTER->name => 'Winter',
AnimeSeason::SPRING->name => 'Spring', AnimeSeason::SPRING->name => 'Spring',
AnimeSeason::SUMMER->name => 'Summer', AnimeSeason::SUMMER->name => 'Summer',
AnimeSeason::FALL->name => 'Fall', AnimeSeason::FALL->name => 'Fall',
], ],
AnimeSynonymType::class => [
AnimeSynonymType::OTHER->name => 'Other',
AnimeSynonymType::NATIVE->name => 'Native',
AnimeSynonymType::ENGLISH->name => 'English',
AnimeSynonymType::SHORT->name => 'Short',
],
ExternalEntryStatus::class => [ ExternalEntryStatus::class => [
ExternalEntryStatus::WATCHING->name => 'Watching', ExternalEntryStatus::WATCHING->name => 'Watching',
ExternalEntryStatus::COMPLETED->name => 'Completed', ExternalEntryStatus::COMPLETED->name => 'Completed',
-2
View File
@@ -25,7 +25,6 @@ use App\Http\Controllers\Api\Pivot\Wiki\AnimeStudioController;
use App\Http\Controllers\Api\Pivot\Wiki\AnimeThemeEntryVideoController; use App\Http\Controllers\Api\Pivot\Wiki\AnimeThemeEntryVideoController;
use App\Http\Controllers\Api\Pivot\Wiki\ArtistMemberController; use App\Http\Controllers\Api\Pivot\Wiki\ArtistMemberController;
use App\Http\Controllers\Api\SearchController; use App\Http\Controllers\Api\SearchController;
use App\Http\Controllers\Api\Wiki\Anime\AnimeSynonymController;
use App\Http\Controllers\Api\Wiki\Anime\Theme\EntryController; use App\Http\Controllers\Api\Wiki\Anime\Theme\EntryController;
use App\Http\Controllers\Api\Wiki\Anime\ThemeController; use App\Http\Controllers\Api\Wiki\Anime\ThemeController;
use App\Http\Controllers\Api\Wiki\Anime\YearController; use App\Http\Controllers\Api\Wiki\Anime\YearController;
@@ -263,7 +262,6 @@ apiResource('synonym', SynonymController::class);
apiResource('video', VideoController::class); apiResource('video', VideoController::class);
// Anime Routes // Anime Routes
apiResource('animesynonym', AnimeSynonymController::class);
apiResource('animetheme', ThemeController::class); apiResource('animetheme', ThemeController::class);
Route::get('animeyear', [YearController::class, 'index'])->name('animeyear.index'); Route::get('animeyear', [YearController::class, 'index'])->name('animeyear.index');
Route::get('animeyear/{year}', [YearController::class, 'show'])->name('animeyear.show'); Route::get('animeyear/{year}', [YearController::class, 'show'])->name('animeyear.show');
@@ -5,7 +5,7 @@ declare(strict_types=1);
use App\Concerns\Actions\Http\Api\SortsModels; use App\Concerns\Actions\Http\Api\SortsModels;
use App\Contracts\Http\Api\Field\SortableField; use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Http\Api\Sort\Direction; use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Http\Api\Criteria\Paging\Criteria; use App\Http\Api\Criteria\Paging\Criteria;
use App\Http\Api\Criteria\Paging\OffsetCriteria; use App\Http\Api\Criteria\Paging\OffsetCriteria;
@@ -283,11 +283,11 @@ test('updated at filter', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => AnimeSeries::RELATION_ANIME, IncludeParser::param() => AnimeSeries::RELATION_ANIME,
]; ];
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Http\Api\Field\Field; use App\Http\Api\Field\Field;
use App\Http\Api\Include\AllowedInclude; use App\Http\Api\Include\AllowedInclude;
@@ -123,11 +123,11 @@ test('sparse fieldsets', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => AnimeSeries::RELATION_ANIME, IncludeParser::param() => AnimeSeries::RELATION_ANIME,
]; ];
@@ -5,7 +5,7 @@ declare(strict_types=1);
use App\Concerns\Actions\Http\Api\SortsModels; use App\Concerns\Actions\Http\Api\SortsModels;
use App\Contracts\Http\Api\Field\SortableField; use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Http\Api\Sort\Direction; use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Http\Api\Criteria\Paging\Criteria; use App\Http\Api\Criteria\Paging\Criteria;
use App\Http\Api\Criteria\Paging\OffsetCriteria; use App\Http\Api\Criteria\Paging\OffsetCriteria;
@@ -283,11 +283,11 @@ test('updated at filter', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => AnimeStudio::RELATION_ANIME, IncludeParser::param() => AnimeStudio::RELATION_ANIME,
]; ];
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Http\Api\Field\Field; use App\Http\Api\Field\Field;
use App\Http\Api\Include\AllowedInclude; use App\Http\Api\Include\AllowedInclude;
@@ -123,11 +123,11 @@ test('sparse fieldsets', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => AnimeStudio::RELATION_ANIME, IncludeParser::param() => AnimeStudio::RELATION_ANIME,
]; ];
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
use App\Contracts\Http\Api\Field\SortableField; use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Http\Api\Filter\TrashedStatus; use App\Enums\Http\Api\Filter\TrashedStatus;
use App\Enums\Http\Api\Sort\Direction; use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ImageFacet;
use App\Enums\Models\Wiki\ResourceSite; use App\Enums\Models\Wiki\ResourceSite;
@@ -43,6 +43,7 @@ use App\Models\Wiki\Video;
use Illuminate\Database\Eloquent\Factories\Sequence; use Illuminate\Database\Eloquent\Factories\Sequence;
use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Date; use Illuminate\Support\Facades\Date;
@@ -201,11 +202,11 @@ test('season filter', function (): void {
}); });
test('media format filter', function (): void { test('media format filter', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
]; ];
@@ -480,7 +481,7 @@ test('synonyms by type', function (): void {
->create(); ->create();
$anime = Anime::with([ $anime = Anime::with([
Anime::RELATION_ANIMESYNONYMS => function (HasMany $query) use ($typeFilter): void { Anime::RELATION_ANIMESYNONYMS => function (MorphMany $query) use ($typeFilter): void {
$query->where(Synonym::ATTRIBUTE_TYPE, $typeFilter->value); $query->where(Synonym::ATTRIBUTE_TYPE, $typeFilter->value);
}, },
]) ])
@@ -28,6 +28,7 @@ use App\Models\Wiki\Video;
use Illuminate\Database\Eloquent\Factories\Sequence; use Illuminate\Database\Eloquent\Factories\Sequence;
use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
@@ -146,7 +147,7 @@ test('synonyms by type', function (): void {
->createOne(); ->createOne();
$anime->unsetRelations()->load([ $anime->unsetRelations()->load([
Anime::RELATION_ANIMESYNONYMS => function (HasMany $query) use ($typeFilter): void { Anime::RELATION_ANIMESYNONYMS => function (MorphMany $query) use ($typeFilter): void {
$query->where(Synonym::ATTRIBUTE_TYPE, $typeFilter->value); $query->where(Synonym::ATTRIBUTE_TYPE, $typeFilter->value);
}, },
]); ]);
@@ -3,7 +3,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Auth\CrudPermission; use App\Enums\Auth\CrudPermission;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Models\Auth\User; use App\Models\Auth\User;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
@@ -50,11 +50,11 @@ test('required fields', function (): void {
test('create', function (): void { test('create', function (): void {
$season = Arr::random(AnimeSeason::cases()); $season = Arr::random(AnimeSeason::cases());
$mediaFormat = Arr::random(AnimeMediaFormat::cases()); $mediaFormat = Arr::random(AnimeFormat::cases());
$parameters = array_merge( $parameters = array_merge(
Anime::factory()->raw(), Anime::factory()->raw(),
[Anime::ATTRIBUTE_SEASON => $season->localize(), Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormat->localize()], [Anime::ATTRIBUTE_SEASON => $season->localize(), 'media_format' => $mediaFormat->localize()],
); );
$user = User::factory()->withPermissions(CrudPermission::CREATE->format(Anime::class))->createOne(); $user = User::factory()->withPermissions(CrudPermission::CREATE->format(Anime::class))->createOne();
@@ -3,7 +3,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Auth\CrudPermission; use App\Enums\Auth\CrudPermission;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Models\Auth\User; use App\Models\Auth\User;
use App\Models\Wiki\Anime; use App\Models\Wiki\Anime;
@@ -16,11 +16,11 @@ test('protected', function (): void {
$anime = Anime::factory()->createOne(); $anime = Anime::factory()->createOne();
$season = Arr::random(AnimeSeason::cases()); $season = Arr::random(AnimeSeason::cases());
$mediaFormat = Arr::random(AnimeMediaFormat::cases()); $mediaFormat = Arr::random(AnimeFormat::cases());
$parameters = array_merge( $parameters = array_merge(
Anime::factory()->raw(), Anime::factory()->raw(),
[Anime::ATTRIBUTE_SEASON => $season->localize(), Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormat->localize()], [Anime::ATTRIBUTE_SEASON => $season->localize(), 'media_format' => $mediaFormat->localize()],
); );
$response = put(route('api.anime.update', ['anime' => $anime] + $parameters)); $response = put(route('api.anime.update', ['anime' => $anime] + $parameters));
@@ -32,11 +32,11 @@ test('forbidden', function (): void {
$anime = Anime::factory()->createOne(); $anime = Anime::factory()->createOne();
$season = Arr::random(AnimeSeason::cases()); $season = Arr::random(AnimeSeason::cases());
$mediaFormat = Arr::random(AnimeMediaFormat::cases()); $mediaFormat = Arr::random(AnimeFormat::cases());
$parameters = array_merge( $parameters = array_merge(
Anime::factory()->raw(), Anime::factory()->raw(),
[Anime::ATTRIBUTE_SEASON => $season->localize(), Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormat->localize()], [Anime::ATTRIBUTE_SEASON => $season->localize(), 'media_format' => $mediaFormat->localize()],
); );
$user = User::factory()->createOne(); $user = User::factory()->createOne();
@@ -52,11 +52,11 @@ test('trashed', function (): void {
$anime = Anime::factory()->trashed()->createOne(); $anime = Anime::factory()->trashed()->createOne();
$season = Arr::random(AnimeSeason::cases()); $season = Arr::random(AnimeSeason::cases());
$mediaFormat = Arr::random(AnimeMediaFormat::cases()); $mediaFormat = Arr::random(AnimeFormat::cases());
$parameters = array_merge( $parameters = array_merge(
Anime::factory()->raw(), Anime::factory()->raw(),
[Anime::ATTRIBUTE_SEASON => $season->localize(), Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormat->localize()], [Anime::ATTRIBUTE_SEASON => $season->localize(), 'media_format' => $mediaFormat->localize()],
); );
$user = User::factory()->withPermissions(CrudPermission::UPDATE->format(Anime::class))->createOne(); $user = User::factory()->withPermissions(CrudPermission::UPDATE->format(Anime::class))->createOne();
@@ -72,11 +72,11 @@ test('update', function (): void {
$anime = Anime::factory()->createOne(); $anime = Anime::factory()->createOne();
$season = Arr::random(AnimeSeason::cases()); $season = Arr::random(AnimeSeason::cases());
$mediaFormat = Arr::random(AnimeMediaFormat::cases()); $mediaFormat = Arr::random(AnimeFormat::cases());
$parameters = array_merge( $parameters = array_merge(
Anime::factory()->raw(), Anime::factory()->raw(),
[Anime::ATTRIBUTE_SEASON => $season->localize(), Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormat->localize()], [Anime::ATTRIBUTE_SEASON => $season->localize(), 'media_format' => $mediaFormat->localize()],
); );
$user = User::factory()->withPermissions(CrudPermission::UPDATE->format(Anime::class))->createOne(); $user = User::factory()->withPermissions(CrudPermission::UPDATE->format(Anime::class))->createOne();
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
use App\Contracts\Http\Api\Field\SortableField; use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Http\Api\Filter\TrashedStatus; use App\Enums\Http\Api\Filter\TrashedStatus;
use App\Enums\Http\Api\Sort\Direction; use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ThemeType; use App\Enums\Models\Wiki\ThemeType;
use App\Http\Api\Criteria\Filter\TrashedCriteria; use App\Http\Api\Criteria\Filter\TrashedCriteria;
@@ -519,11 +519,11 @@ test('entries by version', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => AnimeThemeEntry::RELATION_ANIME, IncludeParser::param() => AnimeThemeEntry::RELATION_ANIME,
]; ];
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ThemeType; use App\Enums\Models\Wiki\ThemeType;
use App\Http\Api\Field\Field; use App\Http\Api\Field\Field;
@@ -130,11 +130,11 @@ test('sparse fieldsets', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => AnimeThemeEntry::RELATION_ANIME, IncludeParser::param() => AnimeThemeEntry::RELATION_ANIME,
]; ];
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
use App\Contracts\Http\Api\Field\SortableField; use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Http\Api\Filter\TrashedStatus; use App\Enums\Http\Api\Filter\TrashedStatus;
use App\Enums\Http\Api\Sort\Direction; use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ImageFacet;
use App\Enums\Models\Wiki\ThemeType; use App\Enums\Models\Wiki\ThemeType;
@@ -507,11 +507,11 @@ test('type filter', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => AnimeTheme::RELATION_ANIME, IncludeParser::param() => AnimeTheme::RELATION_ANIME,
]; ];
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ImageFacet;
use App\Enums\Models\Wiki\VideoOverlap; use App\Enums\Models\Wiki\VideoOverlap;
@@ -149,11 +149,11 @@ test('sparse fieldsets', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => AnimeTheme::RELATION_ANIME, IncludeParser::param() => AnimeTheme::RELATION_ANIME,
]; ];
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
use App\Contracts\Http\Api\Field\SortableField; use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Http\Api\Filter\TrashedStatus; use App\Enums\Http\Api\Filter\TrashedStatus;
use App\Enums\Http\Api\Sort\Direction; use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ImageFacet;
use App\Enums\Models\Wiki\ResourceSite; use App\Enums\Models\Wiki\ResourceSite;
@@ -468,11 +468,11 @@ test('themes by type', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Artist::RELATION_ANIME, IncludeParser::param() => Artist::RELATION_ANIME,
]; ];
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ImageFacet;
use App\Enums\Models\Wiki\ResourceSite; use App\Enums\Models\Wiki\ResourceSite;
@@ -216,11 +216,11 @@ test('themes by type', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Artist::RELATION_ANIME, IncludeParser::param() => Artist::RELATION_ANIME,
]; ];
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
use App\Contracts\Http\Api\Field\SortableField; use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Http\Api\Filter\TrashedStatus; use App\Enums\Http\Api\Filter\TrashedStatus;
use App\Enums\Http\Api\Sort\Direction; use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ResourceSite; use App\Enums\Models\Wiki\ResourceSite;
use App\Http\Api\Criteria\Filter\TrashedCriteria; use App\Http\Api\Criteria\Filter\TrashedCriteria;
@@ -402,11 +402,11 @@ test('site filter', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => ExternalResource::RELATION_ANIME, IncludeParser::param() => ExternalResource::RELATION_ANIME,
]; ];
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Http\Api\Field\Field; use App\Http\Api\Field\Field;
use App\Http\Api\Include\AllowedInclude; use App\Http\Api\Include\AllowedInclude;
@@ -121,11 +121,11 @@ test('sparse fieldsets', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => ExternalResource::RELATION_ANIME, IncludeParser::param() => ExternalResource::RELATION_ANIME,
]; ];
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
use App\Contracts\Http\Api\Field\SortableField; use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Http\Api\Filter\TrashedStatus; use App\Enums\Http\Api\Filter\TrashedStatus;
use App\Enums\Http\Api\Sort\Direction; use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ThemeType; use App\Enums\Models\Wiki\ThemeType;
use App\Http\Api\Criteria\Filter\TrashedCriteria; use App\Http\Api\Criteria\Filter\TrashedCriteria;
@@ -451,11 +451,11 @@ test('themes by type', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Group::RELATION_ANIME, IncludeParser::param() => Group::RELATION_ANIME,
]; ];
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ThemeType; use App\Enums\Models\Wiki\ThemeType;
use App\Http\Api\Field\Field; use App\Http\Api\Field\Field;
@@ -200,11 +200,11 @@ test('themes by type', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Group::RELATION_ANIME, IncludeParser::param() => Group::RELATION_ANIME,
]; ];
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
use App\Contracts\Http\Api\Field\SortableField; use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Http\Api\Filter\TrashedStatus; use App\Enums\Http\Api\Filter\TrashedStatus;
use App\Enums\Http\Api\Sort\Direction; use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ImageFacet;
use App\Http\Api\Criteria\Filter\TrashedCriteria; use App\Http\Api\Criteria\Filter\TrashedCriteria;
@@ -402,11 +402,11 @@ test('facet filter', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Image::RELATION_ANIME, IncludeParser::param() => Image::RELATION_ANIME,
]; ];
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Http\Api\Field\Field; use App\Http\Api\Field\Field;
use App\Http\Api\Include\AllowedInclude; use App\Http\Api\Include\AllowedInclude;
@@ -121,11 +121,11 @@ test('sparse fieldsets', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Image::RELATION_ANIME, IncludeParser::param() => Image::RELATION_ANIME,
]; ];
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
use App\Contracts\Http\Api\Field\SortableField; use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Http\Api\Filter\TrashedStatus; use App\Enums\Http\Api\Filter\TrashedStatus;
use App\Enums\Http\Api\Sort\Direction; use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Http\Api\Criteria\Filter\TrashedCriteria; use App\Http\Api\Criteria\Filter\TrashedCriteria;
use App\Http\Api\Criteria\Paging\Criteria; use App\Http\Api\Criteria\Paging\Criteria;
@@ -367,11 +367,11 @@ test('deleted at filter', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Series::RELATION_ANIME, IncludeParser::param() => Series::RELATION_ANIME,
]; ];
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Http\Api\Field\Field; use App\Http\Api\Field\Field;
use App\Http\Api\Include\AllowedInclude; use App\Http\Api\Include\AllowedInclude;
@@ -120,11 +120,11 @@ test('sparse fieldsets', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Series::RELATION_ANIME, IncludeParser::param() => Series::RELATION_ANIME,
]; ];
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
use App\Contracts\Http\Api\Field\SortableField; use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Http\Api\Filter\TrashedStatus; use App\Enums\Http\Api\Filter\TrashedStatus;
use App\Enums\Http\Api\Sort\Direction; use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ThemeType; use App\Enums\Models\Wiki\ThemeType;
use App\Http\Api\Criteria\Filter\TrashedCriteria; use App\Http\Api\Criteria\Filter\TrashedCriteria;
@@ -453,11 +453,11 @@ test('themes by type', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Song::RELATION_ANIME, IncludeParser::param() => Song::RELATION_ANIME,
]; ];
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ThemeType; use App\Enums\Models\Wiki\ThemeType;
use App\Http\Api\Field\Field; use App\Http\Api\Field\Field;
@@ -202,11 +202,11 @@ test('themes by type', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Song::RELATION_ANIME, IncludeParser::param() => Song::RELATION_ANIME,
]; ];
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
use App\Contracts\Http\Api\Field\SortableField; use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Http\Api\Filter\TrashedStatus; use App\Enums\Http\Api\Filter\TrashedStatus;
use App\Enums\Http\Api\Sort\Direction; use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ImageFacet;
use App\Enums\Models\Wiki\ResourceSite; use App\Enums\Models\Wiki\ResourceSite;
@@ -371,11 +371,11 @@ test('deleted at filter', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Studio::RELATION_ANIME, IncludeParser::param() => Studio::RELATION_ANIME,
]; ];
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ImageFacet;
use App\Enums\Models\Wiki\ResourceSite; use App\Enums\Models\Wiki\ResourceSite;
@@ -124,11 +124,11 @@ test('sparse fieldsets', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Studio::RELATION_ANIME, IncludeParser::param() => Studio::RELATION_ANIME,
]; ];
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
use App\Contracts\Http\Api\Field\SortableField; use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Http\Api\Filter\TrashedStatus; use App\Enums\Http\Api\Filter\TrashedStatus;
use App\Enums\Http\Api\Sort\Direction; use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ThemeType; use App\Enums\Models\Wiki\ThemeType;
use App\Enums\Models\Wiki\VideoOverlap; use App\Enums\Models\Wiki\VideoOverlap;
@@ -809,11 +809,11 @@ test('themes by type', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Video::RELATION_ANIME, IncludeParser::param() => Video::RELATION_ANIME,
]; ];
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeFormat;
use App\Enums\Models\Wiki\AnimeSeason; use App\Enums\Models\Wiki\AnimeSeason;
use App\Enums\Models\Wiki\ThemeType; use App\Enums\Models\Wiki\ThemeType;
use App\Http\Api\Field\Field; use App\Http\Api\Field\Field;
@@ -332,11 +332,11 @@ test('themes by type', function (): void {
}); });
test('anime by media format', function (): void { test('anime by media format', function (): void {
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases()); $mediaFormatFilter = Arr::random(AnimeFormat::cases());
$parameters = [ $parameters = [
FilterParser::param() => [ FilterParser::param() => [
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(), 'media_format' => $mediaFormatFilter->localize(),
], ],
IncludeParser::param() => Video::RELATION_ANIME, IncludeParser::param() => Video::RELATION_ANIME,
]; ];