@Path("/")
 @GET
 @Produces(MediaType.APPLICATION_JSON)
 public QuestionResponseDto getQuestion() {
   return dozerMapper.map(
       questionManager.loadQuestions().getRandomQuestion(), QuestionResponseDto.class);
 }
  @Path("/{username}/create")
  @PUT
  public javax.ws.rs.core.Response addQuestionForUser(@PathParam("username") String userName) {
    List<Game> gamesAllReadyPlayed = gameUserDataManager.getGames(userName);
    List<Question> allQuestions = questionManager.loadQuestions().getQuestions();

    if (gamesAllReadyPlayed.size() == allQuestions.size()) {
      // NOTHING TO DO : the player allready answered all questions
      return javax.ws.rs.core.Response.ok().build();
    }

    Question randomQuestion = getRandomQuestion(gamesAllReadyPlayed, allQuestions);

    Game game = new Game();
    game.setId(randomQuestion.getId());
    game.setType(ResponseType.NEED_RESPONSE);

    try {
      gameUserDataManager.addOrUpdateGame(userName, game);
    } catch (StorageException e) {
      LOGGER.error("unable to store result in mongoDb: {}", e.getMessage());
    }

    questionsNotifier.notifyListener(userName, randomQuestion);

    return javax.ws.rs.core.Response.ok().build();
  }
 @Path("/{username}")
 @GET
 @Produces(MediaType.APPLICATION_JSON)
 public AllQuestionResponseDto getAllQuestions(@PathParam("username") String username) {
   List<Game> games =
       gameUserDataManager.getGamesByResultType(username, ResponseType.NEED_RESPONSE);
   AllQuestionResponseDto results = new AllQuestionResponseDto();
   for (Game game : games) {
     results.addQuestion(
         dozerMapper.map(
             questionManager.loadQuestions().getQuestionById(game.getId()),
             QuestionResponseDto.class));
   }
   return results;
 }
  @Path("/{username}/reply")
  @POST
  @Consumes(MediaType.APPLICATION_JSON)
  @Produces(MediaType.APPLICATION_JSON)
  public ResponseResponseDto giveResponse(ResponseRequestDto responseDto) {
    Response res = dozerMapper.map(responseDto, Response.class);

    ResponseResponseDto response = new ResponseResponseDto();

    Set<ConstraintViolation<Response>> constraintViolations = validator.validate(res);
    if (constraintViolations.size() != 0) {
      LOGGER.error("Invalid response from user");
      response.setResponseType(ResponseType.INVALID);
      return response;
    }
    Question question = questionManager.loadQuestions().getQuestionById(res.getId());
    List<String> answers = question.getAnswers();
    List<String> responses = responseDto.getResponses();

    response.setId(res.getId());
    response.setAnswer(responses);
    response.setResponseType(ResponseType.FAIL);

    if (answers.size() == responses.size()) {
      // TODO : gerer le cas des majuscules/minuscules
      if (answers.containsAll(responses)) {
        response.setResponseType(ResponseType.SUCCESS);
      }
    }

    Game game = gameUserDataManager.getGameById(responseDto.getUserName(), res.getId());

    if (game == null) {
      game = new Game();
      game.setId(response.getId());
    }
    game.setGivenAnswers(response.getAnswer());
    game.setType(response.getResponseType());
    try {
      gameUserDataManager.addOrUpdateGame(responseDto.getUserName(), game);
    } catch (StorageException e) {
      LOGGER.error("unable to store result in mongoDb: {}", e.getMessage());
    }

    return response;
  }