private static void UpdateCertificateArchives(UlearnDb db) { var directory = new DirectoryInfo("Templates"); foreach (var file in directory.EnumerateFiles()) { var guid = file.Name.Split(".")[0]; var content = file.ReadAllContent(); var a = db.CertificateTemplateArchives.Find(guid); if (a != null) { a.Content = content; db.SaveChanges(); } else { var id = db.CertificateTemplates.FirstOrDefault(t => t.ArchiveName == guid).Id; db.CertificateTemplateArchives.Add(new CertificateTemplateArchive { ArchiveName = guid, Content = content, CertificateTemplateId = id }); db.SaveChanges(); } Console.WriteLine(guid); } }
// Обновляет пройденные тесты с нулевым баллом public static async Task UpdateTests(UlearnDb db, string courseId) { var courseManager = new CourseManager(CourseManager.GetCoursesDirectory()); var course = courseManager.GetCourse(courseId); var slideCheckingsRepo = new SlideCheckingsRepo(db, null); var visitsRepo = new VisitsRepo(db, slideCheckingsRepo); var tests = course.GetSlides(true).OfType <QuizSlide>().ToList(); foreach (var test in tests) { var testVisits = db.Visits.Where(v => v.CourseId == courseId && v.SlideId == test.Id && v.IsPassed && v.Score == 0).ToList(); foreach (var visit in testVisits) { var answers = db.UserQuizAnswers.Where(s => s.Submission.CourseId == courseId && s.Submission.UserId == visit.UserId && s.Submission.SlideId == visit.SlideId).ToList(); var groupsBySubmission = answers.GroupBy(a => a.Submission.Id).ToList(); foreach (var group in groupsBySubmission) { var submissionAnswers = group.ToList(); var blockAnswers = submissionAnswers.GroupBy(s => s.BlockId); var allQuizInfos = new List <QuizInfoForDb>(); foreach (var ans in blockAnswers) { var quizInfos = CreateQuizInfo(test, ans); if (quizInfos != null) { allQuizInfos.AddRange(quizInfos); } } foreach (var answer in submissionAnswers) { var valid = allQuizInfos.First(i => i.BlockId == answer.BlockId && i.ItemId == answer.ItemId); answer.QuizBlockScore = valid.QuizBlockScore; answer.QuizBlockMaxScore = valid.QuizBlockMaxScore; } var score = allQuizInfos .DistinctBy(forDb => forDb.BlockId) .Sum(forDb => forDb.QuizBlockScore); var checking = db.AutomaticQuizCheckings.FirstOrDefault(c => c.Submission.Id == group.Key); if (checking != null) // В случае попытки сверх лимита AutomaticQuizCheckings не создается, но ответы сохраняются в UserQuizAnswers { checking.Score = score; } db.SaveChanges(); } await visitsRepo.UpdateScoreForVisit(courseId, test, visit.UserId); } Console.WriteLine(test.Id); } }
public void DropQuiz(string userId, Guid slideId) { var quizzes = db.UserQuizzes.Where(q => q.UserId == userId && q.SlideId == slideId).ToList(); foreach (var q in quizzes) { q.isDropped = true; } db.SaveChanges(); }
private static void TextBlobsWithZeroByte(UlearnDb db) { int i = 0; var hashes = new List <string>(); foreach (var text in db.Texts.AsNoTracking()) { if (text.Text.Contains('\0')) { Console.WriteLine(i); hashes.Add(text.Hash); i++; } } i = 0; foreach (var hash in hashes) { var temp = db.Texts.Find(hash); temp.Text = temp.Text.Replace("\0", ""); Console.WriteLine("s" + i); i++; db.SaveChanges(); } }
public QuizVersion AddQuizVersionIfNeeded(string courseId, QuizSlide slide) { var slideId = slide.Id; var quizXml = slide.QuizNormalizedXml; var lastQuizVersion = GetLastQuizVersion(courseId, slideId); var newQuizVersion = new QuizVersion { CourseId = courseId, SlideId = slideId, LoadingTime = DateTime.Now, NormalizedXml = quizXml }; if (lastQuizVersion == null || lastQuizVersion.NormalizedXml != newQuizVersion.NormalizedXml) { db.QuizVersions.Add(newQuizVersion); db.SaveChanges(); return(newQuizVersion); } return(lastQuizVersion); }
public void Delete(UserQuestion userSolution) { db.UserQuestions.Remove(userSolution); db.SaveChanges(); }