From 97f22f9b98ad4cdc7dca2078dc9fc2af4ae8573e Mon Sep 17 00:00:00 2001 From: kent Date: Tue, 13 Jan 2026 19:45:44 +0900 Subject: [PATCH] =?UTF-8?q?refactor(pagination):=20size=20=EC=B4=88?= =?UTF-8?q?=EA=B3=BC=20=EC=8B=9C=20=EC=98=A4=EB=A5=98=20=EB=8C=80=EC=8B=A0?= =?UTF-8?q?=20=EC=9E=90=EB=8F=99=20=EC=A1=B0=EC=A0=95=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - config/pagination.php 추가 (기본값 중앙 관리) - HasPagination Trait 추가 (prepareForValidation에서 자동 조정) - 22개 IndexRequest에 Trait 적용, max 규칙 제거 - 특수 케이스: Employee($maxSize=500), Audit($maxSize=200) size/per_page가 최대값 초과 시 422 오류 대신 최대값으로 자동 조정되어 리스트가 빈 화면으로 표시되는 문제 해결 Co-Authored-By: Claude Opus 4.5 --- app/Http/Requests/Admin/FcmHistoryRequest.php | 5 ++- .../Requests/Admin/FcmTokenListRequest.php | 5 ++- .../Requests/Approval/FormIndexRequest.php | 7 ++- .../Requests/Approval/InboxIndexRequest.php | 7 ++- app/Http/Requests/Approval/IndexRequest.php | 7 ++- .../Requests/Approval/LineIndexRequest.php | 7 ++- .../Approval/ReferenceIndexRequest.php | 7 ++- app/Http/Requests/Attendance/IndexRequest.php | 7 ++- .../Requests/Audit/AuditLogIndexRequest.php | 10 ++++- app/Http/Requests/Common/PaginateRequest.php | 7 ++- app/Http/Requests/Employee/IndexRequest.php | 12 ++++- app/Http/Requests/Labor/LaborIndexRequest.php | 7 ++- app/Http/Requests/Leave/IndexRequest.php | 7 ++- app/Http/Requests/Loan/LoanIndexRequest.php | 7 ++- app/Http/Requests/PositionRequest.php | 5 ++- .../Requests/Pricing/PriceIndexRequest.php | 7 ++- app/Http/Requests/Quote/QuoteIndexRequest.php | 14 +++++- .../TaxInvoice/TaxInvoiceListRequest.php | 7 ++- app/Http/Requests/Traits/HasPagination.php | 44 +++++++++++++++++++ .../UserInvitation/ListInvitationRequest.php | 7 ++- .../V1/AiReport/AiReportListRequest.php | 7 ++- .../V1/Company/CompanyRequestIndexRequest.php | 7 ++- .../V1/Payment/PaymentIndexRequest.php | 7 ++- .../Requests/V1/Plan/PlanIndexRequest.php | 7 ++- .../Subscription/SubscriptionIndexRequest.php | 7 ++- config/pagination.php | 24 ++++++++++ 26 files changed, 201 insertions(+), 44 deletions(-) create mode 100644 app/Http/Requests/Traits/HasPagination.php create mode 100644 config/pagination.php diff --git a/app/Http/Requests/Admin/FcmHistoryRequest.php b/app/Http/Requests/Admin/FcmHistoryRequest.php index 4118ba3..e49717b 100644 --- a/app/Http/Requests/Admin/FcmHistoryRequest.php +++ b/app/Http/Requests/Admin/FcmHistoryRequest.php @@ -2,10 +2,13 @@ namespace App\Http\Requests\Admin; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class FcmHistoryRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -18,7 +21,7 @@ public function rules(): array 'status' => 'nullable|string|in:pending,sending,completed,failed', 'from' => 'nullable|date', 'to' => 'nullable|date|after_or_equal:from', - 'per_page' => 'nullable|integer|min:1|max:100', + 'per_page' => 'nullable|integer|min:1', ]; } } \ No newline at end of file diff --git a/app/Http/Requests/Admin/FcmTokenListRequest.php b/app/Http/Requests/Admin/FcmTokenListRequest.php index b3ea5e8..436f2a1 100644 --- a/app/Http/Requests/Admin/FcmTokenListRequest.php +++ b/app/Http/Requests/Admin/FcmTokenListRequest.php @@ -2,10 +2,13 @@ namespace App\Http\Requests\Admin; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class FcmTokenListRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -19,7 +22,7 @@ public function rules(): array 'is_active' => 'nullable|boolean', 'has_error' => 'nullable|boolean', 'search' => 'nullable|string|max:100', - 'per_page' => 'nullable|integer|min:1|max:100', + 'per_page' => 'nullable|integer|min:1', ]; } } \ No newline at end of file diff --git a/app/Http/Requests/Approval/FormIndexRequest.php b/app/Http/Requests/Approval/FormIndexRequest.php index b4c657e..068c440 100644 --- a/app/Http/Requests/Approval/FormIndexRequest.php +++ b/app/Http/Requests/Approval/FormIndexRequest.php @@ -2,11 +2,14 @@ namespace App\Http\Requests\Approval; +use App\Http\Requests\Traits\HasPagination; use App\Models\Tenants\ApprovalForm; use Illuminate\Foundation\Http\FormRequest; class FormIndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -22,8 +25,8 @@ public function rules(): array 'search' => 'nullable|string|max:100', 'sort_by' => 'nullable|string|in:created_at,name,code,category', 'sort_dir' => 'nullable|string|in:asc,desc', - 'per_page' => 'nullable|integer|min:1|max:100', + 'per_page' => 'nullable|integer|min:1', 'page' => 'nullable|integer|min:1', ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/Approval/InboxIndexRequest.php b/app/Http/Requests/Approval/InboxIndexRequest.php index 48d44c2..6c56d39 100644 --- a/app/Http/Requests/Approval/InboxIndexRequest.php +++ b/app/Http/Requests/Approval/InboxIndexRequest.php @@ -2,10 +2,13 @@ namespace App\Http\Requests\Approval; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class InboxIndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -17,8 +20,8 @@ public function rules(): array 'status' => 'nullable|string|in:requested,scheduled,completed,rejected', 'sort_by' => 'nullable|string|in:created_at,drafted_at,completed_at,title', 'sort_dir' => 'nullable|string|in:asc,desc', - 'per_page' => 'nullable|integer|min:1|max:100', + 'per_page' => 'nullable|integer|min:1', 'page' => 'nullable|integer|min:1', ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/Approval/IndexRequest.php b/app/Http/Requests/Approval/IndexRequest.php index a09ae6f..92fef44 100644 --- a/app/Http/Requests/Approval/IndexRequest.php +++ b/app/Http/Requests/Approval/IndexRequest.php @@ -2,11 +2,14 @@ namespace App\Http\Requests\Approval; +use App\Http\Requests\Traits\HasPagination; use App\Models\Tenants\Approval; use Illuminate\Foundation\Http\FormRequest; class IndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -21,8 +24,8 @@ public function rules(): array 'search' => 'nullable|string|max:100', 'sort_by' => 'nullable|string|in:created_at,drafted_at,completed_at,title,status', 'sort_dir' => 'nullable|string|in:asc,desc', - 'per_page' => 'nullable|integer|min:1|max:100', + 'per_page' => 'nullable|integer|min:1', 'page' => 'nullable|integer|min:1', ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/Approval/LineIndexRequest.php b/app/Http/Requests/Approval/LineIndexRequest.php index c63d2c1..fe80de0 100644 --- a/app/Http/Requests/Approval/LineIndexRequest.php +++ b/app/Http/Requests/Approval/LineIndexRequest.php @@ -2,10 +2,13 @@ namespace App\Http\Requests\Approval; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class LineIndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -17,8 +20,8 @@ public function rules(): array 'search' => 'nullable|string|max:100', 'sort_by' => 'nullable|string|in:created_at,name,is_default', 'sort_dir' => 'nullable|string|in:asc,desc', - 'per_page' => 'nullable|integer|min:1|max:100', + 'per_page' => 'nullable|integer|min:1', 'page' => 'nullable|integer|min:1', ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/Approval/ReferenceIndexRequest.php b/app/Http/Requests/Approval/ReferenceIndexRequest.php index bb2120e..d104e18 100644 --- a/app/Http/Requests/Approval/ReferenceIndexRequest.php +++ b/app/Http/Requests/Approval/ReferenceIndexRequest.php @@ -2,10 +2,13 @@ namespace App\Http\Requests\Approval; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class ReferenceIndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -17,8 +20,8 @@ public function rules(): array 'is_read' => 'nullable|boolean', 'sort_by' => 'nullable|string|in:created_at,drafted_at,completed_at,title', 'sort_dir' => 'nullable|string|in:asc,desc', - 'per_page' => 'nullable|integer|min:1|max:100', + 'per_page' => 'nullable|integer|min:1', 'page' => 'nullable|integer|min:1', ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/Attendance/IndexRequest.php b/app/Http/Requests/Attendance/IndexRequest.php index 0ae500d..82dc824 100644 --- a/app/Http/Requests/Attendance/IndexRequest.php +++ b/app/Http/Requests/Attendance/IndexRequest.php @@ -2,10 +2,13 @@ namespace App\Http\Requests\Attendance; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class IndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -23,7 +26,7 @@ public function rules(): array 'sort_by' => 'nullable|in:base_date,status,created_at', 'sort_dir' => 'nullable|in:asc,desc', 'page' => 'nullable|integer|min:1', - 'per_page' => 'nullable|integer|min:1|max:100', + 'per_page' => 'nullable|integer|min:1', ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/Audit/AuditLogIndexRequest.php b/app/Http/Requests/Audit/AuditLogIndexRequest.php index f3bcf50..0648d1b 100644 --- a/app/Http/Requests/Audit/AuditLogIndexRequest.php +++ b/app/Http/Requests/Audit/AuditLogIndexRequest.php @@ -2,10 +2,18 @@ namespace App\Http\Requests\Audit; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class AuditLogIndexRequest extends FormRequest { + use HasPagination; + + /** + * 감사 로그 조회용 확장 - 최대 200개 허용 + */ + protected int $maxSize = 200; + public function authorize(): bool { return true; @@ -15,7 +23,7 @@ public function rules(): array { return [ 'page' => 'nullable|integer|min:1', - 'size' => 'nullable|integer|min:1|max:200', + 'size' => 'nullable|integer|min:1', 'target_type' => 'nullable|string|max:100', 'target_id' => 'nullable|integer|min:1', 'action' => 'nullable|string|max:50', diff --git a/app/Http/Requests/Common/PaginateRequest.php b/app/Http/Requests/Common/PaginateRequest.php index 343ca65..a97d02d 100644 --- a/app/Http/Requests/Common/PaginateRequest.php +++ b/app/Http/Requests/Common/PaginateRequest.php @@ -2,10 +2,13 @@ namespace App\Http\Requests\Common; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class PaginateRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -15,7 +18,7 @@ public function rules(): array { return [ 'page' => 'nullable|integer|min:1', - 'size' => 'nullable|integer|min:1|max:100', + 'size' => 'nullable|integer|min:1', 'q' => 'nullable|string|max:100', 'sort' => 'nullable|string|in:id,code,name,created_at', 'order' => 'nullable|string|in:asc,desc', @@ -26,7 +29,7 @@ public function validatedOrDefaults(): array { $v = $this->validated(); $v['page'] = $v['page'] ?? 1; - $v['size'] = $v['size'] ?? 20; + $v['size'] = $v['size'] ?? config('pagination.default_size', 20); $v['order'] = $v['order'] ?? 'desc'; return $v; diff --git a/app/Http/Requests/Employee/IndexRequest.php b/app/Http/Requests/Employee/IndexRequest.php index e4fbeb5..7af4fa9 100644 --- a/app/Http/Requests/Employee/IndexRequest.php +++ b/app/Http/Requests/Employee/IndexRequest.php @@ -2,10 +2,18 @@ namespace App\Http\Requests\Employee; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class IndexRequest extends FormRequest { + use HasPagination; + + /** + * 드롭다운 등 관리용 확장을 위해 최대 500개 허용 + */ + protected int $maxSize = 500; + public function authorize(): bool { return true; @@ -21,7 +29,7 @@ public function rules(): array 'sort_by' => 'nullable|in:created_at,name,employee_status,department_id', 'sort_dir' => 'nullable|in:asc,desc', 'page' => 'nullable|integer|min:1', - 'per_page' => 'nullable|integer|min:1|max:500', // 드롭다운 등 관리용 확장 + 'per_page' => 'nullable|integer|min:1', ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/Labor/LaborIndexRequest.php b/app/Http/Requests/Labor/LaborIndexRequest.php index 1be6f72..45690c6 100644 --- a/app/Http/Requests/Labor/LaborIndexRequest.php +++ b/app/Http/Requests/Labor/LaborIndexRequest.php @@ -2,10 +2,13 @@ namespace App\Http\Requests\Labor; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class LaborIndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -20,7 +23,7 @@ public function rules(): array 'start_date' => ['nullable', 'date'], 'end_date' => ['nullable', 'date', 'after_or_equal:start_date'], 'page' => ['nullable', 'integer', 'min:1'], - 'per_page' => ['nullable', 'integer', 'min:1', 'max:100'], + 'per_page' => ['nullable', 'integer', 'min:1'], 'sort_by' => ['nullable', 'string', 'in:created_at,labor_number,category,min_m,max_m,labor_price'], 'sort_dir' => ['nullable', 'string', 'in:asc,desc'], ]; @@ -34,4 +37,4 @@ public function messages(): array 'end_date.after_or_equal' => __('validation.after_or_equal', ['attribute' => '종료일', 'date' => '시작일']), ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/Leave/IndexRequest.php b/app/Http/Requests/Leave/IndexRequest.php index 3a3e6bb..4fb08a6 100644 --- a/app/Http/Requests/Leave/IndexRequest.php +++ b/app/Http/Requests/Leave/IndexRequest.php @@ -2,10 +2,13 @@ namespace App\Http\Requests\Leave; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class IndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -23,8 +26,8 @@ public function rules(): array 'department_id' => 'nullable|integer', 'sort_by' => 'nullable|string|in:created_at,start_date,end_date,days,status', 'sort_dir' => 'nullable|string|in:asc,desc', - 'per_page' => 'nullable|integer|min:1|max:100', + 'per_page' => 'nullable|integer|min:1', 'page' => 'nullable|integer|min:1', ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/Loan/LoanIndexRequest.php b/app/Http/Requests/Loan/LoanIndexRequest.php index e346b22..c9198ea 100644 --- a/app/Http/Requests/Loan/LoanIndexRequest.php +++ b/app/Http/Requests/Loan/LoanIndexRequest.php @@ -2,12 +2,15 @@ namespace App\Http\Requests\Loan; +use App\Http\Requests\Traits\HasPagination; use App\Models\Tenants\Loan; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; class LoanIndexRequest extends FormRequest { + use HasPagination; + /** * Determine if the user is authorized to make this request. */ @@ -31,7 +34,7 @@ public function rules(): array 'search' => ['nullable', 'string', 'max:100'], 'sort_by' => ['nullable', 'string', Rule::in(['loan_date', 'amount', 'status', 'created_at'])], 'sort_dir' => ['nullable', 'string', Rule::in(['asc', 'desc'])], - 'per_page' => ['nullable', 'integer', 'min:1', 'max:100'], + 'per_page' => ['nullable', 'integer', 'min:1'], ]; } @@ -53,4 +56,4 @@ public function attributes(): array 'per_page' => __('validation.attributes.per_page'), ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/PositionRequest.php b/app/Http/Requests/PositionRequest.php index 452b2a6..8e42f63 100644 --- a/app/Http/Requests/PositionRequest.php +++ b/app/Http/Requests/PositionRequest.php @@ -2,12 +2,15 @@ namespace App\Http\Requests; +use App\Http\Requests\Traits\HasPagination; use App\Models\Tenants\Position; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; class PositionRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -22,7 +25,7 @@ public function rules(): array 'type' => ['nullable', Rule::in([Position::TYPE_RANK, Position::TYPE_TITLE])], 'is_active' => 'nullable|boolean', 'q' => 'nullable|string|max:100', - 'per_page' => 'nullable|integer|min:1|max:100', + 'per_page' => 'nullable|integer|min:1', 'page' => 'nullable|integer|min:1', ]; } diff --git a/app/Http/Requests/Pricing/PriceIndexRequest.php b/app/Http/Requests/Pricing/PriceIndexRequest.php index 3b05a6a..f3fec9d 100644 --- a/app/Http/Requests/Pricing/PriceIndexRequest.php +++ b/app/Http/Requests/Pricing/PriceIndexRequest.php @@ -2,10 +2,13 @@ namespace App\Http\Requests\Pricing; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class PriceIndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -14,7 +17,7 @@ public function authorize(): bool public function rules(): array { return [ - 'size' => 'nullable|integer|min:1|max:100', + 'size' => 'nullable|integer|min:1', 'page' => 'nullable|integer|min:1', 'q' => 'nullable|string|max:100', 'item_type_code' => 'nullable|string|in:PRODUCT,MATERIAL', @@ -24,4 +27,4 @@ public function rules(): array 'valid_at' => 'nullable|date', ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/Quote/QuoteIndexRequest.php b/app/Http/Requests/Quote/QuoteIndexRequest.php index 401f8ac..726d5fd 100644 --- a/app/Http/Requests/Quote/QuoteIndexRequest.php +++ b/app/Http/Requests/Quote/QuoteIndexRequest.php @@ -2,11 +2,14 @@ namespace App\Http\Requests\Quote; +use App\Http\Requests\Traits\HasPagination; use App\Models\Quote\Quote; use Illuminate\Foundation\Http\FormRequest; class QuoteIndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -15,9 +18,16 @@ public function authorize(): bool /** * 검증 전 데이터 전처리 * - 쿼리 스트링의 "true"/"false" 문자열을 boolean으로 변환 + * - size/per_page 최대값 제한 */ protected function prepareForValidation(): void { + // HasPagination Trait의 페이지네이션 처리 + $maxSize = $this->maxSize ?? config('pagination.max_size', 100); + if ($this->has('size') && $this->input('size') > $maxSize) { + $this->merge(['size' => $maxSize]); + } + if ($this->has('with_items')) { $this->merge([ 'with_items' => filter_var($this->with_items, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), @@ -29,7 +39,7 @@ public function rules(): array { return [ 'page' => 'nullable|integer|min:1', - 'size' => 'nullable|integer|min:1|max:100', + 'size' => 'nullable|integer|min:1', 'q' => 'nullable|string|max:100', 'quote_type' => 'nullable|in:'.implode(',', Quote::TYPES), 'status' => 'nullable|in:'.implode(',', [ @@ -50,4 +60,4 @@ public function rules(): array 'with_items' => 'nullable|boolean', // 수주 전환용 품목 포함 여부 ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/TaxInvoice/TaxInvoiceListRequest.php b/app/Http/Requests/TaxInvoice/TaxInvoiceListRequest.php index f1679ac..51aa13f 100644 --- a/app/Http/Requests/TaxInvoice/TaxInvoiceListRequest.php +++ b/app/Http/Requests/TaxInvoice/TaxInvoiceListRequest.php @@ -2,12 +2,15 @@ namespace App\Http\Requests\TaxInvoice; +use App\Http\Requests\Traits\HasPagination; use App\Models\Tenants\TaxInvoice; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; class TaxInvoiceListRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -16,7 +19,7 @@ public function authorize(): bool public function rules(): array { return [ - 'per_page' => ['nullable', 'integer', 'min:1', 'max:100'], + 'per_page' => ['nullable', 'integer', 'min:1'], 'direction' => ['nullable', 'string', Rule::in(TaxInvoice::DIRECTIONS)], 'status' => ['nullable', 'string', Rule::in(TaxInvoice::STATUSES)], 'invoice_type' => ['nullable', 'string', Rule::in(TaxInvoice::INVOICE_TYPES)], @@ -28,4 +31,4 @@ public function rules(): array 'nts_confirm_num' => ['nullable', 'string', 'max:24'], ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/Traits/HasPagination.php b/app/Http/Requests/Traits/HasPagination.php new file mode 100644 index 0000000..5a810b8 --- /dev/null +++ b/app/Http/Requests/Traits/HasPagination.php @@ -0,0 +1,44 @@ +maxSize ?? config('pagination.max_size', 100); + + // size 파라미터 처리 + if ($this->has('size') && $this->input('size') > $maxSize) { + $this->merge(['size' => $maxSize]); + } + + // per_page 파라미터 처리 + if ($this->has('per_page') && $this->input('per_page') > $maxSize) { + $this->merge(['per_page' => $maxSize]); + } + } + + /** + * 페이지네이션 기본 규칙 반환 + */ + protected function paginationRules(): array + { + return [ + 'page' => 'nullable|integer|min:1', + 'size' => 'nullable|integer|min:1', + 'per_page' => 'nullable|integer|min:1', + ]; + } +} diff --git a/app/Http/Requests/UserInvitation/ListInvitationRequest.php b/app/Http/Requests/UserInvitation/ListInvitationRequest.php index fc23c50..7f6a815 100644 --- a/app/Http/Requests/UserInvitation/ListInvitationRequest.php +++ b/app/Http/Requests/UserInvitation/ListInvitationRequest.php @@ -2,10 +2,13 @@ namespace App\Http\Requests\UserInvitation; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class ListInvitationRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -18,8 +21,8 @@ public function rules(): array 'search' => ['nullable', 'string', 'max:255'], 'sort_by' => ['nullable', 'string', 'in:created_at,expires_at,email'], 'sort_dir' => ['nullable', 'string', 'in:asc,desc'], - 'per_page' => ['nullable', 'integer', 'min:1', 'max:100'], + 'per_page' => ['nullable', 'integer', 'min:1'], 'page' => ['nullable', 'integer', 'min:1'], ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/V1/AiReport/AiReportListRequest.php b/app/Http/Requests/V1/AiReport/AiReportListRequest.php index 294dc8c..8835f97 100644 --- a/app/Http/Requests/V1/AiReport/AiReportListRequest.php +++ b/app/Http/Requests/V1/AiReport/AiReportListRequest.php @@ -2,12 +2,15 @@ namespace App\Http\Requests\V1\AiReport; +use App\Http\Requests\Traits\HasPagination; use App\Models\Tenants\AiReport; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; class AiReportListRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -16,7 +19,7 @@ public function authorize(): bool public function rules(): array { return [ - 'per_page' => ['nullable', 'integer', 'min:1', 'max:100'], + 'per_page' => ['nullable', 'integer', 'min:1'], 'report_type' => ['nullable', 'string', Rule::in(array_keys(AiReport::REPORT_TYPES))], 'status' => ['nullable', 'string', Rule::in(array_keys(AiReport::STATUSES))], 'start_date' => ['nullable', 'date'], @@ -35,4 +38,4 @@ public function messages(): array ]), ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/V1/Company/CompanyRequestIndexRequest.php b/app/Http/Requests/V1/Company/CompanyRequestIndexRequest.php index cc3dd44..69b2516 100644 --- a/app/Http/Requests/V1/Company/CompanyRequestIndexRequest.php +++ b/app/Http/Requests/V1/Company/CompanyRequestIndexRequest.php @@ -2,12 +2,15 @@ namespace App\Http\Requests\V1\Company; +use App\Http\Requests\Traits\HasPagination; use App\Models\CompanyRequest; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; class CompanyRequestIndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -22,8 +25,8 @@ public function rules(): array 'end_date' => 'nullable|date|after_or_equal:start_date', 'sort_by' => ['nullable', Rule::in(['created_at', 'company_name', 'status', 'processed_at'])], 'sort_dir' => ['nullable', Rule::in(['asc', 'desc'])], - 'per_page' => 'nullable|integer|min:1|max:100', + 'per_page' => 'nullable|integer|min:1', 'page' => 'nullable|integer|min:1', ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/V1/Payment/PaymentIndexRequest.php b/app/Http/Requests/V1/Payment/PaymentIndexRequest.php index 1354e70..d2f6029 100644 --- a/app/Http/Requests/V1/Payment/PaymentIndexRequest.php +++ b/app/Http/Requests/V1/Payment/PaymentIndexRequest.php @@ -2,12 +2,15 @@ namespace App\Http\Requests\V1\Payment; +use App\Http\Requests\Traits\HasPagination; use App\Models\Tenants\Payment; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; class PaymentIndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -23,7 +26,7 @@ public function rules(): array 'search' => ['nullable', 'string', 'max:100'], 'sort_by' => ['nullable', 'string', 'in:created_at,paid_at,amount'], 'sort_dir' => ['nullable', 'string', 'in:asc,desc'], - 'per_page' => ['nullable', 'integer', 'min:1', 'max:100'], + 'per_page' => ['nullable', 'integer', 'min:1'], ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/V1/Plan/PlanIndexRequest.php b/app/Http/Requests/V1/Plan/PlanIndexRequest.php index 731022c..08248d0 100644 --- a/app/Http/Requests/V1/Plan/PlanIndexRequest.php +++ b/app/Http/Requests/V1/Plan/PlanIndexRequest.php @@ -2,10 +2,13 @@ namespace App\Http\Requests\V1\Plan; +use App\Http\Requests\Traits\HasPagination; use Illuminate\Foundation\Http\FormRequest; class PlanIndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -19,7 +22,7 @@ public function rules(): array 'search' => ['nullable', 'string', 'max:100'], 'sort_by' => ['nullable', 'string', 'in:price,name,created_at'], 'sort_dir' => ['nullable', 'string', 'in:asc,desc'], - 'per_page' => ['nullable', 'integer', 'min:1', 'max:100'], + 'per_page' => ['nullable', 'integer', 'min:1'], ]; } -} +} \ No newline at end of file diff --git a/app/Http/Requests/V1/Subscription/SubscriptionIndexRequest.php b/app/Http/Requests/V1/Subscription/SubscriptionIndexRequest.php index 58f362c..4d0a5f6 100644 --- a/app/Http/Requests/V1/Subscription/SubscriptionIndexRequest.php +++ b/app/Http/Requests/V1/Subscription/SubscriptionIndexRequest.php @@ -2,12 +2,15 @@ namespace App\Http\Requests\V1\Subscription; +use App\Http\Requests\Traits\HasPagination; use App\Models\Tenants\Subscription; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; class SubscriptionIndexRequest extends FormRequest { + use HasPagination; + public function authorize(): bool { return true; @@ -23,7 +26,7 @@ public function rules(): array 'end_date' => ['nullable', 'date', 'after_or_equal:start_date'], 'sort_by' => ['nullable', 'string', 'in:started_at,ended_at,created_at'], 'sort_dir' => ['nullable', 'string', 'in:asc,desc'], - 'per_page' => ['nullable', 'integer', 'min:1', 'max:100'], + 'per_page' => ['nullable', 'integer', 'min:1'], ]; } -} +} \ No newline at end of file diff --git a/config/pagination.php b/config/pagination.php new file mode 100644 index 0000000..5ff8b18 --- /dev/null +++ b/config/pagination.php @@ -0,0 +1,24 @@ + 20, + + /* + |-------------------------------------------------------------------------- + | Maximum Pagination Size + |-------------------------------------------------------------------------- + | + | 페이지네이션 최대 사이즈 설정 + | 요청값이 이 값을 초과하면 자동으로 이 값으로 조정됨 + | + */ + 'max_size' => 100, +];