use App\Models\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
class EpisodeController extends Controller
{
if (isset($validatedData['add'])) {
$crew = $episode->crew()
+ ->where('channel_id', '=', $channel->id)
->where('user_id', '=', $validatedData['add'])
->where('role', '=', $validatedData['role'])
->first();
'before' => 'nullable|date',
'event' => 'nullable|array',
'event.*' => 'numeric',
+ 'limit' => 'numeric',
+ 'offset' => 'numeric',
+ 'reverse' => 'boolean',
]);
- $after = isset($validatedData['after']) ? $validatedData['after'] : Carbon::now()->sub(2, 'hours');
$before = isset($validatedData['before']) ? $validatedData['before'] : Carbon::now()->add(1, 'days');
+ $limit = isset($validatedData['limit']) ? $validatedData['limit'] : 100;
+ $reverse = isset($validatedData['reverse']) ? $validatedData['reverse'] : false;
$episodes = Episode::with(['channels', 'event', 'players', 'players.user'])
->select('episodes.*')
->join('events', 'episodes.event_id', '=', 'events.id')
->where('episodes.confirmed', '=', true)
- ->where('episodes.start', '>=', $after)
- ->where('episodes.start', '<=', $before)
->where('events.visible', '=', true)
- ->orderBy('episodes.start')
+ ->orderBy('episodes.start', $reverse ? 'DESC' : 'ASC')
->limit(1000);
+ if (isset($validatedData['after'])) {
+ $episodes = $episodes->where(
+ DB::raw('DATE_ADD(`episodes`.`start`, INTERVAL COALESCE(`episodes`.`estimate`, 0) SECOND)'),
+ '>=', $validatedData['after']);
+ }
+ if (isset($validatedData['before'])) {
+ $episodes = $episodes->where('episodes.start', '<=', $validatedData['before']);
+ }
if (!empty($validatedData['event'])) {
$episodes = $episodes->whereIn('episodes.event_id', $validatedData['event']);
}
'crew.user',
]);
}
+ $episodes->limit($limit);
return $episodes->get()->toJson();
}