UserController.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\DiscordUser;
  5. use App\Models\User;
  6. use Illuminate\Contracts\Foundation\Application;
  7. use Illuminate\Contracts\Routing\ResponseFactory;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Http\Response;
  10. use Illuminate\Validation\Rule;
  11. class UserController extends Controller
  12. {
  13. /**
  14. * Display a listing of the resource.
  15. *
  16. * @param Request $request
  17. * @return Response
  18. */
  19. public function index(Request $request)
  20. {
  21. return User::paginate($request->query('per_page') ?? 50);
  22. }
  23. /**
  24. * Display the specified resource.
  25. *
  26. * @param int $id
  27. * @return User
  28. */
  29. public function show(int $id)
  30. {
  31. $discordUser = DiscordUser::find($id);
  32. return $discordUser ? $discordUser->user : User::findOrFail($id);
  33. }
  34. /**
  35. * Update the specified resource in storage.
  36. *
  37. * @param Request $request
  38. * @param int $id
  39. * @return User
  40. */
  41. public function update(Request $request, int $id)
  42. {
  43. $discordUser = DiscordUser::find($id);
  44. $user = $discordUser ? $discordUser->user : User::findOrFail($id);
  45. $request->validate([
  46. "name" => "sometimes|string|min:4|max:30",
  47. "email" => "sometimes|string|email",
  48. "credits" => "sometimes|numeric|min:0|max:1000000",
  49. "server_limit" => "sometimes|numeric|min:0|max:1000000",
  50. "role" => ['sometimes', Rule::in(['admin', 'mod', 'client', 'member'])],
  51. ]);
  52. $user->update($request->all());
  53. return $user;
  54. }
  55. /**
  56. * Give credits to a user.
  57. *
  58. * @param Request $request
  59. * @param int $id
  60. * @return User
  61. */
  62. public function addCredits(Request $request, int $id)
  63. {
  64. $discordUser = DiscordUser::find($id);
  65. $user = $discordUser ? $discordUser->user : User::findOrFail($id);
  66. $request->validate([
  67. "credits" => "required|numeric|min:0|max:1000000",
  68. ]);
  69. if ($request->user()->credits + $request->credits >= 99999999) throw ValidationException::withMessages([
  70. 'code' => "You can't add this amount of credits because you would exceed the credit limit"
  71. ]);
  72. $user->increment('credits', $request->credits);
  73. return $user;
  74. }
  75. /**
  76. * Remove the specified resource from storage.
  77. *
  78. * @param int $id
  79. * @return Application|ResponseFactory|Response|void
  80. */
  81. public function destroy(int $id)
  82. {
  83. $discordUser = DiscordUser::find($id);
  84. $user = $discordUser ? $discordUser->user : User::findOrFail($id);
  85. $user->delete();
  86. return response($user, 200);
  87. }
  88. }