/// <summary> /// Sauvegarde la réponse fournie dans le médium de stockage. /// </summary> /// <param name="userId">L'identifiant unique de l'utilisateur.</param> /// <param name="question">La question, incluant sa réponse.</param> /// <exception cref="InvalidIdException">Cette exception sera lancée si l'un des identifiants fournis au DAO est invalide</exception> /// <exception cref="PersistenceException">Cette exception sera lancée si le DAO est incapable de communiquer avec le médium de stockage pour sauvegarder la réponse</exception> public void SaveAnswer(int userId, PollQuestion question) { // Vérification d'un poll ID valide IList <PollQuestion> questions; if (!availablePolls.TryGetValue(question.PollId, out questions)) { throw new InvalidIdException(question.PollId.ToString(), "Invalid poll ID!"); } // S'il existe déjà des réponses pour ce sondage, on vérifie si l'utilisateur courant y a déjà répondu IDictionary <int, IList <PollQuestion> > pollAnswers; if (answeredPolls.TryGetValue(question.PollId, out pollAnswers)) { // S'il existe déjà des réponses pour cet usager, on vérifie s'il a déjà répondu à cette question en particulier IList <PollQuestion> answersByUser; if (pollAnswers.TryGetValue(userId, out answersByUser)) { int deleteIndex = -1; for (int i = 0; i < answersByUser.Count; i++) { if (answersByUser[i].QuestionId == question.QuestionId) { deleteIndex = i; } } // Si l'usager avait déjà répondu à cette question, on supprime sa réponse précédente if (deleteIndex > -1) { answersByUser.RemoveAt(deleteIndex); } } // S'il n'existe pas de réponses pour cet usager, on crée une nouvelle liste de réponses else { answersByUser = new List <PollQuestion>(); pollAnswers.Add(userId, answersByUser); } // Ensuite on ajoute sa nouvelle réponse answersByUser.Add(question); } // Si aucune question n'a jamais été répondue pour le sondage courant, on crée une nouvelle entrée else { pollAnswers = new Dictionary <int, IList <PollQuestion> >(); IList <PollQuestion> answersByUser = new List <PollQuestion>(); answersByUser.Add(question); pollAnswers.Add(userId, answersByUser); answeredPolls.Add(question.PollId, pollAnswers); } }
/// <summary> /// Sauvegarde la réponse fournie dans le médium de stockage. /// </summary> /// <param name="userId">L'identifiant unique de l'utilisateur.</param> /// <param name="question">La question, incluant sa réponse.</param> /// <exception cref="InvalidIdException">Cette exception sera lancée si l'un des identifiants fournis au DAO est invalide</exception> /// <exception cref="PersistenceException">Cette exception sera lancée si le DAO est incapable de communiquer avec le médium de stockage pour sauvegarder la réponse</exception> public void SaveAnswer(int userId, PollQuestion question) { // Vérification d'un poll ID valide IList<PollQuestion> questions; if (!availablePolls.TryGetValue(question.PollId, out questions)) { throw new InvalidIdException(question.PollId.ToString(), "Invalid poll ID!"); } // S'il existe déjà des réponses pour ce sondage, on vérifie si l'utilisateur courant y a déjà répondu IDictionary<int, IList<PollQuestion>> pollAnswers; if (answeredPolls.TryGetValue(question.PollId, out pollAnswers)) { // S'il existe déjà des réponses pour cet usager, on vérifie s'il a déjà répondu à cette question en particulier IList<PollQuestion> answersByUser; if (pollAnswers.TryGetValue(userId, out answersByUser)) { int deleteIndex = -1; for (int i = 0; i < answersByUser.Count; i++) { if (answersByUser[i].QuestionId == question.QuestionId) { deleteIndex = i; } } // Si l'usager avait déjà répondu à cette question, on supprime sa réponse précédente if (deleteIndex > -1) { answersByUser.RemoveAt(deleteIndex); } } // S'il n'existe pas de réponses pour cet usager, on crée une nouvelle liste de réponses else { answersByUser = new List<PollQuestion>(); pollAnswers.Add(userId, answersByUser); } // Ensuite on ajoute sa nouvelle réponse answersByUser.Add(question); } // Si aucune question n'a jamais été répondue pour le sondage courant, on crée une nouvelle entrée else { pollAnswers = new Dictionary<int, IList<PollQuestion>>(); IList<PollQuestion> answersByUser = new List<PollQuestion>(); answersByUser.Add(question); pollAnswers.Add(userId, answersByUser); answeredPolls.Add(question.PollId, pollAnswers); } }