'boolean', 'metadata' => 'array', 'created_at' => 'datetime', 'last_used_at' => 'datetime', 'expires_at' => 'datetime', ]; } public function gatewayUser() { return $this->belongsTo(GatewayUser::class, 'user_id', 'user_id'); } public function usageLogs() { return $this->hasMany(UsageLog::class, 'api_key_id', 'id'); } public function scopeActive($query) { return $query->where('is_active', true) ->where(function ($q) { $q->whereNull('expires_at') ->orWhere('expires_at', '>', now()); }); } public function scopeExpired($query) { return $query->whereNotNull('expires_at') ->where('expires_at', '<=', now()); } public function getMaskedKeyAttribute() { return 'gw-' . substr($this->id, 0, 8) . '...' . substr($this->id, -8); } public function getIsExpiredAttribute() { return $this->expires_at && $this->expires_at->isPast(); } }