UserController.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. * @param \Illuminate\Http\Request $request
  41. * @param string $preferenceName
  42. * @return \Illuminate\Http\JsonResponse
  43. */
  44. public function showPreference(Request $request, string $preferenceName)
  45. {
  46. if (! Arr::exists($request->user()->preferences, $preferenceName)) {
  47. abort(404);
  48. }
  49. return response()->json([
  50. 'key' => $preferenceName,
  51. 'value' => $request->user()->preferences[$preferenceName],
  52. ], 200);
  53. }
  54. /**
  55. * Save a preference
  56. *
  57. * @param \App\Api\v1\Requests\SettingUpdateRequest $request
  58. * @param string $preferenceName
  59. * @return \Illuminate\Http\JsonResponse
  60. */
  61. public function setPreference(SettingUpdateRequest $request, string $preferenceName)
  62. {
  63. if (! Arr::exists($request->user()->preferences, $preferenceName)) {
  64. abort(404);
  65. }
  66. $validated = $request->validated();
  67. $request->user()['preferences->' . $preferenceName] = $validated['value'];
  68. $request->user()->save();
  69. Log::info(sprintf('User ID #%s changed its preference %s to %s', $request->user()->id, var_export($preferenceName, true), var_export($validated['value'], true)));
  70. return response()->json([
  71. 'key' => $preferenceName,
  72. 'value' => $request->user()->preferences[$preferenceName],
  73. ], 201);
  74. }
  75. }