From 2b3592c4c287719f1bacef74685f371b9cdc185f Mon Sep 17 00:00:00 2001 From: Wian Drs Date: Fri, 3 Jul 2026 11:50:28 +0700 Subject: [PATCH] update pagging data table material --- .../Material/MaterialController.php | 5 ++- app/Traits/ApiResponse.php | 44 +++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Material/MaterialController.php b/app/Http/Controllers/Material/MaterialController.php index 2ccc30a..850ed0a 100644 --- a/app/Http/Controllers/Material/MaterialController.php +++ b/app/Http/Controllers/Material/MaterialController.php @@ -34,8 +34,9 @@ class MaterialController extends ApiController $data = $this->service->list($filters); - return $this->success( - MaterialResource::collection($data), + return $this->successPaginated( + $data, + MaterialResource::class, 'List material user berhasil diambil' ); } diff --git a/app/Traits/ApiResponse.php b/app/Traits/ApiResponse.php index b8f2774..d55f528 100644 --- a/app/Traits/ApiResponse.php +++ b/app/Traits/ApiResponse.php @@ -2,6 +2,9 @@ namespace App\Traits; +use Illuminate\Contracts\Pagination\LengthAwarePaginator; +use Illuminate\Http\Resources\Json\JsonResource; + trait ApiResponse { protected function success($data = null, string $message = 'Success', int $code = 200) @@ -70,4 +73,45 @@ trait ApiResponse 'message' => $message ], 404); } + + protected function successPaginated( + LengthAwarePaginator $data, + string $resource, + string $message = 'Success', + int $code = 200 + ) { + return response()->json([ + 'success' => true, + 'code' => $code, + 'message' => $message, + + 'data' => $resource::collection($data->items()), + + 'pagination' => [ + 'current_page' => $data->currentPage(), + 'per_page' => $data->perPage(), + 'from' => $data->firstItem(), + 'to' => $data->lastItem(), + 'last_page' => $data->lastPage(), + 'total' => $data->total(), + + 'has_more' => $data->hasMorePages(), + 'count' => count($data->items()), + + 'next_page' => $data->nextPageUrl(), + 'prev_page' => $data->previousPageUrl(), + 'first_page' => $data->url(1), + 'last_page_url'=> $data->url($data->lastPage()), + ], + + 'filters' => [ + 'page' => (int) request()->input('page', 1), + 'per_page' => (int) request()->input('per_page', 15), + 'search' => request()->input('search'), + 'sort_by' => request()->input('sort_by'), + 'sort_order' => request()->input('sort_order', 'desc'), + 'type' => request()->input('type'), + ] + ], $code); + } } \ No newline at end of file