transcriptor-web/app/Http/Controllers/ClipController.php
2025-04-05 15:58:14 +02:00

61 lines
1.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Clip;
class ClipController extends Controller
{
/**
* Display a listing of videos.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function getClips(Request $request)
{
// Start query with a join on videos to enable ordering by external_date
$query = Clip::query()
->join('videos', 'clips.video_id', '=', 'videos.id')
->with(['video', 'video.transcriptions', 'video.channel'])
->select('clips.*') // Ensures only Clip attributes are returned
->orderBy('videos.external_date', 'desc');
// Filter by channel_ids
if ($request->has('channel_ids')) {
$query->whereHas('video', function ($q) use ($request) {
$q->whereIn('channel_id', $request->input('channel_ids'));
});
}
// Filter by specific video_id
if ($request->has('video_id')) {
$query->whereHas('video', function ($q) use ($request) {
$q->where('id', $request->input('video_id'));
});
}
// Filter by languages (via video.channel.language)
if ($request->has('languages')) {
$languages = $request->input('languages');
$query->whereHas('video.channel', function ($q) use ($languages) {
$q->whereIn('language', $languages);
});
}
// Filter by external_date range
if ($request->has('start_date') && $request->has('end_date')) {
$query->whereBetween('videos.external_date', [
$request->input('start_date'),
$request->input('end_date'),
]);
}
// Retrieve the results (consider using paginate() for large sets)
$clips = $query->get();
return response()->json($clips);
}
}