Files
hstream/app/Models/Hentai.php
2025-09-22 13:34:52 +02:00

68 lines
1.5 KiB
PHP

<?php
namespace App\Models;
use Spatie\Sitemap\Contracts\Sitemapable;
use Spatie\Sitemap\Tags\Url;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Carbon;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Conner\Tagging\Taggable;
use Laravelista\Comments\Commentable;
class Hentai extends Model implements Sitemapable
{
use Commentable, Taggable;
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var string[]
*/
protected $fillable = [
'slug',
'description',
];
public function episodes()
{
return $this->hasMany(Episode::class, 'hentai_id');
}
public function title(): String
{
return $this->episodes->first()->title;
}
/**
* Has a Gallery.
*/
public function gallery()
{
return $this->hasMany(Gallery::class);
}
/**
* Check if hentai contains loli / shota tag
*/
public function isLoliOrShota(): bool
{
$problematicTags = ['Loli', 'Shota'];
return Cache::remember(
"episode:{$this->id}:has_problematic_tags",
now()->addMinutes(1440),
fn () => $this->episodes[0]->tags->pluck('name')->intersect($problematicTags)->isNotEmpty()
);
}
public function toSitemapTag(): Url | string | array
{
return Url::create(route('hentai.index', $this->slug))
->setLastModificationDate(Carbon::create($this->created_at));
}
}