Files
sam-manage/app/Http/Requests/UpdateTenantRequest.php

108 lines
3.8 KiB
PHP
Raw Normal View History

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdateTenantRequest extends FormRequest
{
/**
* 인증 확인
*/
public function authorize(): bool
{
return auth()->check();
}
/**
* 유효성 검증 규칙
*/
public function rules(): array
{
$tenantId = $this->route('id');
return [
// 기본 정보 (필수)
'company_name' => ['required', 'string', 'max:100'],
'code' => [
'required',
'string',
'max:50',
Rule::unique('tenants', 'code')->ignore($tenantId),
],
'email' => ['nullable', 'email', 'max:100'],
'phone' => ['nullable', 'string', 'max:20'],
// 회사 정보
'business_num' => ['nullable', 'string', 'max:20'],
'corp_reg_no' => ['nullable', 'string', 'max:20'],
'ceo_name' => ['nullable', 'string', 'max:50'],
'address' => ['nullable', 'string', 'max:255'],
'homepage' => ['nullable', 'url', 'max:255'],
'fax' => ['nullable', 'string', 'max:20'],
// 구독 정보
'tenant_st_code' => ['required', 'string', 'in:trial,active,suspended,expired'],
'tenant_type' => ['required', 'string', 'in:STD,TPL,HQ'],
'billing_tp_code' => ['nullable', 'string', 'in:monthly,yearly,free'],
'max_users' => ['nullable', 'integer', 'min:1'],
'trial_ends_at' => ['nullable', 'date'],
'expires_at' => ['nullable', 'date'],
'last_paid_at' => ['nullable', 'date'],
// 관리 메모
'admin_memo' => ['nullable', 'string'],
];
}
/**
* 유효성 검증 메시지
*/
public function messages(): array
{
return [
'company_name.required' => '회사명은 필수입니다.',
'company_name.max' => '회사명은 최대 100자까지 입력 가능합니다.',
'code.required' => '테넌트 코드는 필수입니다.',
'code.unique' => '이미 사용 중인 테넌트 코드입니다.',
'email.email' => '올바른 이메일 형식이 아닙니다.',
'homepage.url' => '올바른 URL 형식이 아닙니다.',
'tenant_st_code.required' => '상태는 필수입니다.',
'tenant_st_code.in' => '올바른 상태를 선택해주세요.',
'tenant_type.required' => '테넌트 유형은 필수입니다.',
'tenant_type.in' => '올바른 테넌트 유형을 선택해주세요.',
'billing_tp_code.in' => '올바른 결제 유형을 선택해주세요.',
'max_users.integer' => '최대 사용자 수는 숫자여야 합니다.',
'max_users.min' => '최대 사용자 수는 최소 1명 이상이어야 합니다.',
];
}
/**
* 필드명 한글화
*/
public function attributes(): array
{
return [
'company_name' => '회사명',
'code' => '테넌트 코드',
'email' => '이메일',
'phone' => '전화번호',
'business_num' => '사업자등록번호',
'corp_reg_no' => '법인등록번호',
'ceo_name' => '대표자명',
'address' => '주소',
'homepage' => '홈페이지',
'fax' => '팩스',
'tenant_st_code' => '상태',
'tenant_type' => '테넌트 유형',
'billing_tp_code' => '결제 유형',
'max_users' => '최대 사용자 수',
'trial_ends_at' => '트라이얼 종료일',
'expires_at' => '구독 만료일',
'last_paid_at' => '마지막 결제일',
'admin_memo' => '관리자 메모',
];
}
}