| Current Path : /var/www/html/dynaweb-cms-v1/app/Models/Traits/ |
| Current File : /var/www/html/dynaweb-cms-v1/app/Models/Traits/HasVisits.php |
<?php
namespace App\Models\Traits;
use App\Models\Backend\Visit;
use Illuminate\Database\Eloquent\Relations\MorphMany;
/**
* Trait untuk model yang menjadi VISITOR (pelawat).
*
* Contoh: BackendUser, FrontendUser — mereka 'melawat' page/content.
* Relasi: morphMany ke Visit sebagai 'visitor'.
*/
trait HasVisits
{
/**
* Senarai lawatan yang dibuat oleh visitor ni.
*/
public function visits(): MorphMany
{
return $this->morphMany(Visit::class, 'visitor');
}
/**
* Log lawatan baru — optional specify apa yang dilawat (visitable).
*/
public function logVisit(?Model $visitable = null): ?Visit
{
return Visit::log(visitor: $this, visitable: $visitable);
}
/**
* Kira jumlah lawatan.
*/
public function totalVisits(): int
{
return $this->visits()->count();
}
/**
* Kira IP unik yang melawat.
*/
public function uniqueIps(): int
{
return $this->visits()->distinct('ip')->count('ip');
}
/**
* Ambil history lawatan terkini.
*/
public function visitHistory(int $limit = 20)
{
return $this->visits()->latest()->limit($limit)->get();
}
}