diff --git a/app/Listeners/LinkCollector.php b/app/Listeners/LinkCollector.php index 81e97f1..0484f95 100644 --- a/app/Listeners/LinkCollector.php +++ b/app/Listeners/LinkCollector.php @@ -43,14 +43,14 @@ class LinkCollector // 無かったら取得 // TODO: ある程度古かったら再取得とかありだと思う $metadata = Metadata::find($url); - if ($metadata == null) { + if ($metadata == null || ($metadata->expires_at !== null && $metadata->expires_at < now())) { try { $resolved = $this->metadataResolver->resolve($url); - Metadata::create([ - 'url' => $url, + Metadata::updateOrCreate(['url' => $url], [ 'title' => $resolved->title, 'description' => $resolved->description, - 'image' => $resolved->image + 'image' => $resolved->image, + 'expires_at' => $resolved->expires_at ]); } catch (TransferException $e) { // 何らかの通信エラーによってメタデータの取得に失敗した時、とりあえずエラーログにURLを残す diff --git a/app/Metadata.php b/app/Metadata.php index 98badb6..dc44009 100644 --- a/app/Metadata.php +++ b/app/Metadata.php @@ -10,6 +10,8 @@ class Metadata extends Model protected $primaryKey = 'url'; protected $keyType = 'string'; - protected $fillable = ['url', 'title', 'description', 'image']; - protected $visible = ['url', 'title', 'description', 'image']; + protected $fillable = ['url', 'title', 'description', 'image', 'expires_at']; + protected $visible = ['url', 'title', 'description', 'image', 'expires_at']; + + protected $dates = ['created_at', 'updated_at', 'expires_at']; } diff --git a/app/MetadataResolver/Metadata.php b/app/MetadataResolver/Metadata.php index 070dc52..dbe8654 100644 --- a/app/MetadataResolver/Metadata.php +++ b/app/MetadataResolver/Metadata.php @@ -2,9 +2,13 @@ namespace App\MetadataResolver; +use Carbon\Carbon; + class Metadata { public $title = ''; public $description = ''; public $image = ''; + /** @var Carbon|null */ + public $expires_at = null; } diff --git a/database/migrations/2019_01_15_143800_add_expires_on_metadata.php b/database/migrations/2019_01_15_143800_add_expires_on_metadata.php new file mode 100644 index 0000000..46891e1 --- /dev/null +++ b/database/migrations/2019_01_15_143800_add_expires_on_metadata.php @@ -0,0 +1,32 @@ +timestamp('expires_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('metadata', function (Blueprint $table) { + $table->removeColumn('expires_at'); + }); + } +} diff --git a/routes/api.php b/routes/api.php index 73e72cd..eb38041 100644 --- a/routes/api.php +++ b/routes/api.php @@ -26,13 +26,13 @@ Route::get('/checkin/card', function (Request $request, MetadataResolver $resolv $url = $formatter->normalizeUrl($request->input('url')); $metadata = App\Metadata::find($url); - if ($metadata == null) { + if ($metadata == null || ($metadata->expires_at !== null && $metadata->expires_at < now())) { $resolved = $resolver->resolve($url); - $metadata = App\Metadata::create([ - 'url' => $url, + $metadata = App\Metadata::updateOrCreate(['url' => $url], [ 'title' => $resolved->title, 'description' => $resolved->description, - 'image' => $resolved->image + 'image' => $resolved->image, + 'expires_at' => $resolved->expires_at ]); }