IEnumerator GetAllQuestions()
    {
        string          questionUrl     = StaticVariable.url + "question/AllQuestions";
        UnityWebRequest questionRequest = UnityWebRequest.Get(questionUrl);

        yield return(questionRequest.SendWebRequest());

        if (questionRequest.isNetworkError || questionRequest.isHttpError)
        {
            Debug.Log(questionRequest.error);
            yield break;
        }
        else
        {
            Debug.Log("Get all questions successfully");
        }

        JSONNode questionData = JSON.Parse(questionRequest.downloadHandler.text);

        for (int i = 0; i < questionData.Count; i++)
        {
            QuestionEntry questionEntry = new QuestionEntry
            {
                questionId = questionData[i]["id"].ToString(),
                title      = questionData[i]["problem"],
                accuracy   = questionData[i]["userAnswered"] == 0 ? 0.0 : (double)questionData[i]["userCorrect"] / questionData[i]["userAnswered"]
            };

            Debug.Log("Added");
            questions.Add(questionEntry);
        }

        Display(choice);
    }
Пример #2
0
 public void AddQuestion(string _subject, string _question, List <Answer> _answers)
 {
     if (questionDB.list.Any(item => item.subject == _subject))
     {
         foreach (QuestionList _questionList in questionDB.list)
         {
             if (_questionList.subject == _subject)
             {
                 QuestionEntry entry = new QuestionEntry
                 {
                     question = _question,
                     answers  = _answers
                 };
                 _questionList.questionEntries.Add(entry);
             }
         }
     }
     else
     {
         List <QuestionEntry> entryList = new List <QuestionEntry>();
         entryList.Add(new QuestionEntry
         {
             question = _question,
             answers  = _answers
         });
         questionDB.list.Add(new QuestionList {
             subject = _subject, questionEntries = entryList
         });
     }
 }
Пример #3
0
        public void ModifyQuestionDB()
        {
            QuestionEntry newEntry = new QuestionEntry(_selectedThemeValues, _question.text, _answer1.text, _answer2.text, _answer3.text, _answer4.text, _answer5.text, _toggle1.isOn, _toggle2.isOn, _toggle3.isOn, _toggle4.isOn, _toggle5.isOn);

            _database.ModifyQuestionToDatabase(newEntry, _selectedQuestionID);
            actionText.text = "Modified";
        }
Пример #4
0
        public object Any(Ask request)
        {
            AskResponse response = new AskResponse();

            response.Result = ErrorCode.OK;

            Guid creatorId = UserSession.GetUserId();

            DateTime      dateTime      = DateTime.UtcNow;
            QuestionEntry questionEntry = new QuestionEntry(creatorId, Guid.NewGuid())
            {
                Title        = request.Title,
                Detail       = request.Detail,
                Creation     = dateTime,
                Modification = dateTime,
                Tags         = string.Join(",", request.Tags).ToLowerInvariant()
            };

            TableRepository tableRepository = new TableRepository();

            tableRepository.InsertOrReplace(questionEntry, Tables.Questions);

            IndexHelper.CreateIndex(questionEntry.GetId(), request.Title + " " + questionEntry.Tags, Tables.Questions);

            return(response);
        }
Пример #5
0
        public void AddQuestionToDB()
        {
            QuestionEntry newEntry = new QuestionEntry(_selectedThemeValues, _question.text, _answer1.text, _answer2.text, _answer3.text, _answer4.text, _answer5.text, _toggle1.isOn, _toggle2.isOn, _toggle3.isOn, _toggle4.isOn, _toggle5.isOn);
            string        key      = _database.AddQuestionToDatabase(newEntry);

            _selectedQuestionID = key;
            actionText.text     = "Created";
            //_selectedQuestionValues = _questionsValues[_questionsIDs.IndexOf(key)];
        }
Пример #6
0
        public void ModifyQuestionToDatabase(QuestionEntry entry, string key)
        {
            Dictionary <string, object> entryValues = entry.ToDictionary();

            Dictionary <string, object> childUpdates = new Dictionary <string, object>();

            childUpdates[key] = entryValues;

            FirebaseDatabase.DefaultInstance.RootReference.Child("preguntas").UpdateChildrenAsync(childUpdates);
        }
Пример #7
0
        public static ExtendedQuestionEntry ExtendQuestion(QuestionEntry question, Int32 points)
        {
            // TODO Research a way to extend the question without creating an entire new instance

            return(new ExtendedQuestionEntry
            {
                Question = question.Question,
                Answer = question.Answer,
                PointValue = points
            });
        }
Пример #8
0
        public string AddQuestionToDatabase(QuestionEntry entry)
        {
            // Create new entry at /user-scores/$userid/$scoreid and at
            // /leaderboard/$scoreid simultaneously
            string key = FirebaseDatabase.DefaultInstance.RootReference.Child("preguntas").Push().Key;
            Dictionary <string, object> entryValues = entry.ToDictionary();

            Dictionary <string, object> childUpdates = new Dictionary <string, object>();

            childUpdates[key] = entryValues;

            FirebaseDatabase.DefaultInstance.RootReference.Child("preguntas").UpdateChildrenAsync(childUpdates);

            return(key);
        }
Пример #9
0
        public object Any(Answer request)
        {
            Guid userId = UserSession.GetUserId();

            TableRepository tableRepository = new TableRepository();

            // create answers
            AnswerEntry answerEntry = tableRepository.Get <AnswerEntry>(Tables.Answers, request.QuestionId, userId);

            if (answerEntry == null)
            {
                DateTime dateTime = DateTime.UtcNow;
                answerEntry = new AnswerEntry(request.QuestionId, userId)
                {
                    Content      = request.Content,
                    Creation     = dateTime,
                    Modification = dateTime,
                    Votes        = 0
                };

                // update the answers count
                QuestionEntry questionEntry = tableRepository.Get <QuestionEntry>(Tables.Questions, request.QuestionOwnerId, request.QuestionId);
                if (questionEntry != null)
                {
                    questionEntry.Answers++;
                    tableRepository.InsertOrMerge(questionEntry, Tables.Questions);
                }
            }
            else
            {
                // perform an edit
                answerEntry.Content      = request.Content;
                answerEntry.Modification = DateTime.UtcNow;
            }

            tableRepository.InsertOrMerge(answerEntry, Tables.Answers);

            AnswerResponse response = new AnswerResponse
            {
                Result = ErrorCode.OK
            };


            return(response);
        }
Пример #10
0
        private static void AddIssue(DataRow candidate, QuestionEntry question)
        {
            var item = new HtmlDiv();

            item.AddTo(question.Container, "info-item issue-item");
            var row =
                question.QuestionGroup.FirstOrDefault(
                    r => r.PoliticianKey().IsEqIgnoreCase(candidate.PoliticianKey()));

            if (row == null) // no answer
            {
                item.AddCssClasses("empty-item");
            }
            else
            {
                item.InnerText = row.Answer();
            }
        }
Пример #11
0
 private List <QuestionEntry> Sort(List <QuestionEntry> questionEntryList, int criteria)
 {
     // sort by question ID
     if (criteria == 0)
     {
         for (int i = 0; i < questionEntryList.Count; i++)
         {
             for (int j = i + 1; j < questionEntryList.Count; j++)
             {
                 if (int.Parse(questionEntryList[j].questionId) < int.Parse(questionEntryList[i].questionId))
                 {
                     QuestionEntry temp = questionEntryList[i];
                     questionEntryList[i] = questionEntryList[j];
                     questionEntryList[j] = temp;
                 }
             }
         }
     }
     // sort by accuracy low to high
     else if (criteria == 1)
     {
         for (int i = 0; i < questionEntryList.Count; i++)
         {
             for (int j = i + 1; j < questionEntryList.Count; j++)
             {
                 if (questionEntryList[j].accuracy < questionEntryList[i].accuracy)
                 {
                     QuestionEntry temp = questionEntryList[i];
                     questionEntryList[i] = questionEntryList[j];
                     questionEntryList[j] = temp;
                 }
             }
         }
     }
     // sort by accuracy high to low
     else if (criteria == 2)
     {
         for (int i = 0; i < questionEntryList.Count; i++)
         {
             for (int j = i + 1; j < questionEntryList.Count; j++)
             {
                 if (questionEntryList[j].accuracy > questionEntryList[i].accuracy)
                 {
                     QuestionEntry temp = questionEntryList[i];
                     questionEntryList[i] = questionEntryList[j];
                     questionEntryList[j] = temp;
                 }
             }
         }
     }
     // sort by title
     else if (criteria == 3)
     {
         for (int i = 0; i < questionEntryList.Count; i++)
         {
             for (int j = i + 1; j < questionEntryList.Count; j++)
             {
                 if (string.Compare(questionEntryList[j].title, questionEntryList[i].title) < 0)
                 {
                     QuestionEntry temp = questionEntryList[i];
                     questionEntryList[i] = questionEntryList[j];
                     questionEntryList[j] = temp;
                 }
             }
         }
     }
     return(questionEntryList);
 }
Пример #12
0
        public object Any(Vote request)
        {
            Guid userId = UserSession.GetUserId();

            VoteResponse response = new VoteResponse
            {
                Result = ErrorCode.OK,
            };

            TableRepository tableRepository = new TableRepository();

            UserQuestionEntry userQuestionEntry = tableRepository.Get <UserQuestionEntry>(Tables.UserQuestion, request.QuestionId, userId);

            // Création d'un nouveau vote
            if (userQuestionEntry == null)
            {
                DateTime dateTime = DateTime.UtcNow;
                userQuestionEntry = new UserQuestionEntry(request.QuestionId, userId)
                {
                    Creation     = dateTime,
                    Modification = dateTime
                };
            }
            else
            {
                userQuestionEntry.Modification = DateTime.UtcNow;
            }

            Guid target = request.VoteTarget == VoteTarget.Question ? request.QuestionId : request.OwnerId;

            HashSet <string> votesUp   = new HashSet <string>(userQuestionEntry.VotesUp?.Split('|') ?? new string[] { });
            HashSet <string> votesDown = new HashSet <string>(userQuestionEntry.VotesDown?.Split('|') ?? new string[] { });

            VoteKind oldValue = VoteKind.None;

            if (votesUp.Contains(target.ToString()))
            {
                oldValue = VoteKind.Up;
            }
            else if (votesDown.Contains(target.ToString()))
            {
                oldValue = VoteKind.Down;
            }

            response.VoteKind = request.VoteKind;

            votesUp.Remove(target.ToString());
            votesDown.Remove(target.ToString());

            if (response.VoteKind == oldValue)
            {
                response.VoteKind = VoteKind.None;
            }
            else
            {
                switch (response.VoteKind)
                {
                case VoteKind.Up:
                    votesUp.Add(target.ToString());
                    break;

                case VoteKind.Down:
                    votesDown.Add(target.ToString());
                    break;
                }
            }

            userQuestionEntry.VotesUp   = votesUp.Join("|");
            userQuestionEntry.VotesDown = votesDown.Join("|");

            if (request.VoteTarget == VoteTarget.Answer)
            {
                AnswerEntry answerEntry = tableRepository.Get <AnswerEntry>(Tables.Answers, request.QuestionId, request.OwnerId);
                answerEntry.Votes -= (int)oldValue;
                answerEntry.Votes += (int)response.VoteKind;
                tableRepository.InsertOrMerge(answerEntry, Tables.Answers);
                response.VoteValue = answerEntry.Votes;

                // badges
                if (response.VoteKind == VoteKind.Up)
                {
                    switch (answerEntry.Votes)
                    {
                    case 1: AllBadges.Approved.CreateIfNotExist(tableRepository, answerEntry.GetAnswerOwnerId()); break;

                    case 10: AllBadges.NiceAnswer.CreateForQuestion(tableRepository, answerEntry.GetAnswerOwnerId(), request.QuestionId); break;

                    case 25: AllBadges.GoodAnswer.CreateForQuestion(tableRepository, answerEntry.GetAnswerOwnerId(), request.QuestionId); break;

                    case 100: AllBadges.GreatAnswer.CreateForQuestion(tableRepository, answerEntry.GetAnswerOwnerId(), request.QuestionId); break;
                    }
                }
            }
            else
            {
                QuestionEntry questionEntry = tableRepository.Get <QuestionEntry>(Tables.Questions, request.OwnerId, request.QuestionId);
                questionEntry.Votes -= (int)oldValue;
                questionEntry.Votes += (int)response.VoteKind;
                tableRepository.InsertOrMerge(questionEntry, Tables.Questions);
                response.VoteValue = questionEntry.Votes;

                // badges
                if (response.VoteKind == VoteKind.Up)
                {
                    switch (questionEntry.Votes)
                    {
                    case 1: AllBadges.Padawan.CreateIfNotExist(tableRepository, questionEntry.GetOwnerId()); break;

                    case 10: AllBadges.NiceQuestion.CreateForQuestion(tableRepository, questionEntry.GetOwnerId(), request.QuestionId); break;

                    case 25: AllBadges.GoodQuestion.CreateForQuestion(tableRepository, questionEntry.GetOwnerId(), request.QuestionId); break;

                    case 100: AllBadges.GreatQuestion.CreateForQuestion(tableRepository, questionEntry.GetOwnerId(), request.QuestionId); break;
                    }
                }
            }

            // insert le vote
            tableRepository.InsertOrReplace(userQuestionEntry, Tables.UserQuestion);


            // badges
            if (response.VoteKind == VoteKind.Up)
            {
                AllBadges.Supporter.CreateIfNotExist(tableRepository, userId);
            }
            else if (response.VoteKind == VoteKind.Down)
            {
                AllBadges.Critic.CreateIfNotExist(tableRepository, userId);
            }

            return(response);
        }
Пример #13
0
        public object Any(Answers request)
        {
            TableRepository tableRepository = new TableRepository();
            CloudTable      questionTable   = tableRepository.GetTable(Tables.Questions);

            Guid questionId = Guid.Parse(request.Id);

            TableQuery <QuestionEntry> questionQuery = questionTable.CreateQuery <QuestionEntry>();

            QuestionEntry questionEntry = (from k in questionQuery
                                           where k.RowKey == questionId.ToString()
                                           select k).SingleOrDefault();

            if (questionEntry == null)
            {
                throw HttpError.NotFound("Such question do not exist");
            }

            questionEntry.Views++;
            tableRepository.InsertOrMerge(questionEntry, Tables.Questions);

            CloudTable answerTable = tableRepository.GetTable(Tables.Answers);
            TableQuery <AnswerEntry> answerQuery = answerTable.CreateQuery <AnswerEntry>();

            AnswerEntry[] answerEntries = (from k in answerQuery
                                           where k.PartitionKey == questionId.ToString()
                                           select k).ToArray();


            UserQuestionEntry userQuestionEntry = UserSession.IsAuthenticated
                                            ? tableRepository.Get <UserQuestionEntry>(Tables.UserQuestion, questionId, UserSession.GetUserId())
                                            : null;

            HashSet <string> votesUp   = new HashSet <string>(userQuestionEntry?.VotesUp?.Split('|') ?? new string[] { });
            HashSet <string> votesDown = new HashSet <string>(userQuestionEntry?.VotesDown?.Split('|') ?? new string[] { });

            Func <Guid, VoteKind> getVoteKind = ownerId =>
            {
                if (votesUp.Contains(ownerId.ToString()))
                {
                    return(VoteKind.Up);
                }

                if (votesDown.Contains(ownerId.ToString()))
                {
                    return(VoteKind.Down);
                }

                return(VoteKind.None);
            };

            AnswersResponse answersResponse = new AnswersResponse
            {
                Id             = questionEntry.GetId(),
                Creation       = questionEntry.Creation,
                Owner          = CreateUserCard(tableRepository, questionEntry.GetOwnerId()),
                Detail         = questionEntry.Detail,
                Tags           = questionEntry.Tags.SplitAndTrimOn(new char[] { ',' }),
                Title          = questionEntry.Title,
                Views          = questionEntry.Views,
                Votes          = questionEntry.Votes,
                SelectedAnswer = questionEntry.SelectedAnswer,
                Answers        = answerEntries.Select(k => new AnswerResult
                {
                    Owner    = CreateUserCard(tableRepository, k.GetAnswerOwnerId()),
                    Creation = k.Creation,
                    Content  = k.Content,
                    Votes    = k.Votes,
                    VoteKind = getVoteKind(k.GetAnswerOwnerId())
                }).ToArray()
            };

            // quest user vote for this question
            answersResponse.VoteKind = getVoteKind(questionId);
            answersResponse.Love     = userQuestionEntry?.Love ?? false;

            return(answersResponse);
        }