예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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);
            }
        }