From 222b1d2d7b9bf126ea62ce6cd6e7c58c55bb2c71 Mon Sep 17 00:00:00 2001 From: marcoc Date: Thu, 10 Jul 2025 18:06:52 +0200 Subject: [PATCH] fix (be podcast): trying to retreive file and podcast data to update third party track references and celery tasks tables --- app/Console/Kernel.php | 23 ++++++++++ app/Http/Controllers/FileController.php | 7 ++- .../Controllers/PodcastEpisodeController.php | 45 ++++++++++--------- app/Models/CeleryTask.php | 4 ++ 4 files changed, 58 insertions(+), 21 deletions(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index fac92ad..ab5fb16 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -2,8 +2,11 @@ namespace App\Console; +use App\Models\CeleryTask; +use Celery\Celery; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; +use Illuminate\Support\Facades\Log; class Kernel extends ConsoleKernel { @@ -15,6 +18,26 @@ class Kernel extends ConsoleKernel // $schedule->command('inspire')->hourly(); $schedule->command('telescope:prune --hours=48')->daily(); $schedule->command('app:create-show-schedule')->everyMinute(); + + $schedule->call(function () { + $tasks = CeleryTask::where('status','=','PENDING')->with('aThirdPartyTrackReferences')->get(); + if ($tasks->count() > 0) { + foreach ($tasks as $task) { + $queue = 'celeryresults.'.$task; + $c = new Celery( + config('rabbitmq.host'), + config('rabbitmq.user'), + config('rabbitmq.password'), + config('rabbitmq.vhost'), + 'celeryresults', + $queue + ); + $message = $c->getAsyncResultMessage($task->name, $task->task_id, ['x-expires' => 900000]); + Log::debug($queue); + Log::debug($task->task_id.': '.json_encode($message)); + } + } + })->everySecond(); } /** diff --git a/app/Http/Controllers/FileController.php b/app/Http/Controllers/FileController.php index f349ac8..ba2e88a 100644 --- a/app/Http/Controllers/FileController.php +++ b/app/Http/Controllers/FileController.php @@ -10,6 +10,7 @@ use App\Models\TrackType; use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Storage; class FileController extends Controller @@ -57,7 +58,11 @@ class FileController extends Controller throw new \Exception("You must be logged in"); } //ToDo: check how to work in Legacy, getting user in this way is quite horrible - $user = User::where('type','=','P')->orderBy('id','ASC')->first(); + try { + $user = User::where('type','=','P')->orderBy('id','ASC')->first(); + } catch (\Exception $e) { + Log::error($e->getMessage()); + } } //Mime type list: https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types diff --git a/app/Http/Controllers/PodcastEpisodeController.php b/app/Http/Controllers/PodcastEpisodeController.php index 7f0a102..4e304b0 100644 --- a/app/Http/Controllers/PodcastEpisodeController.php +++ b/app/Http/Controllers/PodcastEpisodeController.php @@ -47,18 +47,19 @@ class PodcastEpisodeController extends Controller 'episode_description' => htmlentities($request->episode['description']), ])->save(); - $brokerTaskId = $this->downloadPodcastEpisode($request, $podcastEpisode); + $brokerTask = $this->downloadPodcastEpisode($request, $podcastEpisode); $ref = new ThirdPartyTrackReference(); $ref->fill([ 'service' => 'podcast', 'foreign_id' => $podcastEpisode->id, + 'file_id' => null ])->save(); $task = new CeleryTask(); $timezone = new DateTimeZone(getenv('APP_TIMEZONE')); $task->fill([ - 'task_id' => $brokerTaskId, + 'task_id' => $brokerTask->task_id, 'track_reference' => $ref->id, 'name' => 'podcast-download', 'dispatch_time' => new DateTime('now', $timezone), @@ -75,26 +76,30 @@ class PodcastEpisodeController extends Controller public function test(Request $request) { if(isset($request->file)) { - $file = (new FileController())->store($request); + try { + $file = (new FileController())->store($request); + } catch (\Exception $e) { + Log::error($e->getMessage()); + } $file = json_decode($file); - $episode = PodcastEpisode::where('file_id','=',null) - ->where('episode_title','=', $file->track_title)->firstOrFail(); - - $task = $episode->third_party_track_reference->celery_task; - $task->fill([ - 'status' => 'SUCCESS' - ])->save(); - - $ref = $episode->third_party_track_reference; - $timezone = new DateTimeZone(getenv('APP_TIMEZONE')); - $ref->fill([ - 'file_id' => $file->id, - 'upload_time' => new DateTime('now', $timezone), - 'status' => 'SUCCESS' - ])->save(); - - $episode->fill(['file_id' => $file->id])->save(); +// $episode = PodcastEpisode::where('file_id','=',null) +// ->where('episode_title','=', $file->track_title)->firstOrFail(); +// +// $task = $episode->third_party_track_reference->celery_task; +// $task->fill([ +// 'status' => 'SUCCESS' +// ])->save(); +// +// $ref = $episode->third_party_track_reference; +// $timezone = new DateTimeZone(getenv('APP_TIMEZONE')); +// $ref->fill([ +// 'file_id' => $file->id, +// 'upload_time' => new DateTime('now', $timezone), +// 'status' => 'SUCCESS' +// ])->save(); +// +// $episode->fill(['file_id' => $file->id])->save(); } diff --git a/app/Models/CeleryTask.php b/app/Models/CeleryTask.php index d7df2aa..92e8e04 100644 --- a/app/Models/CeleryTask.php +++ b/app/Models/CeleryTask.php @@ -20,4 +20,8 @@ class CeleryTask extends Model 'dispatch_time', 'status' ]; + + public function aThirdPartyTrackReferences() { + return $this->hasOne(ThirdPartyTrackReference::class, 'id', 'track_reference'); + } }