HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/be.naniguide.com/app/Model/AdPixel.php
<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use App\Library\Traits\HasUid;

class AdPixel extends Model
{
    use HasFactory;
    use HasUid;

    const STATUS_ACTIVE = 'active';
    const STATUS_INACTIVE = 'inactive';
    const STATUS_ERROR = 'error';

    protected $table = 'ad_pixels';

    protected $fillable = ['uid', 'customer_id', 'platform', 'pixel_id', 'access_token', 'status', 'settings', 'last_verified_at'];

    protected $casts = ['settings' => 'json', 'access_token' => 'encrypted', 'last_verified_at' => 'datetime'];

    public function customer(): BelongsTo
    {
        return $this->belongsTo(Customer::class, 'customer_id');
    }

    public function conversions(): HasMany
    {
        return $this->hasMany(AdConversion::class, 'ad_pixel_id');
    }

    public function scopeOfCustomer($query, $customerId)
    {
        return $query->where('customer_id', $customerId);
    }

    public function scopeSearch($query, $keyword)
    {
        return $keyword ? $query->where('pixel_id', 'like', '%' . $keyword . '%') : $query;
    }

    public function getStatusBadgeAttribute(): string
    {
        return match ($this->status) {
            self::STATUS_ACTIVE => 'green',
            self::STATUS_INACTIVE => 'orange',
            self::STATUS_ERROR => 'red',
            default => 'blue',
        };
    }

    public function getPlatformLabelAttribute(): string
    {
        return AdPlatform::PLATFORM_LABELS[$this->platform] ?? ucfirst($this->platform);
    }

    protected static function newFactory()
    {
        return \Database\Factories\AdPixelFactory::new();
    }
}