mirror of
https://github.com/AnimeThemes/animethemes-server.git
synced 2026-07-11 01:24:46 +02:00
clean: remove old anime synonyms & media format (#1206)
This commit is contained in:
@@ -8,9 +8,9 @@ use App\Actions\Models\Wiki\ExternalApiAction;
|
||||
use App\Contracts\Actions\Models\Wiki\BackfillImages;
|
||||
use App\Contracts\Actions\Models\Wiki\BackfillResources;
|
||||
use App\Contracts\Actions\Models\Wiki\BackfillSynonyms;
|
||||
use App\Enums\Models\Wiki\AnimeSynonymType;
|
||||
use App\Enums\Models\Wiki\ImageFacet;
|
||||
use App\Enums\Models\Wiki\ResourceSite;
|
||||
use App\Enums\Models\Wiki\SynonymType;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\ExternalResource;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
@@ -145,9 +145,9 @@ class AnilistAnimeExternalApiAction extends ExternalApiAction implements Backfil
|
||||
public function getSynonymsMapping(): array
|
||||
{
|
||||
return [
|
||||
AnimeSynonymType::ENGLISH->value => 'data.Media.title.english',
|
||||
AnimeSynonymType::NATIVE->value => 'data.Media.title.native',
|
||||
AnimeSynonymType::OTHER->value => 'data.Media.title.romaji',
|
||||
SynonymType::ENGLISH->value => 'data.Media.title.english',
|
||||
SynonymType::NATIVE->value => 'data.Media.title.native',
|
||||
SynonymType::OTHER->value => 'data.Media.title.romaji',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,10 +197,10 @@ class BackfillAudioAction extends BackfillAction
|
||||
$orderByNameQuery = $sortRelation->getRelationExistenceQuery($sortRelation->getQuery(), $builder, [Anime::ATTRIBUTE_NAME]);
|
||||
$orderBySeasonQuery = $sortRelation->getRelationExistenceQuery($sortRelation->getQuery(), $builder, [Anime::ATTRIBUTE_SEASON]);
|
||||
$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()))
|
||||
->orderBy($orderByMediaFormatQuery->toBase())
|
||||
->orderBy($orderByformatQuery->toBase())
|
||||
->orderBy($orderByYearQuery->toBase())
|
||||
->orderBy($orderBySeasonQuery->toBase())
|
||||
->orderBy($orderByNameQuery->toBase())
|
||||
|
||||
@@ -6,7 +6,6 @@ namespace App\Actions\Storage\Admin\Dump;
|
||||
|
||||
use App\Concerns\Repositories\Admin\ReconcilesDumpRepositories;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Artist;
|
||||
@@ -46,19 +45,16 @@ class DumpContentAction extends DumpAction
|
||||
Anime::TABLE,
|
||||
AnimeSeries::TABLE,
|
||||
AnimeStudio::TABLE,
|
||||
AnimeSynonym::TABLE,
|
||||
AnimeTheme::TABLE,
|
||||
AnimeThemeEntry::TABLE,
|
||||
AnimeThemeEntryVideo::TABLE,
|
||||
Artist::TABLE,
|
||||
ArtistMember::TABLE,
|
||||
'artist_song',
|
||||
Audio::TABLE,
|
||||
ExternalResource::TABLE,
|
||||
Group::TABLE,
|
||||
Image::TABLE,
|
||||
Imageable::TABLE,
|
||||
'memberships',
|
||||
Performance::TABLE,
|
||||
Resourceable::TABLE,
|
||||
Series::TABLE,
|
||||
|
||||
@@ -7,7 +7,6 @@ namespace App\Console\Commands\Models;
|
||||
use App\Console\Commands\BaseCommand;
|
||||
use App\Models\List\Playlist;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Artist;
|
||||
@@ -48,7 +47,6 @@ class ImportModelsCommand extends BaseCommand
|
||||
if ($this->option('flush')) {
|
||||
$this->scoutFlush(Playlist::class);
|
||||
$this->scoutFlush(Anime::class);
|
||||
$this->scoutFlush(AnimeSynonym::class);
|
||||
$this->scoutFlush(AnimeTheme::class);
|
||||
$this->scoutFlush(AnimeThemeEntry::class);
|
||||
$this->scoutFlush(Artist::class);
|
||||
@@ -61,7 +59,6 @@ class ImportModelsCommand extends BaseCommand
|
||||
|
||||
$this->scoutImport(Playlist::class);
|
||||
$this->scoutImport(Anime::class);
|
||||
$this->scoutImport(AnimeSynonym::class);
|
||||
$this->scoutImport(AnimeTheme::class);
|
||||
$this->scoutImport(AnimeThemeEntry::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\Enums\Models\Wiki\AnimeFormat;
|
||||
use App\Enums\Models\Wiki\AnimeMediaFormat;
|
||||
use App\Enums\Models\Wiki\AnimeSeason;
|
||||
use App\GraphQL\Filter\EnumFilter;
|
||||
use App\GraphQL\Filter\Filter;
|
||||
@@ -14,14 +13,11 @@ use App\GraphQL\Filter\IntFilter;
|
||||
use App\GraphQL\Filter\StringFilter;
|
||||
use App\GraphQL\Filter\TimestampFilter;
|
||||
use App\Models\Wiki\Anime;
|
||||
use GraphQL\Type\Definition\Deprecated;
|
||||
|
||||
enum AnimeFilterableColumns implements EnumFilterableColumns
|
||||
{
|
||||
case ID;
|
||||
case NAME;
|
||||
#[Deprecated('Use FORMAT instead')]
|
||||
case MEDIA_FORMAT;
|
||||
case FORMAT;
|
||||
case SEASON;
|
||||
case SYNOPSIS;
|
||||
@@ -34,7 +30,6 @@ enum AnimeFilterableColumns implements EnumFilterableColumns
|
||||
return match ($this) {
|
||||
self::ID => new IntFilter($this->name, Anime::ATTRIBUTE_ID),
|
||||
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::SEASON => new EnumFilter($this->name, AnimeSeason::class, Anime::ATTRIBUTE_SEASON),
|
||||
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;
|
||||
}
|
||||
@@ -4,11 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Events\Wiki\Synonym;
|
||||
|
||||
use App\Contracts\Events\UpdateAnimeSynonymsEvent;
|
||||
use App\Contracts\Events\UpdateRelatedIndicesEvent;
|
||||
use App\Events\Base\Wiki\WikiCreatedEvent;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Series;
|
||||
@@ -19,7 +17,7 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||
/**
|
||||
* @extends WikiCreatedEvent<Synonym>
|
||||
*/
|
||||
class SynonymCreated extends WikiCreatedEvent implements UpdateAnimeSynonymsEvent, UpdateRelatedIndicesEvent
|
||||
class SynonymCreated extends WikiCreatedEvent implements UpdateRelatedIndicesEvent
|
||||
{
|
||||
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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,12 +4,10 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Events\Wiki\Synonym;
|
||||
|
||||
use App\Contracts\Events\UpdateAnimeSynonymsEvent;
|
||||
use App\Contracts\Events\UpdateRelatedIndicesEvent;
|
||||
use App\Events\Base\Wiki\WikiDeletedEvent;
|
||||
use App\Filament\Resources\Wiki\SynonymResource as SynonymFilament;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Series;
|
||||
@@ -20,7 +18,7 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||
/**
|
||||
* @extends WikiDeletedEvent<Synonym>
|
||||
*/
|
||||
class SynonymDeleted extends WikiDeletedEvent implements UpdateAnimeSynonymsEvent, UpdateRelatedIndicesEvent
|
||||
class SynonymDeleted extends WikiDeletedEvent implements UpdateRelatedIndicesEvent
|
||||
{
|
||||
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'}();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,11 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Events\Wiki\Synonym;
|
||||
|
||||
use App\Contracts\Events\UpdateAnimeSynonymsEvent;
|
||||
use App\Contracts\Events\UpdateRelatedIndicesEvent;
|
||||
use App\Events\Base\Wiki\WikiRestoredEvent;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Series;
|
||||
@@ -19,7 +17,7 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||
/**
|
||||
* @extends WikiRestoredEvent<Synonym>
|
||||
*/
|
||||
class SynonymRestored extends WikiRestoredEvent implements UpdateAnimeSynonymsEvent, UpdateRelatedIndicesEvent
|
||||
class SynonymRestored extends WikiRestoredEvent implements UpdateRelatedIndicesEvent
|
||||
{
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,11 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Events\Wiki\Synonym;
|
||||
|
||||
use App\Contracts\Events\UpdateAnimeSynonymsEvent;
|
||||
use App\Contracts\Events\UpdateRelatedIndicesEvent;
|
||||
use App\Events\Base\Wiki\WikiUpdatedEvent;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Series;
|
||||
@@ -19,7 +17,7 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||
/**
|
||||
* @extends WikiUpdatedEvent<Synonym>
|
||||
*/
|
||||
class SynonymUpdated extends WikiUpdatedEvent implements UpdateAnimeSynonymsEvent, UpdateRelatedIndicesEvent
|
||||
class SynonymUpdated extends WikiUpdatedEvent implements UpdateRelatedIndicesEvent
|
||||
{
|
||||
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;
|
||||
|
||||
use App\Enums\Models\Wiki\AnimeMediaFormat;
|
||||
use App\Enums\Models\Wiki\AnimeFormat;
|
||||
use App\Enums\Models\Wiki\AnimeSeason;
|
||||
use App\Filament\Components\Fields\Select;
|
||||
use App\Filament\Components\Fields\TextInput;
|
||||
@@ -59,7 +59,7 @@ class AnimeForm
|
||||
Select::make(SubmissionAnime::ATTRIBUTE_FORMAT)
|
||||
->label(__('filament.fields.anime.format.name'))
|
||||
->helperText(__('filament.fields.anime.format.help'))
|
||||
->options(AnimeMediaFormat::class)
|
||||
->options(AnimeFormat::class)
|
||||
->required(),
|
||||
|
||||
MarkdownEditor::make(SubmissionAnime::ATTRIBUTE_SYNOPSIS)
|
||||
|
||||
@@ -17,7 +17,7 @@ class AnimeMediaFormatField extends EnumField implements CreatableField, Updatab
|
||||
{
|
||||
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
|
||||
|
||||
@@ -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),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,6 @@ use App\Http\Api\Include\AllowedInclude;
|
||||
use App\Http\Api\Schema\Auth\UserSchema;
|
||||
use App\Http\Api\Schema\EloquentSchema;
|
||||
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\ThemeSchema;
|
||||
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 SongSchema(), Anime::RELATION_SONG),
|
||||
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 ThemeSchema(), Anime::RELATION_THEMES),
|
||||
new AllowedInclude(new VideoSchema(), Anime::RELATION_VIDEOS),
|
||||
|
||||
@@ -11,7 +11,6 @@ use App\Http\Api\Field\Wiki\Series\SeriesNameField;
|
||||
use App\Http\Api\Field\Wiki\Series\SeriesSlugField;
|
||||
use App\Http\Api\Include\AllowedInclude;
|
||||
use App\Http\Api\Schema\EloquentSchema;
|
||||
use App\Http\Api\Schema\Wiki\Anime\AnimeSynonymSchema;
|
||||
use App\Http\Resources\Wiki\Resource\SeriesJsonResource;
|
||||
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 GroupSchema(), 'anime.animethemes.group'),
|
||||
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();
|
||||
}
|
||||
}
|
||||
@@ -5,10 +5,8 @@ declare(strict_types=1);
|
||||
namespace App\Models\User\Submission;
|
||||
|
||||
use App\Concerns\Models\SubmissionModel;
|
||||
use App\Enums\Models\Wiki\AnimeMediaFormat;
|
||||
use App\Models\Wiki\Anime;
|
||||
use Illuminate\Database\Eloquent\Attributes\Table;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
#[Table('submission_anime', 'id')]
|
||||
class SubmissionAnime extends Anime
|
||||
@@ -21,24 +19,11 @@ class SubmissionAnime extends Anime
|
||||
* @var list<string>
|
||||
*/
|
||||
protected $fillable = [
|
||||
Anime::ATTRIBUTE_FORMAT,
|
||||
Anime::ATTRIBUTE_NAME,
|
||||
Anime::ATTRIBUTE_SEASON,
|
||||
Anime::ATTRIBUTE_SLUG,
|
||||
Anime::ATTRIBUTE_SYNOPSIS,
|
||||
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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ use App\Contracts\Models\HasResources;
|
||||
use App\Contracts\Models\HasSynonyms;
|
||||
use App\Contracts\Models\SoftDeletable;
|
||||
use App\Enums\Models\Wiki\AnimeFormat;
|
||||
use App\Enums\Models\Wiki\AnimeMediaFormat;
|
||||
use App\Enums\Models\Wiki\AnimeSeason;
|
||||
use App\Events\Wiki\Anime\AnimeCreated;
|
||||
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\Models\BaseModel;
|
||||
use App\Models\List\External\ExternalEntry;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Observers\Wiki\AnimeObserver;
|
||||
use App\Pivots\Morph\Imageable;
|
||||
use App\Pivots\Morph\Resourceable;
|
||||
use App\Pivots\Wiki\AnimeSeries;
|
||||
@@ -34,7 +31,6 @@ use App\Scout\Typesense\Models\Wiki\AnimeTypesenseModel;
|
||||
use Database\Factories\Wiki\AnimeFactory;
|
||||
use Deprecated;
|
||||
use Elastic\ScoutDriverPlus\Searchable;
|
||||
use Illuminate\Database\Eloquent\Attributes\ObservedBy;
|
||||
use Illuminate\Database\Eloquent\Attributes\Table;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
@@ -54,7 +50,6 @@ use RuntimeException;
|
||||
* @property Collection<int, ExternalEntry> $externalentries
|
||||
* @property AnimeFormat|null $format
|
||||
* @property Collection<int, Image> $images
|
||||
* @property AnimeMediaFormat|null $media_format
|
||||
* @property string $name
|
||||
* @property Collection<int, ExternalResource> $resources
|
||||
* @property AnimeSeason|null $season
|
||||
@@ -67,7 +62,6 @@ use RuntimeException;
|
||||
*
|
||||
* @method static AnimeFactory factory(...$parameters)
|
||||
*/
|
||||
#[ObservedBy(AnimeObserver::class)]
|
||||
#[Table(Anime::TABLE, Anime::ATTRIBUTE_ID)]
|
||||
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 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_NAME = 'name';
|
||||
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_SYNOPSIS,
|
||||
Anime::ATTRIBUTE_YEAR,
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT,
|
||||
'media_format',
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -147,7 +140,6 @@ class Anime extends BaseModel implements Auditable, HasImages, HasResources, Has
|
||||
return [
|
||||
Anime::ATTRIBUTE_FORMAT => AnimeFormat::class,
|
||||
Anime::ATTRIBUTE_NAME => 'string',
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => AnimeMediaFormat::class,
|
||||
Anime::ATTRIBUTE_SEASON => AnimeSeason::class,
|
||||
Anime::ATTRIBUTE_SLUG => '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.')]
|
||||
public function animesynonyms(): HasMany
|
||||
public function animesynonyms(): MorphMany
|
||||
{
|
||||
return $this->hasMany(AnimeSynonym::class, AnimeSynonym::ATTRIBUTE_ANIME);
|
||||
return $this->synonyms();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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_SONG = 'animetheme.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_GROUP = 'animetheme.group';
|
||||
final public const string RELATION_TRACKS = 'tracks';
|
||||
|
||||
@@ -119,6 +119,14 @@ class Synonym extends BaseModel implements Auditable, SoftDeletable
|
||||
return $this->synonymable->getName();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return MorphTo<Model, $this>
|
||||
*/
|
||||
public function anime(): MorphTo
|
||||
{
|
||||
return $this->synonymable();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return MorphTo<Model, $this>
|
||||
*/
|
||||
|
||||
@@ -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 {}
|
||||
@@ -17,7 +17,6 @@ use App\Models\User\Submission\SubmissionSong;
|
||||
use App\Models\User\Submission\SubmissionStudio;
|
||||
use App\Models\User\Submission\SubmissionSynonym;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Artist;
|
||||
@@ -112,7 +111,6 @@ class AppServiceProvider extends ServiceProvider
|
||||
Relation::morphMap([
|
||||
'page' => Page::class,
|
||||
'anime' => Anime::class,
|
||||
'animesynonym' => AnimeSynonym::class,
|
||||
'animetheme' => AnimeTheme::class,
|
||||
'animethemeentry' => AnimeThemeEntry::class,
|
||||
'artist' => Artist::class,
|
||||
|
||||
@@ -53,9 +53,7 @@ use App\Enums\Models\List\ExternalProfileVisibility;
|
||||
use App\Enums\Models\List\PlaylistVisibility;
|
||||
use App\Enums\Models\User\NotificationType;
|
||||
use App\Enums\Models\Wiki\AnimeFormat;
|
||||
use App\Enums\Models\Wiki\AnimeMediaFormat;
|
||||
use App\Enums\Models\Wiki\AnimeSeason;
|
||||
use App\Enums\Models\Wiki\AnimeSynonymType;
|
||||
use App\Enums\Models\Wiki\ImageFacet;
|
||||
use App\Enums\Models\Wiki\ResourceSite;
|
||||
use App\Enums\Models\Wiki\SynonymType;
|
||||
@@ -131,10 +129,8 @@ class GraphQLServiceProvider extends ServiceProvider
|
||||
$typeRegistry->register(new PhpEnumType(ExternalProfileVisibility::class));
|
||||
$typeRegistry->register(new PhpEnumType(PlaylistVisibility::class));
|
||||
$typeRegistry->register(new PhpEnumType(NotificationType::class));
|
||||
$typeRegistry->register(new PhpEnumType(AnimeMediaFormat::class));
|
||||
$typeRegistry->register(new PhpEnumType(AnimeFormat::class));
|
||||
$typeRegistry->register(new PhpEnumType(AnimeSeason::class));
|
||||
$typeRegistry->register(new PhpEnumType(AnimeSynonymType::class));
|
||||
$typeRegistry->register(new PhpEnumType(ImageFacet::class));
|
||||
$typeRegistry->register(new PhpEnumType(ResourceSite::class));
|
||||
$typeRegistry->register(new PhpEnumType(SynonymType::class));
|
||||
|
||||
@@ -4,7 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
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\Scout\Elasticsearch\Api\Field\EnumField;
|
||||
use App\Scout\Elasticsearch\Api\Schema\Schema;
|
||||
@@ -13,6 +13,6 @@ class AnimeMediaFormatField extends EnumField
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -2,9 +2,9 @@
|
||||
|
||||
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\Schema\Schema;
|
||||
|
||||
@@ -12,6 +12,6 @@ class SynonymTextField extends StringField
|
||||
{
|
||||
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\AnimeYearField;
|
||||
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\ThemeSchema;
|
||||
|
||||
@@ -48,7 +47,7 @@ class AnimeSchema extends Schema
|
||||
new AllowedInclude(new SeriesSchema(), Anime::RELATION_SERIES),
|
||||
new AllowedInclude(new SongSchema(), Anime::RELATION_SONG),
|
||||
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 VideoSchema(), Anime::RELATION_VIDEOS),
|
||||
]);
|
||||
|
||||
+9
-10
@@ -2,23 +2,22 @@
|
||||
|
||||
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\Resources\Wiki\Anime\Resource\AnimeSynonymJsonResource;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Http\Resources\Wiki\Resource\SynonymJsonResource;
|
||||
use App\Models\Wiki\Synonym;
|
||||
use App\Scout\Elasticsearch\Api\Field\Base\IdField;
|
||||
use App\Scout\Elasticsearch\Api\Field\Field;
|
||||
use App\Scout\Elasticsearch\Api\Field\Wiki\Anime\Synonym\SynonymTextField;
|
||||
use App\Scout\Elasticsearch\Api\Field\Wiki\Anime\Synonym\SynonymTypeField;
|
||||
use App\Scout\Elasticsearch\Api\Field\Wiki\Synonym\SynonymTextField;
|
||||
use App\Scout\Elasticsearch\Api\Field\Wiki\Synonym\SynonymTypeField;
|
||||
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
|
||||
{
|
||||
return AnimeSynonymJsonResource::$wrap;
|
||||
return SynonymJsonResource::$wrap;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -27,7 +26,7 @@ class AnimeSynonymSchema extends Schema
|
||||
public function allowedIncludes(): array
|
||||
{
|
||||
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(
|
||||
parent::fields(),
|
||||
[
|
||||
new IdField($this, AnimeSynonym::ATTRIBUTE_ID),
|
||||
new IdField($this, Synonym::ATTRIBUTE_ID),
|
||||
new SynonymTextField($this),
|
||||
new SynonymTypeField($this),
|
||||
],
|
||||
@@ -12,7 +12,6 @@ use App\Http\Api\Schema\EloquentSchema;
|
||||
use App\Http\Api\Scope\ScopeParser;
|
||||
use App\Models\List\Playlist;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
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\Query\ElasticQuery;
|
||||
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\ThemeQuery;
|
||||
use App\Scout\Elasticsearch\Api\Query\Wiki\AnimeQuery;
|
||||
@@ -215,7 +213,6 @@ class Elasticsearch extends Search
|
||||
return match ($model) {
|
||||
Playlist::class => new PlaylistQuery(),
|
||||
AnimeThemeEntry::class => new EntryQuery(),
|
||||
AnimeSynonym::class => new AnimeSynonymQuery(),
|
||||
AnimeTheme::class => new ThemeQuery(),
|
||||
Anime::class => new AnimeQuery(),
|
||||
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,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,6 @@ declare(strict_types=1);
|
||||
use App\Models\List\ExternalProfile;
|
||||
use App\Models\List\Playlist;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Artist;
|
||||
@@ -502,23 +501,6 @@ return [
|
||||
'query_by' => 'name',
|
||||
],
|
||||
],
|
||||
AnimeSynonym::class => [
|
||||
'collection-schema' => [
|
||||
'fields' => [
|
||||
[
|
||||
'name' => 'id',
|
||||
'type' => 'string',
|
||||
],
|
||||
[
|
||||
'name' => 'text',
|
||||
'type' => 'string',
|
||||
],
|
||||
],
|
||||
],
|
||||
'search-parameters' => [
|
||||
'query_by' => 'text',
|
||||
],
|
||||
],
|
||||
Synonym::class => [
|
||||
'collection-schema' => [
|
||||
'fields' => [
|
||||
|
||||
@@ -47,7 +47,6 @@ class AnimeFactory extends Factory
|
||||
Anime::ATTRIBUTE_SYNOPSIS => fake()->text(),
|
||||
Anime::ATTRIBUTE_YEAR => fake()->numberBetween(1960, intval(date('Y')) + 1),
|
||||
Anime::ATTRIBUTE_FORMAT => $format->value,
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $format->value,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ return new class extends Migration
|
||||
$table->string('name');
|
||||
$table->integer('year')->nullable();
|
||||
$table->integer('season')->nullable();
|
||||
$table->integer('media_format')->nullable();
|
||||
$table->integer('format')->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\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Artist;
|
||||
@@ -82,7 +81,6 @@ class PermissionSeeder extends Seeder
|
||||
|
||||
// Wiki Resources
|
||||
$this->registerResource(Anime::class, $extendedCrudPermissions);
|
||||
$this->registerResource(AnimeSynonym::class, $extendedCrudPermissions);
|
||||
$this->registerResource(AnimeTheme::class, $extendedCrudPermissions);
|
||||
$this->registerResource(AnimeThemeEntry::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\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Artist;
|
||||
@@ -90,7 +89,6 @@ class AdminSeeder extends RoleSeeder
|
||||
|
||||
// Wiki Resources
|
||||
$this->configureResource($role, Anime::class, $extendedCrudPermissions);
|
||||
$this->configureResource($role, AnimeSynonym::class, $extendedCrudPermissions);
|
||||
$this->configureResource($role, AnimeTheme::class, $extendedCrudPermissions);
|
||||
$this->configureResource($role, AnimeThemeEntry::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\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Artist;
|
||||
@@ -73,7 +72,6 @@ class ContentModeratorRoleSeeder extends RoleSeeder
|
||||
|
||||
// Wiki Resources
|
||||
$this->configureResource($role, Anime::class, $extendedCrudPermissions);
|
||||
$this->configureResource($role, AnimeSynonym::class, $extendedCrudPermissions);
|
||||
$this->configureResource($role, AnimeTheme::class, $extendedCrudPermissions);
|
||||
$this->configureResource($role, AnimeThemeEntry::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\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Artist;
|
||||
@@ -60,7 +59,6 @@ class ContributorRoleSeeder extends RoleSeeder
|
||||
|
||||
// Wiki Resources
|
||||
$this->configureResource($role, Anime::class, [CrudPermission::VIEW]);
|
||||
$this->configureResource($role, AnimeSynonym::class, [CrudPermission::VIEW]);
|
||||
$this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW]);
|
||||
$this->configureResource($role, AnimeThemeEntry::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\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Artist;
|
||||
@@ -60,7 +59,6 @@ class DeveloperRoleSeeder extends RoleSeeder
|
||||
|
||||
// Wiki Resources
|
||||
$this->configureResource($role, Anime::class, [CrudPermission::VIEW]);
|
||||
$this->configureResource($role, AnimeSynonym::class, [CrudPermission::VIEW]);
|
||||
$this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW]);
|
||||
$this->configureResource($role, AnimeThemeEntry::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\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Artist;
|
||||
@@ -73,7 +72,6 @@ class EncoderRoleSeeder extends RoleSeeder
|
||||
|
||||
// Wiki Resources
|
||||
$this->configureResource($role, Anime::class, $extendedCrudPermissions);
|
||||
$this->configureResource($role, AnimeSynonym::class, $extendedCrudPermissions);
|
||||
$this->configureResource($role, AnimeTheme::class, $extendedCrudPermissions);
|
||||
$this->configureResource($role, AnimeThemeEntry::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\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Artist;
|
||||
@@ -60,7 +59,6 @@ class PanelViewerRoleSeeder extends RoleSeeder
|
||||
|
||||
// Wiki Resources
|
||||
$this->configureResource($role, Anime::class, [CrudPermission::VIEW]);
|
||||
$this->configureResource($role, AnimeSynonym::class, [CrudPermission::VIEW]);
|
||||
$this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW]);
|
||||
$this->configureResource($role, AnimeThemeEntry::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\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Artist;
|
||||
@@ -60,7 +59,6 @@ class PatronRoleSeeder extends RoleSeeder
|
||||
|
||||
// Wiki Resources
|
||||
$this->configureResource($role, Anime::class, [CrudPermission::VIEW]);
|
||||
$this->configureResource($role, AnimeSynonym::class, [CrudPermission::VIEW]);
|
||||
$this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW]);
|
||||
$this->configureResource($role, AnimeThemeEntry::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');
|
||||
}
|
||||
}
|
||||
@@ -10,12 +10,6 @@ type Anime @model(class: "App\\Models\\Wiki\\Anime") {
|
||||
"The primary title of the anime"
|
||||
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"
|
||||
format: AnimeFormat
|
||||
|
||||
@@ -126,8 +120,6 @@ extend type Query {
|
||||
search: String @search
|
||||
name: String @eq
|
||||
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_in: [AnimeFormat!] @in(key: "format")
|
||||
season: AnimeSeason @eq
|
||||
|
||||
@@ -21,8 +21,6 @@ type AnimeYearSeasons {
|
||||
"The animes of the season year filtered"
|
||||
anime(
|
||||
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_in: [AnimeFormat!] @in(key: "format")
|
||||
season: AnimeSeason @eq
|
||||
@@ -48,8 +46,6 @@ type AnimeYearSeason {
|
||||
"The animes of the season year filtered"
|
||||
anime(
|
||||
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_in: [AnimeFormat!] @in(key: "format")
|
||||
season: AnimeSeason @eq
|
||||
|
||||
@@ -21,8 +21,6 @@ type Series @model(class: "App\\Models\\Wiki\\Series") {
|
||||
|
||||
anime(
|
||||
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_in: [AnimeFormat!] @in(key: "format")
|
||||
season: AnimeSeason @eq
|
||||
|
||||
@@ -21,8 +21,6 @@ type Studio @model(class: "App\\Models\\Wiki\\Studio") {
|
||||
|
||||
anime(
|
||||
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_in: [AnimeFormat!] @in(key: "format")
|
||||
season: AnimeSeason @eq
|
||||
|
||||
@@ -9,9 +9,7 @@ use App\Enums\Models\List\ExternalProfileVisibility;
|
||||
use App\Enums\Models\List\PlaylistVisibility;
|
||||
use App\Enums\Models\User\SubmissionStatus;
|
||||
use App\Enums\Models\Wiki\AnimeFormat;
|
||||
use App\Enums\Models\Wiki\AnimeMediaFormat;
|
||||
use App\Enums\Models\Wiki\AnimeSeason;
|
||||
use App\Enums\Models\Wiki\AnimeSynonymType;
|
||||
use App\Enums\Models\Wiki\ImageFacet;
|
||||
use App\Enums\Models\Wiki\ResourceSite;
|
||||
use App\Enums\Models\Wiki\ThemeType;
|
||||
@@ -33,26 +31,12 @@ return [
|
||||
AnimeFormat::SPECIAL->name => 'Special',
|
||||
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::WINTER->name => 'Winter',
|
||||
AnimeSeason::SPRING->name => 'Spring',
|
||||
AnimeSeason::SUMMER->name => 'Summer',
|
||||
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::WATCHING->name => 'Watching',
|
||||
ExternalEntryStatus::COMPLETED->name => 'Completed',
|
||||
|
||||
@@ -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\ArtistMemberController;
|
||||
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\ThemeController;
|
||||
use App\Http\Controllers\Api\Wiki\Anime\YearController;
|
||||
@@ -263,7 +262,6 @@ apiResource('synonym', SynonymController::class);
|
||||
apiResource('video', VideoController::class);
|
||||
|
||||
// Anime Routes
|
||||
apiResource('animesynonym', AnimeSynonymController::class);
|
||||
apiResource('animetheme', ThemeController::class);
|
||||
Route::get('animeyear', [YearController::class, 'index'])->name('animeyear.index');
|
||||
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\Contracts\Http\Api\Field\SortableField;
|
||||
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\Http\Api\Criteria\Paging\Criteria;
|
||||
use App\Http\Api\Criteria\Paging\OffsetCriteria;
|
||||
@@ -283,11 +283,11 @@ test('updated at filter', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => AnimeSeries::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Enums\Models\Wiki\AnimeMediaFormat;
|
||||
use App\Enums\Models\Wiki\AnimeFormat;
|
||||
use App\Enums\Models\Wiki\AnimeSeason;
|
||||
use App\Http\Api\Field\Field;
|
||||
use App\Http\Api\Include\AllowedInclude;
|
||||
@@ -123,11 +123,11 @@ test('sparse fieldsets', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => AnimeSeries::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -5,7 +5,7 @@ declare(strict_types=1);
|
||||
use App\Concerns\Actions\Http\Api\SortsModels;
|
||||
use App\Contracts\Http\Api\Field\SortableField;
|
||||
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\Http\Api\Criteria\Paging\Criteria;
|
||||
use App\Http\Api\Criteria\Paging\OffsetCriteria;
|
||||
@@ -283,11 +283,11 @@ test('updated at filter', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => AnimeStudio::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Enums\Models\Wiki\AnimeMediaFormat;
|
||||
use App\Enums\Models\Wiki\AnimeFormat;
|
||||
use App\Enums\Models\Wiki\AnimeSeason;
|
||||
use App\Http\Api\Field\Field;
|
||||
use App\Http\Api\Include\AllowedInclude;
|
||||
@@ -123,11 +123,11 @@ test('sparse fieldsets', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => AnimeStudio::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
|
||||
use App\Contracts\Http\Api\Field\SortableField;
|
||||
use App\Enums\Http\Api\Filter\TrashedStatus;
|
||||
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\ImageFacet;
|
||||
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\Relations\BelongsToMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
||||
use Illuminate\Foundation\Testing\WithFaker;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\Date;
|
||||
@@ -201,11 +202,11 @@ test('season filter', function (): void {
|
||||
});
|
||||
|
||||
test('media format filter', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
];
|
||||
|
||||
@@ -480,7 +481,7 @@ test('synonyms by type', function (): void {
|
||||
->create();
|
||||
|
||||
$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);
|
||||
},
|
||||
])
|
||||
|
||||
@@ -28,6 +28,7 @@ use App\Models\Wiki\Video;
|
||||
use Illuminate\Database\Eloquent\Factories\Sequence;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
||||
use Illuminate\Foundation\Testing\WithFaker;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
@@ -146,7 +147,7 @@ test('synonyms by type', function (): void {
|
||||
->createOne();
|
||||
|
||||
$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);
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
declare(strict_types=1);
|
||||
|
||||
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\Models\Auth\User;
|
||||
use App\Models\Wiki\Anime;
|
||||
@@ -50,11 +50,11 @@ test('required fields', function (): void {
|
||||
|
||||
test('create', function (): void {
|
||||
$season = Arr::random(AnimeSeason::cases());
|
||||
$mediaFormat = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormat = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = array_merge(
|
||||
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();
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
declare(strict_types=1);
|
||||
|
||||
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\Models\Auth\User;
|
||||
use App\Models\Wiki\Anime;
|
||||
@@ -16,11 +16,11 @@ test('protected', function (): void {
|
||||
$anime = Anime::factory()->createOne();
|
||||
|
||||
$season = Arr::random(AnimeSeason::cases());
|
||||
$mediaFormat = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormat = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = array_merge(
|
||||
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));
|
||||
@@ -32,11 +32,11 @@ test('forbidden', function (): void {
|
||||
$anime = Anime::factory()->createOne();
|
||||
|
||||
$season = Arr::random(AnimeSeason::cases());
|
||||
$mediaFormat = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormat = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = array_merge(
|
||||
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();
|
||||
@@ -52,11 +52,11 @@ test('trashed', function (): void {
|
||||
$anime = Anime::factory()->trashed()->createOne();
|
||||
|
||||
$season = Arr::random(AnimeSeason::cases());
|
||||
$mediaFormat = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormat = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = array_merge(
|
||||
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();
|
||||
@@ -72,11 +72,11 @@ test('update', function (): void {
|
||||
$anime = Anime::factory()->createOne();
|
||||
|
||||
$season = Arr::random(AnimeSeason::cases());
|
||||
$mediaFormat = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormat = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = array_merge(
|
||||
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();
|
||||
|
||||
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
|
||||
use App\Contracts\Http\Api\Field\SortableField;
|
||||
use App\Enums\Http\Api\Filter\TrashedStatus;
|
||||
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\ThemeType;
|
||||
use App\Http\Api\Criteria\Filter\TrashedCriteria;
|
||||
@@ -519,11 +519,11 @@ test('entries by version', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => AnimeThemeEntry::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
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\ThemeType;
|
||||
use App\Http\Api\Field\Field;
|
||||
@@ -130,11 +130,11 @@ test('sparse fieldsets', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => AnimeThemeEntry::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
|
||||
use App\Contracts\Http\Api\Field\SortableField;
|
||||
use App\Enums\Http\Api\Filter\TrashedStatus;
|
||||
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\ImageFacet;
|
||||
use App\Enums\Models\Wiki\ThemeType;
|
||||
@@ -507,11 +507,11 @@ test('type filter', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => AnimeTheme::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
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\ImageFacet;
|
||||
use App\Enums\Models\Wiki\VideoOverlap;
|
||||
@@ -149,11 +149,11 @@ test('sparse fieldsets', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => AnimeTheme::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
|
||||
use App\Contracts\Http\Api\Field\SortableField;
|
||||
use App\Enums\Http\Api\Filter\TrashedStatus;
|
||||
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\ImageFacet;
|
||||
use App\Enums\Models\Wiki\ResourceSite;
|
||||
@@ -468,11 +468,11 @@ test('themes by type', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Artist::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
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\ImageFacet;
|
||||
use App\Enums\Models\Wiki\ResourceSite;
|
||||
@@ -216,11 +216,11 @@ test('themes by type', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Artist::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
|
||||
use App\Contracts\Http\Api\Field\SortableField;
|
||||
use App\Enums\Http\Api\Filter\TrashedStatus;
|
||||
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\ResourceSite;
|
||||
use App\Http\Api\Criteria\Filter\TrashedCriteria;
|
||||
@@ -402,11 +402,11 @@ test('site filter', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => ExternalResource::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Enums\Models\Wiki\AnimeMediaFormat;
|
||||
use App\Enums\Models\Wiki\AnimeFormat;
|
||||
use App\Enums\Models\Wiki\AnimeSeason;
|
||||
use App\Http\Api\Field\Field;
|
||||
use App\Http\Api\Include\AllowedInclude;
|
||||
@@ -121,11 +121,11 @@ test('sparse fieldsets', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => ExternalResource::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
|
||||
use App\Contracts\Http\Api\Field\SortableField;
|
||||
use App\Enums\Http\Api\Filter\TrashedStatus;
|
||||
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\ThemeType;
|
||||
use App\Http\Api\Criteria\Filter\TrashedCriteria;
|
||||
@@ -451,11 +451,11 @@ test('themes by type', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Group::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
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\ThemeType;
|
||||
use App\Http\Api\Field\Field;
|
||||
@@ -200,11 +200,11 @@ test('themes by type', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Group::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
|
||||
use App\Contracts\Http\Api\Field\SortableField;
|
||||
use App\Enums\Http\Api\Filter\TrashedStatus;
|
||||
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\ImageFacet;
|
||||
use App\Http\Api\Criteria\Filter\TrashedCriteria;
|
||||
@@ -402,11 +402,11 @@ test('facet filter', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Image::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Enums\Models\Wiki\AnimeMediaFormat;
|
||||
use App\Enums\Models\Wiki\AnimeFormat;
|
||||
use App\Enums\Models\Wiki\AnimeSeason;
|
||||
use App\Http\Api\Field\Field;
|
||||
use App\Http\Api\Include\AllowedInclude;
|
||||
@@ -121,11 +121,11 @@ test('sparse fieldsets', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Image::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
|
||||
use App\Contracts\Http\Api\Field\SortableField;
|
||||
use App\Enums\Http\Api\Filter\TrashedStatus;
|
||||
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\Http\Api\Criteria\Filter\TrashedCriteria;
|
||||
use App\Http\Api\Criteria\Paging\Criteria;
|
||||
@@ -367,11 +367,11 @@ test('deleted at filter', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Series::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Enums\Models\Wiki\AnimeMediaFormat;
|
||||
use App\Enums\Models\Wiki\AnimeFormat;
|
||||
use App\Enums\Models\Wiki\AnimeSeason;
|
||||
use App\Http\Api\Field\Field;
|
||||
use App\Http\Api\Include\AllowedInclude;
|
||||
@@ -120,11 +120,11 @@ test('sparse fieldsets', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Series::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
|
||||
use App\Contracts\Http\Api\Field\SortableField;
|
||||
use App\Enums\Http\Api\Filter\TrashedStatus;
|
||||
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\ThemeType;
|
||||
use App\Http\Api\Criteria\Filter\TrashedCriteria;
|
||||
@@ -453,11 +453,11 @@ test('themes by type', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Song::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
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\ThemeType;
|
||||
use App\Http\Api\Field\Field;
|
||||
@@ -202,11 +202,11 @@ test('themes by type', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Song::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
|
||||
use App\Contracts\Http\Api\Field\SortableField;
|
||||
use App\Enums\Http\Api\Filter\TrashedStatus;
|
||||
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\ImageFacet;
|
||||
use App\Enums\Models\Wiki\ResourceSite;
|
||||
@@ -371,11 +371,11 @@ test('deleted at filter', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Studio::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
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\ImageFacet;
|
||||
use App\Enums\Models\Wiki\ResourceSite;
|
||||
@@ -124,11 +124,11 @@ test('sparse fieldsets', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Studio::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -7,7 +7,7 @@ use App\Constants\ModelConstants;
|
||||
use App\Contracts\Http\Api\Field\SortableField;
|
||||
use App\Enums\Http\Api\Filter\TrashedStatus;
|
||||
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\ThemeType;
|
||||
use App\Enums\Models\Wiki\VideoOverlap;
|
||||
@@ -809,11 +809,11 @@ test('themes by type', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Video::RELATION_ANIME,
|
||||
];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
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\ThemeType;
|
||||
use App\Http\Api\Field\Field;
|
||||
@@ -332,11 +332,11 @@ test('themes by type', function (): void {
|
||||
});
|
||||
|
||||
test('anime by media format', function (): void {
|
||||
$mediaFormatFilter = Arr::random(AnimeMediaFormat::cases());
|
||||
$mediaFormatFilter = Arr::random(AnimeFormat::cases());
|
||||
|
||||
$parameters = [
|
||||
FilterParser::param() => [
|
||||
Anime::ATTRIBUTE_MEDIA_FORMAT => $mediaFormatFilter->localize(),
|
||||
'media_format' => $mediaFormatFilter->localize(),
|
||||
],
|
||||
IncludeParser::param() => Video::RELATION_ANIME,
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user