--- /dev/null
+<?php
+
+namespace App\Jobs;
+
+use App\Invokables\GetPageTitleFromUrl;
+use App\TrackedLink;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+
+class GetTitleForLink implements ShouldQueue
+{
+ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+ /**
+ * @var TrackedLink
+ */
+ private TrackedLink $link;
+
+ /**
+ * Create a new job instance.
+ *
+ * @return void
+ */
+ public function __construct(TrackedLink $link)
+ {
+ $this->link = $link;
+ }
+
+ /**
+ * Execute the job.
+ *
+ * @return void
+ */
+ public function handle()
+ {
+
+ $title = (new GetPageTitleFromUrl)($this->link->target);
+
+ $this->link->update(['title' => $title]);
+ }
+}
namespace App;
+use App\Jobs\GetTitleForLink;
use Closure;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
*/
public static function shorten($url, PdfFile $file): TrackedLink
{
- /** @var TrackedLink $file */
+ /** @var TrackedLink $link */
$link = self::query()->firstOrCreate([
'target' => $url,
'file_id' => $file->id,
], [
'slug' => Str::random(8),
'clicks' => 0,
- 'title' => (new Invokables\GetPageTitleFromUrl)($url)
+ 'title' => $url
]);
+ dispatch(new GetTitleForLink($link));
return $link;
}