*/ use HasFactory; protected $fillable = [ 'mailbox_hash', 'domain_hash', 'user_id', 'session_id', 'address', 'type', 'created_ip', 'last_accessed_ip', 'last_accessed_at', 'is_blocked', 'block_reason', 'blocked_at', 'expires_at', ]; protected function casts(): array { return [ 'is_blocked' => 'boolean', 'last_accessed_at' => 'datetime', 'blocked_at' => 'datetime', 'expires_at' => 'datetime', ]; } protected static function booted(): void { static::creating(function (Mailbox $mailbox) { if (empty($mailbox->mailbox_hash)) { $mailbox->mailbox_hash = bin2hex(random_bytes(32)); } // Record creation analytics \App\Jobs\TrackAnalytics::dispatch( eventType: 'mailbox_created', mailboxHash: $mailbox->mailbox_hash, domainHash: $mailbox->domain_hash, userId: $mailbox->user_id, userType: $mailbox->user_id ? 'authenticated' : 'guest', ipAddress: request()->ip(), userAgent: request()->userAgent() ); }); } public function user() { return $this->belongsTo(User::class); } public function emails() { return $this->hasMany(Email::class, 'recipient_email', 'address'); } public function domain() { return $this->belongsTo(Domain::class, 'domain_hash', 'domain_hash'); } }