'integer', 'balance_pending_minor' => 'integer', 'status' => WalletStatus::class, 'daily_limit_minor' => 'integer', 'monthly_limit_minor' => 'integer', ]; protected $hidden = [ 'id', 'user_id', 'created_at', 'updated_at', 'deleted_at', ]; // ── Relationships ── public function user() { return $this->belongsTo(User::class); } public function debitEntries() { return $this->hasMany(TransactionEntry::class, 'wallet_id') ->where('entry_type', 'debit'); } public function creditEntries() { return $this->hasMany(TransactionEntry::class, 'wallet_id') ->where('entry_type', 'credit'); } // ── Helpers ── public function isActive(): bool { return $this->status === WalletStatus::ACTIVE; } public function canReceive(): bool { return $this->status->canReceive(); } public function canSend(): bool { return $this->status->canSend(); } /** * Format balance for API response. * e.g., "150,000.00 SYP" */ public function formattedBalance(): string { return self::formatMoney($this->balance_minor, $this->currency_code); } // ── Scopes ── public function scopeActive($query) { return $query->where('status', WalletStatus::ACTIVE); } }