Files
sam-api/app/Models/Tenants/CorporateCard.php
김보곤 961ab47bac feat: [corporate-card] 법인카드 관리 API 7개 엔드포인트 구현
- CorporateCard 모델 (corporate_cards 테이블)
- CorporateCardService (CRUD + 토글 + 활성 목록)
- CorporateCardController (ApiResponse 패턴)
- Store/Update FormRequest 검증
- 라우트: /api/v1/corporate-cards (index, store, show, update, destroy, toggle, active)
2026-02-21 17:19:18 +09:00

111 lines
2.6 KiB
PHP

<?php
namespace App\Models\Tenants;
use App\Traits\BelongsToTenant;
use App\Traits\ModelTrait;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* 법인카드 모델
*
* @property int $id
* @property int $tenant_id
* @property string $card_name
* @property string $card_company
* @property string $card_number
* @property string $card_type
* @property int $payment_day
* @property float $credit_limit
* @property float $current_usage
* @property string $card_holder_name
* @property string $actual_user
* @property string|null $expiry_date
* @property string|null $cvc
* @property string $status
* @property string|null $memo
*/
class CorporateCard extends Model
{
use BelongsToTenant, ModelTrait, SoftDeletes;
protected $table = 'corporate_cards';
protected $fillable = [
'tenant_id',
'card_name',
'card_company',
'card_number',
'card_type',
'payment_day',
'credit_limit',
'current_usage',
'card_holder_name',
'actual_user',
'expiry_date',
'cvc',
'status',
'memo',
];
protected $hidden = [
'cvc',
'deleted_at',
];
protected $casts = [
'payment_day' => 'integer',
'credit_limit' => 'decimal:2',
'current_usage' => 'decimal:2',
];
protected $attributes = [
'status' => 'active',
'payment_day' => 15,
'credit_limit' => 0,
'current_usage' => 0,
];
// =========================================================================
// Scopes
// =========================================================================
public function scopeActive($query)
{
return $query->where('status', 'active');
}
public function scopeByType($query, string $cardType)
{
return $query->where('card_type', $cardType);
}
// =========================================================================
// 헬퍼 메서드
// =========================================================================
public function isActive(): bool
{
return $this->status === 'active';
}
public function toggleStatus(): void
{
$this->status = $this->status === 'active' ? 'inactive' : 'active';
}
/**
* 마스킹된 카드번호
*/
public function getMaskedCardNumber(): string
{
$number = preg_replace('/[^0-9]/', '', $this->card_number);
if (strlen($number) <= 4) {
return $this->card_number;
}
return '****-****-****-'.substr($number, -4);
}
}