feat: 2.3 카드/계좌 관리 API 구현

- cards, bank_accounts 테이블 마이그레이션
- Card, BankAccount 모델 (카드번호 암호화)
- CardService, BankAccountService
- CardController, BankAccountController + FormRequest 4개
- API 엔드포인트 15개 (카드 7개, 계좌 8개)
- Swagger 문서 (CardApi.php, BankAccountApi.php)
This commit is contained in:
2025-12-17 21:02:20 +09:00
parent a1980adb20
commit e1b0c99d5d
15 changed files with 1916 additions and 0 deletions

View File

@@ -49,6 +49,8 @@
use App\Http\Controllers\Api\V1\RegisterController;
use App\Http\Controllers\Api\V1\RoleController;
use App\Http\Controllers\Api\V1\RolePermissionController;
use App\Http\Controllers\Api\V1\BankAccountController;
use App\Http\Controllers\Api\V1\CardController;
use App\Http\Controllers\Api\V1\SiteController;
use App\Http\Controllers\Api\V1\TenantController;
use App\Http\Controllers\Api\V1\TenantFieldSettingController;
@@ -269,6 +271,29 @@
Route::delete('/{id}', [SiteController::class, 'destroy'])->whereNumber('id')->name('v1.sites.destroy');
});
// Card API (카드 관리)
Route::prefix('cards')->group(function () {
Route::get('', [CardController::class, 'index'])->name('v1.cards.index');
Route::post('', [CardController::class, 'store'])->name('v1.cards.store');
Route::get('/active', [CardController::class, 'active'])->name('v1.cards.active');
Route::get('/{id}', [CardController::class, 'show'])->whereNumber('id')->name('v1.cards.show');
Route::put('/{id}', [CardController::class, 'update'])->whereNumber('id')->name('v1.cards.update');
Route::delete('/{id}', [CardController::class, 'destroy'])->whereNumber('id')->name('v1.cards.destroy');
Route::patch('/{id}/toggle', [CardController::class, 'toggle'])->whereNumber('id')->name('v1.cards.toggle');
});
// BankAccount API (계좌 관리)
Route::prefix('bank-accounts')->group(function () {
Route::get('', [BankAccountController::class, 'index'])->name('v1.bank-accounts.index');
Route::post('', [BankAccountController::class, 'store'])->name('v1.bank-accounts.store');
Route::get('/active', [BankAccountController::class, 'active'])->name('v1.bank-accounts.active');
Route::get('/{id}', [BankAccountController::class, 'show'])->whereNumber('id')->name('v1.bank-accounts.show');
Route::put('/{id}', [BankAccountController::class, 'update'])->whereNumber('id')->name('v1.bank-accounts.update');
Route::delete('/{id}', [BankAccountController::class, 'destroy'])->whereNumber('id')->name('v1.bank-accounts.destroy');
Route::patch('/{id}/toggle', [BankAccountController::class, 'toggle'])->whereNumber('id')->name('v1.bank-accounts.toggle');
Route::patch('/{id}/set-primary', [BankAccountController::class, 'setPrimary'])->whereNumber('id')->name('v1.bank-accounts.set-primary');
});
// Permission API
Route::prefix('permissions')->group(function () {
Route::get('departments/{dept_id}/menu-matrix', [PermissionController::class, 'deptMenuMatrix'])->name('v1.permissions.deptMenuMatrix'); // 부서별 권한 메트릭스