first commit
Some checks failed
Build / run (push) Has been cancelled

This commit is contained in:
maher
2025-10-29 11:42:25 +01:00
commit 703f50a09d
4595 changed files with 385164 additions and 0 deletions

View File

@@ -0,0 +1,104 @@
<?php
namespace App\Http\Controllers;
use App\Loaders\EpisodeLoader;
use App\Models\Episode;
use App\Models\Title;
use Common\Core\BaseController;
use Illuminate\Database\Query\Builder;
use Illuminate\Validation\Rule;
class EpisodeController extends BaseController
{
public function show()
{
$data = (new EpisodeLoader())->loadData(request('loader'));
$this->authorize('show', $data['title']);
return $this->renderClientOrApi([
'data' => $data,
'pageName' => 'episode-page',
]);
}
public function update(Title $title, int $seasonNumber, int $episodeNumber)
{
$this->authorize('update', $title);
$episode = $title
->episodes()
->where('season_number', $seasonNumber)
->where('episode_number', $episodeNumber)
->firstOrFail();
$this->validate(request(), [
'episode_number' => [
'integer',
Rule::unique('episodes')
->ignore($episode->episode_number, 'episode_number')
->where(function (Builder $query) use ($episode) {
$query
->where('season_number', $episode->season_number)
->where('title_id', $episode->title_id);
}),
],
]);
$episode->fill(request()->all())->save();
return $this->success(['episode' => $episode]);
}
public function store(Title $title, int $seasonNumber)
{
$this->authorize('update', $title);
$season = $title->findSeason($seasonNumber)->loadCount('episodes');
$this->validate(request(), [
'episode_number' => [
'integer',
Rule::unique('episodes')->where(function (Builder $query) use (
$season,
) {
$query
->where('season_number', $season->number)
->where('title_id', $season->title_id);
}),
],
]);
$epNum = request('episode_number');
if (!$epNum) {
$epNum =
$season
->episodes()
->orderBy('episode_number', 'desc')
->value('episode_number') + 1;
}
$episode = Episode::create(
array_merge(request()->all(), [
'season_number' => $season->number,
'episode_number' => $epNum,
'season_id' => $season->id,
'title_id' => $season->title_id,
]),
);
return $this->success(['episode' => $episode]);
}
public function destroy(int $id)
{
$this->authorize('destroy', Title::class);
$episode = Episode::findOrFail($id);
$episode->credits()->detach();
$episode->delete();
return $this->success();
}
}