public async Task <IHttpActionResult> CheckMixTask(TrainingMixTask task) { if (task == null) { return(BadRequest("Invalid parameter")); } //Only for demo //await _service.SetTimeAsync(task.WordSuiteId); if (task.Answer.Count == 0 || task.Questions.Count == 0 || task.Answer.Count != task.Questions.Count) { return(BadRequest("Invalid model")); } task.Result = new List <bool>(); for (int i = 0; i < task.Questions.Count; i++) { if (task.Questions[i].Synonyms != null) { if (task.Questions[i].Synonyms.Count == 0) { return(BadRequest("Invalid model")); } var synonyms = await _wordTranslationService.GetAllWordSynonymsById(task.Questions[i].Synonyms[0].Id ?? default(int)); var result = synonyms.Exists(x => x.Value.ToLower() == task.Answer[i].ToLower()); task.Result.Add(result); if (result) { _progressService.IncrementProgressOfOriginalWord(task.WordSuiteId, task.Answer[i]); } } else if (task.Questions[i].Translation != null) { var wordTranslation = await _wordTranslationService.GetByIdWithWordsAsync(task.Questions[i].Translation.Id ?? default(int)); if (wordTranslation != null) { task.Result.Add(wordTranslation.OriginalWord.Value.ToLower() == task.Answer[i].ToLower()); } else { return(InternalServerError()); } } else if (task.Questions[i].Description != null) { var word = await _wordService.GetWordByIdAsync(task.Questions[i].Description.Id ?? default(int)); if (word != null) { task.Result.Add(word.Value.ToLower() == task.Answer[i].ToLower()); } else { return(InternalServerError()); } } else { return(BadRequest("Invalid model")); } } return(Ok(task)); }