|
|
@@ -9,35 +9,55 @@ use App\Models\Char\CharCashItem_OutputBox;
|
|
|
class CharController extends Controller
|
|
|
{
|
|
|
/**
|
|
|
- * Получение всех персонажей из базы данных.
|
|
|
+ * Получение всех персонажей из базы данных с пагинацией.
|
|
|
* *
|
|
|
* @return \Illuminate\Http\JsonResponse
|
|
|
*/
|
|
|
- public function GetAllCharacters()
|
|
|
+ public function GetAllCharacters(Request $request)
|
|
|
{
|
|
|
- // Получаем всех персонажей
|
|
|
- $characters = CharBase::all();
|
|
|
+ // Количество элементов на странице. Можно управлять с клиента, передавая GET-параметр ?per_page=N
|
|
|
+ $perPage = $request->input('per_page', 15);
|
|
|
|
|
|
- // Проверяем, найдены ли персонажи
|
|
|
- if($characters->isEmpty()){
|
|
|
- return response()->json(['characters' => [], 'code' => -2, 'msg' => 'Characters not found.'], 200);
|
|
|
- }
|
|
|
+ // Получаем пагинированные данные
|
|
|
+ $charactersPaginator = CharBase::paginate($perPage);
|
|
|
|
|
|
- // Возвращаем только DBKey, Name, Level, AccountName
|
|
|
- $characters = $characters->map(function ($character) {
|
|
|
+ // Если персонажей нет вообще
|
|
|
+ if ($charactersPaginator->total() === 0) {
|
|
|
+ return response()->json(['characters' => (object)[], 'code' => -2, 'msg' => 'Characters not found.'], 200);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Трансформируем коллекцию текущей страницы, чтобы вернуть только нужные поля
|
|
|
+ $transformedCharacters = $charactersPaginator->getCollection()->map(function ($character) {
|
|
|
return [
|
|
|
'DBKey' => $character->DBKey,
|
|
|
'Name' => $character->Name,
|
|
|
'Level' => $character->Level,
|
|
|
'AccountName' => $character->AccountName
|
|
|
];
|
|
|
- });
|
|
|
+ });
|
|
|
|
|
|
- return response()->json([
|
|
|
+ // Собираем кастомный ответ с стандартным объектом пагинации Laravel
|
|
|
+ $paginatedResponse = [
|
|
|
'code' => 0,
|
|
|
'msg' => 'Characters successfully received.',
|
|
|
- 'characters' => $characters
|
|
|
- ], 200);
|
|
|
+ 'characters' => [
|
|
|
+ 'current_page' => $charactersPaginator->currentPage(),
|
|
|
+ 'data' => $transformedCharacters,
|
|
|
+ 'first_page_url' => $charactersPaginator->url(1),
|
|
|
+ 'from' => $charactersPaginator->firstItem(),
|
|
|
+ 'last_page' => $charactersPaginator->lastPage(),
|
|
|
+ 'last_page_url' => $charactersPaginator->url($charactersPaginator->lastPage()),
|
|
|
+ 'links' => $charactersPaginator->linkCollection()->toArray(),
|
|
|
+ 'next_page_url' => $charactersPaginator->nextPageUrl(),
|
|
|
+ 'path' => $charactersPaginator->path(),
|
|
|
+ 'per_page' => $charactersPaginator->perPage(),
|
|
|
+ 'prev_page_url' => $charactersPaginator->previousPageUrl(),
|
|
|
+ 'to' => $charactersPaginator->lastItem(),
|
|
|
+ 'total' => $charactersPaginator->total(),
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+
|
|
|
+ return response()->json($paginatedResponse, 200);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -114,4 +134,4 @@ class CharController extends Controller
|
|
|
'msg' => 'Items successfully sent.'
|
|
|
], 200);
|
|
|
}
|
|
|
-}
|
|
|
+}
|