except('withShow')); $userFilter = (new User())->searchFilter($queryParams); if ($request->withShow) { $userFilter = $userFilter->with('showDjs'); } return response()->json($userFilter->get()); } /** * @throws \Exception */ public function store(Request $request) { try { $showInfos = $request->show; $showDaysRules = $request->showDaysRules; $showDjs = $request->showDjs; $show = Show::firstOrCreate($showInfos); $this->manageShowDays($show, $showDaysRules); $this->manageShowDjs($showDjs, $show); } catch (Exception $e) { return response()->json(['message' => $e->getMessage()], 500); } return response()->json(['message' => 'Show created successfully']); } public function show(User $user) { $allowedRoles = ['admin', 'editor']; $authenticatedUser = auth()->user(); if ( ! $authenticatedUser && ! in_array($authenticatedUser->type, $allowedRoles)) { return response()->json(['message' => 'Forbidden'], 403); } return response()->json($user); } public function userProfile() { $user =auth()->user(); $user->role = $user->roles()->value('name'); return response()->json($user); } public function update(Request $request, User $user, UpdateUserProfileInformation $updater) { $authenticatedUser = auth()->user(); if ($authenticatedUser->id !== $user->id && !$authenticatedUser->hasPermissionTo('user.manageAll')) { return response()->json(['message' => 'You do not have permission to edit other users.'], 403); } if ($authenticatedUser->id === $user->id && !$authenticatedUser->hasPermissionTo('users.manageOwn')) { return response()->json(['message' => 'You do not have permission to edit your own profile.'], 403); } try { $updater->update($user, $request->all()); $user->load('preferences'); return response()->json($user); } catch (\Throwable $e) { Log::error($e->getMessage()); if ($e instanceof \Illuminate\Validation\ValidationException) { return response()->json(['message' => $e->getMessage(), 'errors' => $e->errors()], 422); } return response()->json(['message' => 'Failed to update user'], 500); } } public function destroy(Request $request) { try { $showIds = $request->input('showIds'); Show::destroy($showIds); $responseMessage = 'Shows deleted'; } catch (Exception $e) { return response()->json(['message' => $e->getMessage()], 500); } return response()->json(['message' => $responseMessage]); } }