Your IP : 216.73.216.79


Current Path : /var/www/html/dynaweb-cms-v1/app/Models/Traits/
Upload File :
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();
    }
}