UserController.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace App\Api\v1\Controllers;
  3. use App\Api\v1\Resources\UserResource;
  4. use App\Api\v1\Requests\SettingUpdateRequest;
  5. use App\Http\Controllers\Controller;
  6. use App\Models\User;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Arr;
  9. class UserController extends Controller
  10. {
  11. /**
  12. * Get detailed information about a user
  13. *
  14. * @return \App\Api\v1\Resources\UserResource|\Illuminate\Http\JsonResponse
  15. */
  16. public function show(Request $request)
  17. {
  18. // 2 cases:
  19. // - The method is called from a protected route > we return the request's authenticated user
  20. // - The method is called from a guest route > we fetch a possible registered user
  21. $user = $request->user() ?: User::first();
  22. return $user
  23. ? new UserResource($user)
  24. : response()->json(['name' => null], 200);
  25. }
  26. /**
  27. * List all preferences
  28. *
  29. * @return \Illuminate\Http\JsonResponse
  30. */
  31. public function allPreferences(Request $request)
  32. {
  33. $preferences = $request->user()->preferences;
  34. $jsonPrefs = collect([]);
  35. $preferences->each(function (mixed $item, string $key) use ($jsonPrefs) {
  36. $jsonPrefs->push([
  37. 'key' => $key,
  38. 'value' => $item,
  39. ]);
  40. });
  41. return response()->json($jsonPrefs->all(), 200);
  42. }
  43. /**
  44. * Display a preference
  45. *
  46. * @param \Illuminate\Http\Request $request
  47. * @param string $preferenceName
  48. * @return \Illuminate\Http\JsonResponse
  49. */
  50. public function showPreference(Request $request, string $preferenceName)
  51. {
  52. if (! Arr::exists($request->user()->preferences, $preferenceName)) {
  53. abort(404);
  54. }
  55. return response()->json([
  56. 'key' => $preferenceName,
  57. 'value' => $request->user()->preferences[$preferenceName],
  58. ], 200);
  59. }
  60. /**
  61. * Save a preference
  62. *
  63. * @param \App\Api\v1\Requests\SettingUpdateRequest $request
  64. * @param string $preferenceName
  65. * @return \Illuminate\Http\JsonResponse
  66. */
  67. public function setPreference(SettingUpdateRequest $request, string $preferenceName)
  68. {
  69. if (! Arr::exists($request->user()->preferences, $preferenceName)) {
  70. abort(404);
  71. }
  72. $validated = $request->validated();
  73. $request->user()['preferences->'.$preferenceName] = $validated['value'];
  74. $request->user()->save();
  75. return response()->json([
  76. 'key' => $preferenceName,
  77. 'value' => $request->user()->preferences[$preferenceName],
  78. ], 201);
  79. }
  80. }