query('q'); if (! is_string($query) || trim($query) === '') { return new JsonResponse(['users' => []], 200); } try { $results = $this->searchUsers->execute( new SearchUsersRequest(query: $query), ); } catch (BadRequestException $exception) { return new JsonResponse( ['error' => $exception->getMessage()], 400, ); } return new JsonResponse([ 'users' => array_map( function (User $user) { return [ 'id' => $user->getId(), 'email' => $user->getEmail()->value(), 'displayName' => $user->getDisplayName(), 'isAdmin' => $user->isAdmin(), ]; }, $results, ), ], 200); } public function promote(Request $request): JsonResponse { /** @var User $requester */ $requester = $request->attributes->get('user'); try { $promoted = $this->promoteUserToAdmin->execute( new PromoteUserToAdminRequest( targetUserId: (int) $request->input('userId'), requesterIsAdmin: $requester->isAdmin(), ), ); } catch (BadRequestException $exception) { return new JsonResponse( ['error' => $exception->getMessage()], 400, ); } catch (ForbiddenException $exception) { return new JsonResponse( ['error' => $exception->getMessage()], 403, ); } catch (DomainException $exception) { return new JsonResponse( ['error' => $exception->getMessage()], 404, ); } return new JsonResponse([ 'user' => [ 'id' => $promoted->getId(), 'email' => $promoted->getEmail()->value(), 'displayName' => $promoted->getDisplayName(), 'isAdmin' => $promoted->isAdmin(), ], ], 200); } }