Search⌘ K
AI Features

Implementing QuizSession

Explore how to implement the QuizSession module in Elixir using GenServer. Understand how to manage quiz state, handle answering questions, and control the quiz lifecycle with precise process isolation and error handling within the OTP framework.

Answering a question

Now, a user can start a quiz with a start_link and a call to :select_question. What remains is to answer a question. We’ll enter them in lib/mastery/boundary/quiz_session.ex:

C++
def handle_call({:answer_question, answer}, _from, {quiz, email}) do
quiz
|> Quiz.answer_question(Response.new(quiz, email, answer))
|> Quiz.select_question
|> maybe_finish(email)
end
defp maybe_finish(nil, _email), do: {:stop, :normal, :finished, nil}
defp maybe_finish(quiz, email) do
{
:reply,
{quiz.current_question.asked, quiz.last_response.correct},
{quiz, email}
}
end
  • This function calls answer_question to answer the question and then advance the quiz.

  • It returns the presentation data that we will need later to show to the user the ...