Preview: EmailLog.php
Size: 2.66 KB
/var/www/multi-event-cfp.bitkit.dk/httpdocs/app/Models/EmailLog.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\AsArrayObject;
class EmailLog extends Model
{
use HasFactory;
protected $fillable = [
'event_id',
'email_type',
'reference_id',
'reference_table',
'recipient',
'subject',
'body',
'bcc',
'status',
'sent_at',
'failed_at',
'failure_reason',
'failure_details',
'retry_count',
'max_retries',
'sendgrid_message_id',
'smtp_id',
'sendgrid_response'
];
protected $casts = [
'bcc' => AsArrayObject::class,
'failure_details' => AsArrayObject::class,
'sendgrid_response' => AsArrayObject::class,
'sent_at' => 'datetime',
'failed_at' => 'datetime',
'created_at' => 'date:Y-m-d H:i:s',
'updated_at' => 'date:Y-m-d H:i:s'
];
// Relationships
public function event()
{
return $this->belongsTo(Event::class);
}
// Scopes
public function scopeSuccess($query)
{
return $query->where('status', 'success');
}
public function scopeProcessing($query)
{
return $query->where('status', 'processing');
}
public function scopeFailed($query)
{
return $query->where('status', 'failed');
}
public function scopeCanRetry($query)
{
return $query->where('status', 'failed')
->whereColumn('retry_count', '<', 'max_retries');
}
// Helper methods
public static function logSuccess($data)
{
return self::create(array_merge($data, [
'status' => 'success',
'sent_at' => now()
]));
}
public static function logFailed($data, $reason, $details = null)
{
return self::create(array_merge($data, [
'status' => 'failed',
'failed_at' => now(),
'failure_reason' => $reason,
'failure_details' => $details
]));
}
public static function logProcessing($data)
{
return self::create(array_merge($data, [
'status' => 'processing'
]));
}
public function canRetry()
{
return $this->status === 'failed' && $this->retry_count < $this->max_retries;
}
public function incrementRetry()
{
$this->increment('retry_count');
$this->update([
'status' => 'processing',
'sendgrid_message_id' => null,
'failed_at' => null,
'failure_reason' => null,
'failure_details' => null
]);
}
}
Directory Contents
Dirs: 0 × Files: 26