UserController.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Api\v1\Controllers;
  3. use App\Api\v1\Requests\SettingUpdateRequest;
  4. use App\Api\v1\Resources\UserResource;
  5. use App\Http\Controllers\Controller;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Arr;
  8. use Illuminate\Support\Facades\Log;
  9. class UserController extends Controller
  10. {
  11. /**
  12. * Get detailed information about the authenticated user
  13. *
  14. * @return \App\Api\v1\Resources\UserResource|\Illuminate\Http\JsonResponse
  15. */
  16. public function show(Request $request)
  17. {
  18. return new UserResource($request->user());
  19. }
  20. /**
  21. * List all preferences
  22. *
  23. * @return \Illuminate\Http\JsonResponse
  24. */
  25. public function allPreferences(Request $request)
  26. {
  27. $preferences = $request->user()->preferences;
  28. $jsonPrefs = collect([]);
  29. $preferences->each(function (mixed $item, string $key) use ($jsonPrefs) {
  30. $jsonPrefs->push([
  31. 'key' => $key,
  32. 'value' => $item,
  33. ]);
  34. });
  35. return response()->json($jsonPrefs->all(), 200);
  36. }
  37. /**
  38. * Display a preference
  39. *
  40. * @return \Illuminate\Http\JsonResponse
  41. */
  42. public function showPreference(Request $request, string $preferenceName)
  43. {
  44. if (! Arr::exists($request->user()->preferences, $preferenceName)) {
  45. abort(404);
  46. }
  47. return response()->json([
  48. 'key' => $preferenceName,
  49. 'value' => $request->user()->preferences[$preferenceName],
  50. ], 200);
  51. }
  52. /**
  53. * Save a preference
  54. *
  55. * @return \Illuminate\Http\JsonResponse
  56. */
  57. public function setPreference(SettingUpdateRequest $request, string $preferenceName)
  58. {
  59. if (! Arr::exists($request->user()->preferences, $preferenceName)) {
  60. abort(404);
  61. }
  62. $validated = $request->validated();
  63. $request->user()['preferences->' . $preferenceName] = $validated['value'];
  64. $request->user()->save();
  65. Log::info(sprintf('User ID #%s changed its preference %s to %s', $request->user()->id, var_export($preferenceName, true), var_export($validated['value'], true)));
  66. return response()->json([
  67. 'key' => $preferenceName,
  68. 'value' => $request->user()->preferences[$preferenceName],
  69. ], 201);
  70. }
  71. }