Files
mtdb_movie/app/Actions/Titles/HasVideoRelation.php
maher 703f50a09d
Some checks failed
Build / run (push) Has been cancelled
first commit
2025-10-29 11:42:25 +01:00

57 lines
1.8 KiB
PHP
Executable File

<?php
namespace App\Actions\Titles;
use App\Models\Episode;
use App\Models\Video;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne;
trait HasVideoRelation
{
public function videos(): HasMany
{
return $this->hasMany(Video::class)->applySelectedSort();
}
public function primaryVideo(): HasOne
{
$preferFull = settings('streaming.prefer_full');
return $this->hasOne(Video::class)
->when($preferFull, function ($query) {
$query->where('category', 'full');
})
->select([
'id',
'title_id',
'name',
'category',
'episode_id',
'season_num',
'episode_num',
])
->when(
// is series or movie and not specific episode
fn() => static::class !== Episode::class && $preferFull,
function ($builder) {
return $builder->where(function ($builder) {
// video attached directly to movie or series
$builder
->where(
fn($builder) => $builder
->whereNull('season_num')
->whereNull('episode_num'),
)
// video attached to first episode of series
->orWhere(
fn($builder) => $builder
->where('season_num', 1)
->where('episode_num', 1),
);
});
},
)
->applySelectedSort();
}
}