UserController.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Events\UserUpdateCreditsEvent;
  4. use App\Http\Controllers\Controller;
  5. use App\Models\DiscordUser;
  6. use App\Models\User;
  7. use Illuminate\Contracts\Foundation\Application;
  8. use Illuminate\Contracts\Routing\ResponseFactory;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Http\Response;
  11. use Illuminate\Validation\Rule;
  12. use Illuminate\Validation\ValidationException;
  13. class UserController extends Controller
  14. {
  15. /**
  16. * Display a listing of the resource.
  17. *
  18. * @param Request $request
  19. * @return Response
  20. */
  21. public function index(Request $request)
  22. {
  23. return User::paginate($request->query('per_page') ?? 50);
  24. }
  25. /**
  26. * Display the specified resource.
  27. *
  28. * @param int $id
  29. * @return User
  30. */
  31. public function show(int $id)
  32. {
  33. $discordUser = DiscordUser::find($id);
  34. return $discordUser ? $discordUser->user : User::findOrFail($id);
  35. }
  36. /**
  37. * Update the specified resource in storage.
  38. *
  39. * @param Request $request
  40. * @param int $id
  41. * @return User
  42. */
  43. public function update(Request $request, int $id)
  44. {
  45. $discordUser = DiscordUser::find($id);
  46. $user = $discordUser ? $discordUser->user : User::findOrFail($id);
  47. $request->validate([
  48. "name" => "sometimes|string|min:4|max:30",
  49. "email" => "sometimes|string|email",
  50. "credits" => "sometimes|numeric|min:0|max:1000000",
  51. "server_limit" => "sometimes|numeric|min:0|max:1000000",
  52. "role" => ['sometimes', Rule::in(['admin', 'mod', 'client', 'member'])],
  53. ]);
  54. $user->update($request->all());
  55. event(new UserUpdateCreditsEvent($user));
  56. return $user;
  57. }
  58. /**
  59. * increments the users credits or/and server_limit
  60. *
  61. * @param Request $request
  62. * @param int $id
  63. * @return User
  64. * @throws ValidationException
  65. */
  66. public function increment(Request $request, int $id)
  67. {
  68. $discordUser = DiscordUser::find($id);
  69. $user = $discordUser ? $discordUser->user : User::findOrFail($id);
  70. $request->validate([
  71. "credits" => "sometimes|numeric|min:0|max:1000000",
  72. "server_limit" => "sometimes|numeric|min:0|max:1000000",
  73. ]);
  74. if($request->credits){
  75. if ($user->credits + $request->credits >= 99999999) throw ValidationException::withMessages([
  76. 'credits' => "You can't add this amount of credits because you would exceed the credit limit"
  77. ]);
  78. event(new UserUpdateCreditsEvent($user));
  79. $user->increment('credits', $request->credits);
  80. }
  81. if($request->server_limit){
  82. if ($user->server_limit + $request->server_limit >= 2147483647) throw ValidationException::withMessages([
  83. 'server_limit' => "You cannot add this amount of servers because it would exceed the server limit."
  84. ]);
  85. $user->increment('server_limit', $request->server_limit);
  86. }
  87. return $user;
  88. }
  89. /**
  90. * decrements the users credits or/and server_limit
  91. *
  92. * @param Request $request
  93. * @param int $id
  94. * @return User
  95. * @throws ValidationException
  96. */
  97. public function decrement(Request $request, int $id)
  98. {
  99. $discordUser = DiscordUser::find($id);
  100. $user = $discordUser ? $discordUser->user : User::findOrFail($id);
  101. $request->validate([
  102. "credits" => "sometimes|numeric|min:0|max:1000000",
  103. "server_limit" => "sometimes|numeric|min:0|max:1000000",
  104. ]);
  105. if($request->credits){
  106. if($user->credits - $request->credits < 0) throw ValidationException::withMessages([
  107. 'credits' => "You can't remove this amount of credits because you would exceed the minimum credit limit"
  108. ]);
  109. $user->decrement('credits', $request->credits);
  110. }
  111. if($request->server_limit){
  112. if($user->server_limit - $request->server_limit < 0) throw ValidationException::withMessages([
  113. 'server_limit' => "You cannot remove this amount of servers because it would exceed the minimum server."
  114. ]);
  115. $user->decrement('server_limit', $request->server_limit);
  116. }
  117. return $user;
  118. }
  119. /**
  120. * Remove the specified resource from storage.
  121. *
  122. * @param int $id
  123. * @return Application|Response|ResponseFactory
  124. */
  125. public function destroy(int $id)
  126. {
  127. $discordUser = DiscordUser::find($id);
  128. $user = $discordUser ? $discordUser->user : User::findOrFail($id);
  129. $user->delete();
  130. return response($user, 200);
  131. }
  132. }