File: /home/xedaptot/ai.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();
}
}