'boolean', ]; protected $attributes = [ 'status' => 'active', 'is_primary' => false, ]; // ========================================================================= // 관계 정의 // ========================================================================= /** * 담당자 */ public function assignedUser(): BelongsTo { return $this->belongsTo(User::class, 'assigned_user_id'); } /** * 생성자 */ public function creator(): BelongsTo { return $this->belongsTo(User::class, 'created_by'); } /** * 수정자 */ public function updater(): BelongsTo { return $this->belongsTo(User::class, 'updated_by'); } // ========================================================================= // 헬퍼 메서드 // ========================================================================= /** * 마스킹된 계좌번호 조회 */ public function getMaskedAccountNumber(): string { $length = strlen($this->account_number); if ($length <= 4) { return $this->account_number; } $visibleEnd = substr($this->account_number, -4); $maskedPart = str_repeat('*', $length - 4); return $maskedPart.$visibleEnd; } /** * 활성 상태 여부 */ public function isActive(): bool { return $this->status === 'active'; } /** * 상태 토글 */ public function toggleStatus(): void { $this->status = $this->status === 'active' ? 'inactive' : 'active'; } /** * 대표계좌로 설정 */ public function setAsPrimary(): void { $this->is_primary = true; } }