'FHD', 'episodedlurlinterpolated' => 'FHDi', 'episodedlurl4k' => 'UHD', 'downloadUHDi' => 'UHDi', ]; foreach ($downloadTypes as $inputField => $type) { $fieldName = $inputField.$index; if ($request->filled($fieldName)) { $download = Downloads::updateOrCreate([ 'episode_id' => $episode->id, 'type' => $type, ], [ 'url' => $request->input($fieldName), ]); // Dispatch Job to get File Size from CDN GetFileSizeFromCDN::dispatch($download->id); } } } /** * Persist validated download URLs for an episode. Sizes are written * directly from the CDN validation response, so no size job is dispatched. * * @param array $downloads */ public function createOrUpdateDownloadsFromArray(Episode $episode, array $downloads): void { foreach ($downloads as $type => $data) { if (empty($data['url'])) { continue; } Downloads::updateOrCreate([ 'episode_id' => $episode->id, 'type' => $type, ], [ 'url' => $data['url'], 'size' => $data['size'] ?? null, 'validated_at' => now(), ]); } } }