feat:법인카드 서버 저장 기능 구현
- CorporateCard 모델 추가 - CorporateCardController API 추가 (CRUD) - 라우트 추가 (list, store, update, deactivate, destroy) - React 컴포넌트 API 연동 (fetch 호출) - 로딩 상태 UI 추가 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
182
app/Http/Controllers/Finance/CorporateCardController.php
Normal file
182
app/Http/Controllers/Finance/CorporateCardController.php
Normal file
@@ -0,0 +1,182 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Finance;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Finance\CorporateCard;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CorporateCardController extends Controller
|
||||
{
|
||||
/**
|
||||
* 카드 목록 조회
|
||||
*/
|
||||
public function index(Request $request): JsonResponse
|
||||
{
|
||||
$tenantId = session('selected_tenant_id', 1);
|
||||
|
||||
$cards = CorporateCard::forTenant($tenantId)
|
||||
->orderBy('created_at', 'desc')
|
||||
->get()
|
||||
->map(function ($card) {
|
||||
return [
|
||||
'id' => $card->id,
|
||||
'cardName' => $card->card_name,
|
||||
'cardCompany' => $card->card_company,
|
||||
'cardNumber' => $card->card_number,
|
||||
'cardType' => $card->card_type,
|
||||
'paymentDay' => $card->payment_day,
|
||||
'creditLimit' => (float) $card->credit_limit,
|
||||
'currentUsage' => (float) $card->current_usage,
|
||||
'cardHolderName' => $card->card_holder_name,
|
||||
'actualUser' => $card->actual_user,
|
||||
'expiryDate' => $card->expiry_date,
|
||||
'cvc' => $card->cvc,
|
||||
'status' => $card->status,
|
||||
'memo' => $card->memo,
|
||||
];
|
||||
});
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'data' => $cards,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 카드 등록
|
||||
*/
|
||||
public function store(Request $request): JsonResponse
|
||||
{
|
||||
$request->validate([
|
||||
'cardName' => 'required|string|max:100',
|
||||
'cardCompany' => 'required|string|max:50',
|
||||
'cardNumber' => 'required|string|max:30',
|
||||
'cardType' => 'required|in:credit,debit',
|
||||
'cardHolderName' => 'required|string|max:100',
|
||||
'actualUser' => 'required|string|max:100',
|
||||
]);
|
||||
|
||||
$tenantId = session('selected_tenant_id', 1);
|
||||
|
||||
$card = CorporateCard::create([
|
||||
'tenant_id' => $tenantId,
|
||||
'card_name' => $request->input('cardName'),
|
||||
'card_company' => $request->input('cardCompany'),
|
||||
'card_number' => $request->input('cardNumber'),
|
||||
'card_type' => $request->input('cardType'),
|
||||
'payment_day' => $request->input('paymentDay', 15),
|
||||
'credit_limit' => $request->input('creditLimit', 0),
|
||||
'current_usage' => 0,
|
||||
'card_holder_name' => $request->input('cardHolderName'),
|
||||
'actual_user' => $request->input('actualUser'),
|
||||
'expiry_date' => $request->input('expiryDate'),
|
||||
'cvc' => $request->input('cvc'),
|
||||
'status' => $request->input('status', 'active'),
|
||||
'memo' => $request->input('memo'),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => '카드가 등록되었습니다.',
|
||||
'data' => [
|
||||
'id' => $card->id,
|
||||
'cardName' => $card->card_name,
|
||||
'cardCompany' => $card->card_company,
|
||||
'cardNumber' => $card->card_number,
|
||||
'cardType' => $card->card_type,
|
||||
'paymentDay' => $card->payment_day,
|
||||
'creditLimit' => (float) $card->credit_limit,
|
||||
'currentUsage' => (float) $card->current_usage,
|
||||
'cardHolderName' => $card->card_holder_name,
|
||||
'actualUser' => $card->actual_user,
|
||||
'expiryDate' => $card->expiry_date,
|
||||
'cvc' => $card->cvc,
|
||||
'status' => $card->status,
|
||||
'memo' => $card->memo,
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 카드 수정
|
||||
*/
|
||||
public function update(Request $request, int $id): JsonResponse
|
||||
{
|
||||
$card = CorporateCard::findOrFail($id);
|
||||
|
||||
$request->validate([
|
||||
'cardName' => 'required|string|max:100',
|
||||
'cardCompany' => 'required|string|max:50',
|
||||
'cardNumber' => 'required|string|max:30',
|
||||
'cardType' => 'required|in:credit,debit',
|
||||
'cardHolderName' => 'required|string|max:100',
|
||||
'actualUser' => 'required|string|max:100',
|
||||
]);
|
||||
|
||||
$card->update([
|
||||
'card_name' => $request->input('cardName'),
|
||||
'card_company' => $request->input('cardCompany'),
|
||||
'card_number' => $request->input('cardNumber'),
|
||||
'card_type' => $request->input('cardType'),
|
||||
'payment_day' => $request->input('paymentDay', 15),
|
||||
'credit_limit' => $request->input('creditLimit', 0),
|
||||
'card_holder_name' => $request->input('cardHolderName'),
|
||||
'actual_user' => $request->input('actualUser'),
|
||||
'expiry_date' => $request->input('expiryDate'),
|
||||
'cvc' => $request->input('cvc'),
|
||||
'status' => $request->input('status', 'active'),
|
||||
'memo' => $request->input('memo'),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => '카드가 수정되었습니다.',
|
||||
'data' => [
|
||||
'id' => $card->id,
|
||||
'cardName' => $card->card_name,
|
||||
'cardCompany' => $card->card_company,
|
||||
'cardNumber' => $card->card_number,
|
||||
'cardType' => $card->card_type,
|
||||
'paymentDay' => $card->payment_day,
|
||||
'creditLimit' => (float) $card->credit_limit,
|
||||
'currentUsage' => (float) $card->current_usage,
|
||||
'cardHolderName' => $card->card_holder_name,
|
||||
'actualUser' => $card->actual_user,
|
||||
'expiryDate' => $card->expiry_date,
|
||||
'cvc' => $card->cvc,
|
||||
'status' => $card->status,
|
||||
'memo' => $card->memo,
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 카드 비활성화
|
||||
*/
|
||||
public function deactivate(int $id): JsonResponse
|
||||
{
|
||||
$card = CorporateCard::findOrFail($id);
|
||||
$card->update(['status' => 'inactive']);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => '카드가 비활성화되었습니다.',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 카드 영구삭제
|
||||
*/
|
||||
public function destroy(int $id): JsonResponse
|
||||
{
|
||||
$card = CorporateCard::findOrFail($id);
|
||||
$card->forceDelete();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => '카드가 영구 삭제되었습니다.',
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user