json([ 'success' => true, 'code' => $code, 'message' => $message, 'data' => $data ], $code); } protected function created($data = null, string $message = 'Data berhasil dibuat') { return response()->json([ 'success' => true, 'code' => 201, 'message' => $message, 'data' => $data ], 201); } protected function updated($data = null, string $message = 'Data berhasil diperbarui') { return response()->json([ 'success' => true, 'code' => 200, 'message' => $message, 'data' => $data ]); } protected function deleted(string $message = 'Data berhasil dihapus') { return response()->json([ 'success' => true, 'code' => 200, 'message' => $message ]); } protected function error(string $message = 'Internal Server Error', int $code = 500) { return response()->json([ 'success' => false, 'code' => $code, 'message' => $message ], $code); } protected function validationError($errors) { return response()->json([ 'success' => false, 'code' => 422, 'message' => 'Validation Error', 'errors' => $errors ], 422); } protected function notFound(string $message = 'Data tidak ditemukan') { return response()->json([ 'success' => false, 'code' => 404, '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); } }