CharController.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Models\Char\CharBase;
  5. use App\Models\Char\CharCashItem_OutputBox;
  6. class CharController extends Controller
  7. {
  8. /**
  9. * Получение всех персонажей из базы данных с пагинацией.
  10. * *
  11. * @return \Illuminate\Http\JsonResponse
  12. */
  13. public function GetAllCharacters(Request $request)
  14. {
  15. // Количество элементов на странице. Можно управлять с клиента, передавая GET-параметр ?per_page=N
  16. $perPage = $request->input('per_page', 15);
  17. // Получаем пагинированные данные
  18. $charactersPaginator = CharBase::paginate($perPage);
  19. // Если персонажей нет вообще
  20. if ($charactersPaginator->total() === 0) {
  21. return response()->json(['characters' => (object)[], 'code' => -2, 'msg' => 'Characters not found.'], 200);
  22. }
  23. // Трансформируем коллекцию текущей страницы, чтобы вернуть только нужные поля
  24. $transformedCharacters = $charactersPaginator->getCollection()->map(function ($character) {
  25. return [
  26. 'DBKey' => $character->DBKey,
  27. 'Name' => $character->Name,
  28. 'Level' => $character->Level,
  29. 'AccountName' => $character->AccountName
  30. ];
  31. });
  32. // Собираем кастомный ответ с стандартным объектом пагинации Laravel
  33. $paginatedResponse = [
  34. 'code' => 0,
  35. 'msg' => 'Characters successfully received.',
  36. 'characters' => [
  37. 'current_page' => $charactersPaginator->currentPage(),
  38. 'data' => $transformedCharacters,
  39. 'first_page_url' => $charactersPaginator->url(1),
  40. 'from' => $charactersPaginator->firstItem(),
  41. 'last_page' => $charactersPaginator->lastPage(),
  42. 'last_page_url' => $charactersPaginator->url($charactersPaginator->lastPage()),
  43. 'links' => $charactersPaginator->linkCollection()->toArray(),
  44. 'next_page_url' => $charactersPaginator->nextPageUrl(),
  45. 'path' => $charactersPaginator->path(),
  46. 'per_page' => $charactersPaginator->perPage(),
  47. 'prev_page_url' => $charactersPaginator->previousPageUrl(),
  48. 'to' => $charactersPaginator->lastItem(),
  49. 'total' => $charactersPaginator->total(),
  50. ]
  51. ];
  52. return response()->json($paginatedResponse, 200);
  53. }
  54. /**
  55. * Получение всех персонажей пользователя по AccountDBID.
  56. *
  57. * @param string $username
  58. * @return \Illuminate\Http\JsonResponse
  59. */
  60. public function GetUserCharacters($username)
  61. {
  62. // Получаем всех персонажей по $username
  63. $characters = CharBase::where('AccountName', $username)->get();
  64. // Проверяем, найдены ли персонажи
  65. if($characters->isEmpty()){
  66. return response()->json(['characters' => [], 'code' => -2, 'msg' => 'Characters not found for this user.'], 200);
  67. }
  68. // Подсчитываем общее время в игре для всех персонажей пользователя
  69. $totalPlayTime = $characters->sum('TotalPlayTime');
  70. // Возвращаем только DBKey, Name, Level, GuildDBKey, TotalPlayTime персонажей
  71. $characters = $characters->map(function ($character) {
  72. return [
  73. 'DBKey' => $character->DBKey,
  74. 'Name' => $character->Name,
  75. 'Level' => $character->Level,
  76. 'GuildDBKey' => $character->GuildDBKey,
  77. 'CharPlayTime' => $character->TotalPlayTime
  78. ];
  79. });
  80. return response()->json([
  81. 'code' => 0,
  82. 'msg' => 'Characters successfully received.',
  83. 'characters' => $characters,
  84. 'totalPlayTime' => $totalPlayTime
  85. ], 200);
  86. }
  87. public function SendItemToCharacter(Request $request)
  88. {
  89. $character = CharBase::where('DBKey', $request->Owner)->first();
  90. if(!$character){
  91. return response()->json(['code' => -1, 'msg' => 'Character not found.'], 404);
  92. }
  93. $validator = \Validator::make($request->all(), [
  94. 'Owner' => 'required',
  95. 'Kind' => 'required',
  96. 'RecId' => 'required',
  97. 'Amount' => 'required|numeric',
  98. 'Period' => 'required|numeric',
  99. 'evPType' => 'required',
  100. 'Comment' => 'required'
  101. ], [], [
  102. 'Owner' => '',
  103. 'Kind' => '',
  104. 'RecId' => '',
  105. 'Amount' => '',
  106. 'Period' => '',
  107. 'evPType' => '',
  108. 'Comment' => ''
  109. ]);
  110. if(!$validator->passes())
  111. return response()->json(['code' => -1, 'msg' => $validator->errors() ], 400);
  112. CharCashItem_OutputBox::SENDITEMOUTPUTBOX($request);
  113. return response()->json([
  114. 'code' => 0,
  115. 'msg' => 'Items successfully sent.'
  116. ], 200);
  117. }
  118. }