public async Task AcceptQuestionAsync(int id) { //security check await _questionService.CheckWriteAccessToQuestion(id); Question question = await _dbContext.FindAsync <Question>(id); if (question.Status != QuestionStatus.Created) { new CraniumException($"Question #{id} is not in state created."); } question.Status = QuestionStatus.Released; question.ApprovalDate = DateTime.Now; IList <Question> previousQuestions = await _dbContext.Questions .Where(x => x.IdContainer == question.IdContainer) .Where(x => x.Status == QuestionStatus.Released) .Where(x => x.Id != id) .Include(x => x.RelTags) .ToListAsync(); TagDto deprecatedTag = await _tagService.GetSpecialTagAsync(SpecialTag.Deprecated); Tag deprecatedTagEntity = await _dbContext.FindAsync <Tag>(deprecatedTag.Id); foreach (Question previousQuestion in previousQuestions) { previousQuestion.Status = QuestionStatus.Obsolete; if (!previousQuestion.RelTags.Any(x => x.IdTag == deprecatedTag.Id)) { RelQuestionTag relQuestionTag = new RelQuestionTag { Question = previousQuestion, Tag = deprecatedTagEntity, }; await _dbContext.RelQuestionTags.AddAsync(relQuestionTag); } } await _dbContext.SaveChangesAsync(); await SendNotification(id, "QuestionAcceptTitle", "QuestionAcceptText"); }
protected virtual void CopyData(object dto, CranEntity entity) { if (dto is QuestionOptionDto && entity is QuestionOption) { QuestionOptionDto dtoSource = (QuestionOptionDto)dto; QuestionOption entityDestination = (QuestionOption)entity; entityDestination.IsTrue = dtoSource.IsTrue; entityDestination.Text = dtoSource.Text ?? string.Empty; entityDestination.IdQuestion = dtoSource.IdQuestion; } else if (dto is QuestionDto && entity is Question) { QuestionDto dtoSource = (QuestionDto )dto; Question entityDestination = (Question)entity; entityDestination.Title = dtoSource.Title; entityDestination.Text = dtoSource.Text ?? string.Empty; entityDestination.Explanation = dtoSource.Explanation; entityDestination.QuestionType = dtoSource.QuestionType; entityDestination.Language = Enum.Parse <Language>(dtoSource.Language); } else if (dto is RelQuestionTagDto && entity is RelQuestionTag) { RelQuestionTagDto dtoSource = (RelQuestionTagDto)dto; RelQuestionTag entityDestination = (RelQuestionTag)entity; entityDestination.IdQuestion = dtoSource.IdQuestion; entityDestination.IdTag = dtoSource.IdTag; } else if (dto is RelQuestionImageDto && entity is RelQuestionImage) { RelQuestionImageDto dtoSource = (RelQuestionImageDto)dto; RelQuestionImage entityDestination = (RelQuestionImage)entity; entityDestination.IdQuestion = dtoSource.IdQuestion; entityDestination.IdImage = dtoSource.IdImage; } else if (dto is ImageDto && entity is Image) { ImageDto dtoSource = (ImageDto)dto; Image entityDestination = (Image)entity; entityDestination.Width = dtoSource.Width; entityDestination.Height = dtoSource.Height; entityDestination.Full = dtoSource.Full; } else if (dto is CourseDto && entity is Course) { CourseDto dtoSource = (CourseDto)dto; Course entityDestination = (Course)entity; entityDestination.Title = dtoSource.Title; entityDestination.Language = Enum.Parse <Language>(dtoSource.Language); entityDestination.NumQuestionsToAsk = dtoSource.NumQuestionsToAsk; entityDestination.Description = dtoSource.Description; } else if (dto is RelCourseTagDto && entity is RelCourseTag) { RelCourseTagDto dtoSource = (RelCourseTagDto)dto; RelCourseTag entityDestination = (RelCourseTag)entity; entityDestination.IdCourse = dtoSource.IdCourse; entityDestination.IdTag = dtoSource.IdTag; } else { throw new NotImplementedException(); } }
protected virtual void CreateMockQuestion(ApplicationDbContext context, int id, IList <Tag> tags) { Question question = new Question() { Explanation = $"Explanation{id}", Text = $"Text{id}", User = new CranUser() { UserId = $"UserId{id}", }, Container = new Container() { }, Status = QuestionStatus.Released, Language = Language.De, QuestionType = QuestionType.MultipleChoice, }; context.Questions.Add(question); //Options for (int i = 1; i <= 4; i++) { QuestionOption option = new QuestionOption() { IdQuestion = question.Id, Text = $"OptionText{i}", IsTrue = i % 2 == 0, Question = question, }; question.Options.Add(option); context.QuestionOptions.Add(option); } //Tags foreach (Tag tag in tags.Where(x => x.TagType == TagType.Standard)) { RelQuestionTag relTag = new RelQuestionTag { Question = question, Tag = tag, }; context.RelQuestionTags.Add(relTag); } //Binary for (int i = 1; i <= 3; i++) { Binary binary = new Binary() { ContentType = "image/png", FileName = $"Filename{i + id * 1000}", ContentDisposition = $"form-data; name=\"files\"; filename=\"Untitled.png\"", Length = 20618, }; context.Binaries.Add(binary); Image image = new Image() { Binary = binary, Height = 300, }; context.Images.Add(image); RelQuestionImage relQuestionImage = new RelQuestionImage { Question = question, Image = image, }; context.RelQuestionImages.Add(relQuestionImage); } context.SaveChanges(); }
private void CopyDataRelQuestonTag(RelQuestionTagDto dto, RelQuestionTag entity) { entity.IdQuestion = dto.IdQuestion; entity.IdTag = dto.IdTag; }