2023-01-02 16:29:05 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Repositories;
|
|
|
|
|
|
|
|
use App\Contracts\MangaRepository;
|
|
|
|
use App\Enums\MangaStatusEnum;
|
2023-01-21 01:53:37 +00:00
|
|
|
use App\Enums\MangaTypeEnum;
|
2023-01-02 16:29:05 +00:00
|
|
|
use App\Manga;
|
2023-01-21 01:53:37 +00:00
|
|
|
use Illuminate\Contracts\Database\Query\Builder as EloquentBuilder;
|
2023-04-23 07:42:36 +05:00
|
|
|
use Illuminate\Database\Eloquent\Collection;
|
2023-04-23 04:56:55 +05:00
|
|
|
use Jikan\Helper\Constants;
|
2023-01-02 16:29:05 +00:00
|
|
|
use Laravel\Scout\Builder as ScoutBuilder;
|
|
|
|
|
2023-01-24 23:30:47 +00:00
|
|
|
final class DefaultMangaRepository extends DatabaseRepository implements MangaRepository
|
2023-01-02 16:29:05 +00:00
|
|
|
{
|
|
|
|
public function __construct()
|
|
|
|
{
|
|
|
|
parent::__construct(fn () => Manga::query(), fn ($x, $y) => Manga::search($x, $y));
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getTopPublishingItems(): EloquentBuilder|ScoutBuilder
|
|
|
|
{
|
2023-07-21 22:02:58 +05:00
|
|
|
return $this
|
|
|
|
->orderByRank()
|
2023-01-02 16:29:05 +00:00
|
|
|
->where("publishing", true);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getTopUpcomingItems(): EloquentBuilder|ScoutBuilder
|
|
|
|
{
|
2023-07-21 22:02:58 +05:00
|
|
|
return $this
|
|
|
|
->orderByRank()
|
2023-01-02 16:29:05 +00:00
|
|
|
->where("status", MangaStatusEnum::upcoming()->label);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function orderByPopularity(): EloquentBuilder|ScoutBuilder
|
|
|
|
{
|
|
|
|
return $this->queryable()->orderBy("members", "desc");
|
|
|
|
}
|
|
|
|
|
|
|
|
public function orderByFavoriteCount(): EloquentBuilder|ScoutBuilder
|
|
|
|
{
|
|
|
|
return $this->queryable()->orderBy("favorites", "desc");
|
|
|
|
}
|
|
|
|
|
|
|
|
public function orderByRank(): EloquentBuilder|ScoutBuilder
|
|
|
|
{
|
|
|
|
return $this->queryable()
|
|
|
|
->whereNotNull("rank")
|
|
|
|
->where("rank", ">", 0)
|
|
|
|
->orderBy("rank");
|
|
|
|
}
|
2023-01-21 01:53:37 +00:00
|
|
|
|
|
|
|
public function exceptItemsWithAdultRating(): EloquentBuilder|ScoutBuilder
|
|
|
|
{
|
2023-05-01 16:52:52 +01:00
|
|
|
/** @noinspection PhpUndefinedMethodInspection */
|
|
|
|
return $this->queryable()->exceptItemsWithAdultRating();
|
2023-01-21 01:53:37 +00:00
|
|
|
}
|
2023-01-02 16:29:05 +00:00
|
|
|
}
|