chore: [env] .env.example 업데이트 및 .gitignore 정리

- .env.example을 SAM 프로젝트 실제 키 구조로 업데이트
- .gitignore에 !.env.example 예외 추가
- GCS_* 중복 키 제거, Gemini/Claude/Vertex 키 섹션 추가
This commit is contained in:
김보곤
2026-02-23 10:17:37 +09:00
parent 3ae3a1dcda
commit 240199af9d
51 changed files with 623 additions and 2726 deletions

View File

@@ -1,73 +0,0 @@
<?php
namespace App\Http\Controllers\Api\V1;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Http\Requests\Barobill\BankServiceUrlRequest;
use App\Http\Requests\Barobill\BarobillLoginRequest;
use App\Http\Requests\Barobill\BarobillSignupRequest;
use App\Services\Barobill\BarobillSoapService;
class BarobillController extends Controller
{
public function __construct(
private BarobillSoapService $barobillSoapService
) {}
public function login(BarobillLoginRequest $request)
{
return ApiResponse::handle(
fn () => $this->barobillSoapService->registerLogin($request->validated()),
__('message.barobill.login_success')
);
}
public function signup(BarobillSignupRequest $request)
{
return ApiResponse::handle(
fn () => $this->barobillSoapService->registerSignup($request->validated()),
__('message.barobill.signup_success')
);
}
public function bankServiceUrl(BankServiceUrlRequest $request)
{
return ApiResponse::handle(
fn () => $this->barobillSoapService->getBankServiceRedirectUrl($request->validated()),
__('message.fetched')
);
}
public function status()
{
return ApiResponse::handle(
fn () => $this->barobillSoapService->getIntegrationStatus(),
__('message.fetched')
);
}
public function accountLinkUrl()
{
return ApiResponse::handle(
fn () => $this->barobillSoapService->getAccountLinkRedirectUrl(),
__('message.fetched')
);
}
public function cardLinkUrl()
{
return ApiResponse::handle(
fn () => $this->barobillSoapService->getCardLinkRedirectUrl(),
__('message.fetched')
);
}
public function certificateUrl()
{
return ApiResponse::handle(
fn () => $this->barobillSoapService->getCertificateRedirectUrl(),
__('message.fetched')
);
}
}

View File

@@ -1,97 +0,0 @@
<?php
namespace App\Http\Controllers\Api\V1;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Http\Requests\V1\CorporateCard\StoreCorporateCardRequest;
use App\Http\Requests\V1\CorporateCard\UpdateCorporateCardRequest;
use App\Services\CorporateCardService;
use Illuminate\Http\Request;
class CorporateCardController extends Controller
{
public function __construct(
private readonly CorporateCardService $service
) {}
/**
* 법인카드 목록
*/
public function index(Request $request)
{
$params = $request->only([
'search',
'status',
'card_type',
'sort_by',
'sort_dir',
'per_page',
'page',
]);
$cards = $this->service->index($params);
return ApiResponse::success($cards, __('message.fetched'));
}
/**
* 법인카드 등록
*/
public function store(StoreCorporateCardRequest $request)
{
$card = $this->service->store($request->validated());
return ApiResponse::success($card, __('message.created'), [], 201);
}
/**
* 법인카드 상세
*/
public function show(int $id)
{
$card = $this->service->show($id);
return ApiResponse::success($card, __('message.fetched'));
}
/**
* 법인카드 수정
*/
public function update(int $id, UpdateCorporateCardRequest $request)
{
$card = $this->service->update($id, $request->validated());
return ApiResponse::success($card, __('message.updated'));
}
/**
* 법인카드 삭제
*/
public function destroy(int $id)
{
$this->service->destroy($id);
return ApiResponse::success(null, __('message.deleted'));
}
/**
* 법인카드 상태 토글 (사용/정지)
*/
public function toggle(int $id)
{
$card = $this->service->toggleStatus($id);
return ApiResponse::success($card, __('message.updated'));
}
/**
* 활성 법인카드 목록 (셀렉트박스용)
*/
public function active()
{
$cards = $this->service->getActiveCards();
return ApiResponse::success($cards, __('message.fetched'));
}
}

View File

@@ -4,30 +4,28 @@
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Http\Requests\Authz\RoleIndexRequest;
use App\Http\Requests\Authz\RoleStoreRequest;
use App\Http\Requests\Authz\RoleUpdateRequest;
use App\Services\Authz\RoleService;
use Illuminate\Http\Request;
class RoleController extends Controller
{
/**
* 역할 목록 조회
*/
public function index(RoleIndexRequest $request)
public function index(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return RoleService::index($request->validated());
return RoleService::index($request->all());
}, __('message.fetched'));
}
/**
* 역할 생성
*/
public function store(RoleStoreRequest $request)
public function store(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return RoleService::store($request->validated());
return RoleService::store($request->all());
}, __('message.created'));
}
@@ -44,10 +42,10 @@ public function show($id)
/**
* 역할 수정
*/
public function update(RoleUpdateRequest $request, $id)
public function update(Request $request, $id)
{
return ApiResponse::handle(function () use ($request, $id) {
return RoleService::update((int) $id, $request->validated());
return RoleService::update((int) $id, $request->all());
}, __('message.updated'));
}

View File

@@ -4,38 +4,37 @@
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Http\Requests\Authz\RolePermissionGrantRequest;
use App\Http\Requests\Authz\RolePermissionToggleRequest;
use App\Services\Authz\RolePermissionService;
use Illuminate\Http\Request;
class RolePermissionController extends Controller
{
public function index($id)
public function index($id, Request $request)
{
return ApiResponse::handle(function () use ($id) {
return RolePermissionService::list((int) $id);
}, __('message.fetched'));
}, '역할 퍼미션 목록 조회');
}
public function grant($id, RolePermissionGrantRequest $request)
public function grant($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return RolePermissionService::grant((int) $id, $request->validated());
}, __('message.updated'));
return RolePermissionService::grant((int) $id, $request->all());
}, '역할 퍼미션 부여');
}
public function revoke($id, RolePermissionGrantRequest $request)
public function revoke($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return RolePermissionService::revoke((int) $id, $request->validated());
}, __('message.updated'));
return RolePermissionService::revoke((int) $id, $request->all());
}, '역할 퍼미션 회수');
}
public function sync($id, RolePermissionGrantRequest $request)
public function sync($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return RolePermissionService::sync((int) $id, $request->validated());
}, __('message.updated'));
return RolePermissionService::sync((int) $id, $request->all());
}, '역할 퍼미션 동기화');
}
/**
@@ -61,10 +60,10 @@ public function matrix($id)
/**
* 특정 메뉴의 특정 권한 토글
*/
public function toggle($id, RolePermissionToggleRequest $request)
public function toggle($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return RolePermissionService::toggle((int) $id, $request->validated());
return RolePermissionService::toggle((int) $id, $request->all());
}, __('message.updated'));
}

View File

@@ -6,7 +6,6 @@
use App\Http\Controllers\Controller;
use App\Http\Requests\TaxInvoice\CancelTaxInvoiceRequest;
use App\Http\Requests\TaxInvoice\CreateTaxInvoiceRequest;
use App\Http\Requests\TaxInvoice\SaveSupplierSettingsRequest;
use App\Http\Requests\TaxInvoice\TaxInvoiceListRequest;
use App\Http\Requests\TaxInvoice\TaxInvoiceSummaryRequest;
use App\Http\Requests\TaxInvoice\UpdateTaxInvoiceRequest;
@@ -24,9 +23,11 @@ public function __construct(
*/
public function index(TaxInvoiceListRequest $request)
{
$taxInvoices = $this->taxInvoiceService->list($request->validated());
return ApiResponse::handle(
fn () => $this->taxInvoiceService->list($request->validated()),
__('message.fetched')
data: $taxInvoices,
message: __('message.fetched')
);
}
@@ -35,9 +36,11 @@ public function index(TaxInvoiceListRequest $request)
*/
public function show(int $id)
{
$taxInvoice = $this->taxInvoiceService->show($id);
return ApiResponse::handle(
fn () => $this->taxInvoiceService->show($id),
__('message.fetched')
data: $taxInvoice,
message: __('message.fetched')
);
}
@@ -46,9 +49,12 @@ public function show(int $id)
*/
public function store(CreateTaxInvoiceRequest $request)
{
$taxInvoice = $this->taxInvoiceService->create($request->validated());
return ApiResponse::handle(
fn () => $this->taxInvoiceService->create($request->validated()),
__('message.created')
data: $taxInvoice,
message: __('message.created'),
status: 201
);
}
@@ -57,9 +63,11 @@ public function store(CreateTaxInvoiceRequest $request)
*/
public function update(UpdateTaxInvoiceRequest $request, int $id)
{
$taxInvoice = $this->taxInvoiceService->update($id, $request->validated());
return ApiResponse::handle(
fn () => $this->taxInvoiceService->update($id, $request->validated()),
__('message.updated')
data: $taxInvoice,
message: __('message.updated')
);
}
@@ -68,9 +76,11 @@ public function update(UpdateTaxInvoiceRequest $request, int $id)
*/
public function destroy(int $id)
{
$this->taxInvoiceService->delete($id);
return ApiResponse::handle(
fn () => $this->taxInvoiceService->delete($id),
__('message.deleted')
data: null,
message: __('message.deleted')
);
}
@@ -79,9 +89,11 @@ public function destroy(int $id)
*/
public function issue(int $id)
{
$taxInvoice = $this->taxInvoiceService->issue($id);
return ApiResponse::handle(
fn () => $this->taxInvoiceService->issue($id),
__('message.tax_invoice.issued')
data: $taxInvoice,
message: __('message.tax_invoice.issued')
);
}
@@ -90,9 +102,11 @@ public function issue(int $id)
*/
public function bulkIssue(BulkIssueRequest $request)
{
$result = $this->taxInvoiceService->bulkIssue($request->getIds());
return ApiResponse::handle(
fn () => $this->taxInvoiceService->bulkIssue($request->getIds()),
__('message.tax_invoice.bulk_issued')
data: $result,
message: __('message.tax_invoice.bulk_issued')
);
}
@@ -101,9 +115,11 @@ public function bulkIssue(BulkIssueRequest $request)
*/
public function cancel(CancelTaxInvoiceRequest $request, int $id)
{
$taxInvoice = $this->taxInvoiceService->cancel($id, $request->validated()['reason']);
return ApiResponse::handle(
fn () => $this->taxInvoiceService->cancel($id, $request->validated()['reason']),
__('message.tax_invoice.cancelled')
data: $taxInvoice,
message: __('message.tax_invoice.cancelled')
);
}
@@ -112,9 +128,11 @@ public function cancel(CancelTaxInvoiceRequest $request, int $id)
*/
public function checkStatus(int $id)
{
$taxInvoice = $this->taxInvoiceService->checkStatus($id);
return ApiResponse::handle(
fn () => $this->taxInvoiceService->checkStatus($id),
__('message.fetched')
data: $taxInvoice,
message: __('message.fetched')
);
}
@@ -123,42 +141,11 @@ public function checkStatus(int $id)
*/
public function summary(TaxInvoiceSummaryRequest $request)
{
return ApiResponse::handle(
fn () => $this->taxInvoiceService->summary($request->validated()),
__('message.fetched')
);
}
$summary = $this->taxInvoiceService->summary($request->validated());
/**
* 공급자 설정 조회
*/
public function supplierSettings()
{
return ApiResponse::handle(
fn () => $this->taxInvoiceService->getSupplierSettings(),
__('message.fetched')
);
}
/**
* 공급자 설정 저장
*/
public function saveSupplierSettings(SaveSupplierSettingsRequest $request)
{
return ApiResponse::handle(
fn () => $this->taxInvoiceService->saveSupplierSettings($request->validated()),
__('message.updated')
);
}
/**
* 세금계산서 생성 + 즉시 발행
*/
public function storeAndIssue(CreateTaxInvoiceRequest $request)
{
return ApiResponse::handle(
fn () => $this->taxInvoiceService->createAndIssue($request->validated()),
__('message.tax_invoice.issued')
data: $summary,
message: __('message.fetched')
);
}
}

View File

@@ -4,8 +4,8 @@
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Http\Requests\Authz\UserRoleGrantRequest;
use App\Services\Authz\UserRoleService;
use Illuminate\Http\Request;
class UserRoleController extends Controller
{
@@ -13,27 +13,27 @@ public function index($id)
{
return ApiResponse::handle(function () use ($id) {
return UserRoleService::list((int) $id);
}, __('message.fetched'));
}, '사용자의 역할 목록 조회');
}
public function grant($id, UserRoleGrantRequest $request)
public function grant($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return UserRoleService::grant((int) $id, $request->validated());
}, __('message.updated'));
return UserRoleService::grant((int) $id, $request->all());
}, '사용자에게 역할 부여');
}
public function revoke($id, UserRoleGrantRequest $request)
public function revoke($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return UserRoleService::revoke((int) $id, $request->validated());
}, __('message.updated'));
return UserRoleService::revoke((int) $id, $request->all());
}, '사용자의 역할 회수');
}
public function sync($id, UserRoleGrantRequest $request)
public function sync($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return UserRoleService::sync((int) $id, $request->validated());
}, __('message.updated'));
return UserRoleService::sync((int) $id, $request->all());
}, '사용자의 역할 동기화');
}
}

View File

@@ -1,23 +0,0 @@
<?php
namespace App\Http\Requests\Authz;
use Illuminate\Foundation\Http\FormRequest;
class RoleIndexRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'page' => 'sometimes|integer|min:1',
'size' => 'sometimes|integer|min:1|max:100',
'q' => 'sometimes|nullable|string|max:100',
'is_hidden' => 'sometimes|boolean',
];
}
}

View File

@@ -1,38 +0,0 @@
<?php
namespace App\Http\Requests\Authz;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class RolePermissionGrantRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'permission_names' => 'sometimes|array',
'permission_names.*' => 'string|min:1',
'menus' => 'sometimes|array',
'menus.*' => 'integer|min:1',
'actions' => 'sometimes|array',
'actions.*' => [
'string', Rule::in(config('authz.menu_actions', ['view', 'create', 'update', 'delete', 'approve'])),
],
];
}
public function withValidator($validator): void
{
$validator->after(function ($validator) {
$data = $this->all();
if (empty($data['permission_names']) && (empty($data['menus']) || empty($data['actions']))) {
$validator->errors()->add('permission_names', __('error.role.permission_input_required'));
}
});
}
}

View File

@@ -1,24 +0,0 @@
<?php
namespace App\Http\Requests\Authz;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class RolePermissionToggleRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
$permissionTypes = config('authz.menu_actions', ['view', 'create', 'update', 'delete', 'approve', 'export', 'manage']);
return [
'menu_id' => 'required|integer|min:1',
'permission_type' => ['required', 'string', Rule::in($permissionTypes)],
];
}
}

View File

@@ -1,31 +0,0 @@
<?php
namespace App\Http\Requests\Authz;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class RoleStoreRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
$tenantId = (int) app('tenant_id');
$guard = 'api';
return [
'name' => [
'required', 'string', 'max:100',
Rule::unique('roles', 'name')->where(fn ($q) => $q
->where('tenant_id', $tenantId)
->where('guard_name', $guard)),
],
'description' => 'nullable|string|max:255',
'is_hidden' => 'sometimes|boolean',
];
}
}

View File

@@ -1,32 +0,0 @@
<?php
namespace App\Http\Requests\Authz;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class RoleUpdateRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
$tenantId = (int) app('tenant_id');
$guard = 'api';
$roleId = (int) $this->route('id');
return [
'name' => [
'sometimes', 'string', 'max:100',
Rule::unique('roles', 'name')
->where(fn ($q) => $q->where('tenant_id', $tenantId)->where('guard_name', $guard))
->ignore($roleId),
],
'description' => 'sometimes|nullable|string|max:255',
'is_hidden' => 'sometimes|boolean',
];
}
}

View File

@@ -1,33 +0,0 @@
<?php
namespace App\Http\Requests\Authz;
use Illuminate\Foundation\Http\FormRequest;
class UserRoleGrantRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'role_names' => 'sometimes|array',
'role_names.*' => 'string|min:1',
'role_ids' => 'sometimes|array',
'role_ids.*' => 'integer|min:1',
];
}
public function withValidator($validator): void
{
$validator->after(function ($validator) {
$data = $this->all();
if (empty($data['role_names']) && empty($data['role_ids'])) {
$validator->errors()->add('role_names', __('error.role.role_input_required'));
}
});
}
}

View File

@@ -1,21 +0,0 @@
<?php
namespace App\Http\Requests\Barobill;
use Illuminate\Foundation\Http\FormRequest;
class BankServiceUrlRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'bank_code' => ['required', 'string', 'max:10'],
'account_type' => ['required', 'string', 'max:10'],
];
}
}

View File

@@ -1,21 +0,0 @@
<?php
namespace App\Http\Requests\Barobill;
use Illuminate\Foundation\Http\FormRequest;
class BarobillLoginRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'barobill_id' => ['required', 'string', 'max:50'],
'password' => ['required', 'string', 'max:255'],
];
}
}

View File

@@ -1,30 +0,0 @@
<?php
namespace App\Http\Requests\Barobill;
use Illuminate\Foundation\Http\FormRequest;
class BarobillSignupRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'business_number' => ['required', 'string', 'max:20'],
'company_name' => ['required', 'string', 'max:100'],
'ceo_name' => ['required', 'string', 'max:50'],
'business_type' => ['nullable', 'string', 'max:50'],
'business_category' => ['nullable', 'string', 'max:50'],
'address' => ['nullable', 'string', 'max:255'],
'barobill_id' => ['required', 'string', 'max:50'],
'password' => ['required', 'string', 'max:255'],
'manager_name' => ['nullable', 'string', 'max:50'],
'manager_phone' => ['nullable', 'string', 'max:20'],
'manager_email' => ['nullable', 'email', 'max:100'],
];
}
}

View File

@@ -1,28 +0,0 @@
<?php
namespace App\Http\Requests\TaxInvoice;
use Illuminate\Foundation\Http\FormRequest;
class SaveSupplierSettingsRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'business_number' => ['required', 'string', 'max:20'],
'company_name' => ['required', 'string', 'max:100'],
'representative_name' => ['required', 'string', 'max:50'],
'address' => ['nullable', 'string', 'max:255'],
'business_type' => ['nullable', 'string', 'max:100'],
'business_item' => ['nullable', 'string', 'max:100'],
'contact_name' => ['nullable', 'string', 'max:50'],
'contact_phone' => ['nullable', 'string', 'max:20'],
'contact_email' => ['nullable', 'email', 'max:100'],
];
}
}

View File

@@ -19,16 +19,9 @@ public function rules(): array
'account_number' => ['required', 'string', 'max:30', 'regex:/^[\d-]+$/'],
'account_holder' => ['required', 'string', 'max:50'],
'account_name' => ['required', 'string', 'max:100'],
'account_type' => ['nullable', 'string', 'max:30'],
'balance' => ['nullable', 'numeric', 'min:0'],
'currency' => ['nullable', 'string', 'max:3'],
'opened_at' => ['nullable', 'date'],
'branch_name' => ['nullable', 'string', 'max:100'],
'memo' => ['nullable', 'string', 'max:500'],
'status' => ['nullable', 'string', 'in:active,inactive'],
'assigned_user_id' => ['nullable', 'integer', 'exists:users,id'],
'is_primary' => ['nullable', 'boolean'],
'sort_order' => ['nullable', 'integer', 'min:0'],
];
}

View File

@@ -19,15 +19,8 @@ public function rules(): array
'account_number' => ['sometimes', 'string', 'max:30', 'regex:/^[\d-]+$/'],
'account_holder' => ['sometimes', 'string', 'max:50'],
'account_name' => ['sometimes', 'string', 'max:100'],
'account_type' => ['sometimes', 'nullable', 'string', 'max:30'],
'balance' => ['sometimes', 'nullable', 'numeric', 'min:0'],
'currency' => ['sometimes', 'nullable', 'string', 'max:3'],
'opened_at' => ['sometimes', 'nullable', 'date'],
'branch_name' => ['sometimes', 'nullable', 'string', 'max:100'],
'memo' => ['sometimes', 'nullable', 'string', 'max:500'],
'status' => ['sometimes', 'string', 'in:active,inactive'],
'assigned_user_id' => ['nullable', 'integer', 'exists:users,id'],
'sort_order' => ['sometimes', 'nullable', 'integer', 'min:0'],
];
}

View File

@@ -15,21 +15,12 @@ public function rules(): array
{
return [
'card_company' => ['required', 'string', 'max:50'],
'card_type' => ['nullable', 'string', 'max:50'],
'card_number' => ['required', 'string', 'regex:/^\d{13,19}$/'],
'expiry_date' => ['required', 'string', 'regex:/^(0[1-9]|1[0-2])\/\d{2}$/'],
'card_password' => ['nullable', 'string', 'size:2', 'regex:/^\d{2}$/'],
'card_name' => ['required', 'string', 'max:100'],
'alias' => ['nullable', 'string', 'max:100'],
'csv' => ['nullable', 'string', 'max:4'],
'payment_day' => ['nullable', 'integer', 'min:1', 'max:31'],
'total_limit' => ['nullable', 'numeric', 'min:0'],
'used_amount' => ['nullable', 'numeric', 'min:0'],
'remaining_limit' => ['nullable', 'numeric', 'min:0'],
'status' => ['nullable', 'string', 'in:active,inactive'],
'is_manual' => ['nullable', 'boolean'],
'assigned_user_id' => ['nullable', 'integer', 'exists:users,id'],
'memo' => ['nullable', 'string', 'max:500'],
];
}

View File

@@ -15,21 +15,12 @@ public function rules(): array
{
return [
'card_company' => ['sometimes', 'string', 'max:50'],
'card_type' => ['nullable', 'string', 'max:50'],
'card_number' => ['sometimes', 'string', 'regex:/^\d{13,19}$/'],
'expiry_date' => ['sometimes', 'string', 'regex:/^(0[1-9]|1[0-2])\/\d{2}$/'],
'card_password' => ['nullable', 'string', 'size:2', 'regex:/^\d{2}$/'],
'card_name' => ['sometimes', 'string', 'max:100'],
'alias' => ['nullable', 'string', 'max:100'],
'csv' => ['nullable', 'string', 'max:4'],
'payment_day' => ['nullable', 'integer', 'min:1', 'max:31'],
'total_limit' => ['nullable', 'numeric', 'min:0'],
'used_amount' => ['nullable', 'numeric', 'min:0'],
'remaining_limit' => ['nullable', 'numeric', 'min:0'],
'status' => ['sometimes', 'string', 'in:active,inactive'],
'is_manual' => ['nullable', 'boolean'],
'assigned_user_id' => ['nullable', 'integer', 'exists:users,id'],
'memo' => ['nullable', 'string', 'max:500'],
];
}

View File

@@ -1,31 +0,0 @@
<?php
namespace App\Http\Requests\V1\CorporateCard;
use Illuminate\Foundation\Http\FormRequest;
class StoreCorporateCardRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'card_name' => ['required', 'string', 'max:100'],
'card_company' => ['required', 'string', 'max:50'],
'card_number' => ['required', 'string', 'max:30'],
'card_type' => ['required', 'string', 'in:credit,debit'],
'payment_day' => ['nullable', 'integer', 'min:1', 'max:31'],
'credit_limit' => ['nullable', 'numeric', 'min:0'],
'card_holder_name' => ['required', 'string', 'max:100'],
'actual_user' => ['required', 'string', 'max:100'],
'expiry_date' => ['nullable', 'string', 'max:10'],
'cvc' => ['nullable', 'string', 'max:4'],
'status' => ['nullable', 'string', 'in:active,inactive'],
'memo' => ['nullable', 'string', 'max:500'],
];
}
}

View File

@@ -1,31 +0,0 @@
<?php
namespace App\Http\Requests\V1\CorporateCard;
use Illuminate\Foundation\Http\FormRequest;
class UpdateCorporateCardRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'card_name' => ['sometimes', 'string', 'max:100'],
'card_company' => ['sometimes', 'string', 'max:50'],
'card_number' => ['sometimes', 'string', 'max:30'],
'card_type' => ['sometimes', 'string', 'in:credit,debit'],
'payment_day' => ['sometimes', 'nullable', 'integer', 'min:1', 'max:31'],
'credit_limit' => ['sometimes', 'nullable', 'numeric', 'min:0'],
'card_holder_name' => ['sometimes', 'string', 'max:100'],
'actual_user' => ['sometimes', 'string', 'max:100'],
'expiry_date' => ['sometimes', 'nullable', 'string', 'max:10'],
'cvc' => ['sometimes', 'nullable', 'string', 'max:4'],
'status' => ['sometimes', 'string', 'in:active,inactive'],
'memo' => ['sometimes', 'nullable', 'string', 'max:500'],
];
}
}