コード例 #1
0
        private async Task QuizCleanup()
        {
            var quizzes = await _db.Quiz.ToListAsync();

            foreach (var quiz in quizzes.Where(q => q.IsActive))
            {
                quiz.IsActive = false;
            }
            foreach (var quiz in quizzes)
            {
                var userAnswers = await _db.UserAnswer.Where(u => u.Quiz.QuizId == quiz.QuizId).ToListAsync();

                if (userAnswers != null)
                {
                    foreach (var answer in userAnswers)
                    {
                        _db.Remove(answer);
                    }
                }
            }
            await _db.SaveChangesAsync();
        }
コード例 #2
0
        public async Task ImportQuestions([Remainder] string args = null)
        {
            if (args == null)
            {
                await ReplyAsync("Please specify tech, general, or extra!");

                return;
            }

            var testName = string.Empty;
            var testDesc = string.Empty;

            switch (args.ToLower())
            {
            case "tech":
            {
                testName = "tech";
                testDesc = "U.S. Ham Radio test for the technician class license.";
                break;
            }

            case "general":
            {
                testName = "general";
                testDesc = "U.S. Ham Radio test for the general class license.";
                break;
            }

            case "extra":
            {
                testName = "extra";
                testDesc = "U.S. Ham Radio test for the extra class license.";
                break;
            }

            default:
            {
                await ReplyAsync("Please specify tech, general, or extra!");

                return;
            }
            }
            var curFile  = Directory.GetFiles($"import/{testName}").Where(f => f.Contains(testName) && f.Contains(".json")).FirstOrDefault();
            var fileName = Path.GetFileNameWithoutExtension(curFile);

            DateTime startDate = DateTime.Parse(fileName.Split('_')[1]);
            DateTime endDate   = DateTime.Parse(fileName.Split('_')[2]);

            var test = _db.HamTest.Where(t => t.TestName == testName).FirstOrDefault();

            if (test == null)
            {
                await _db.AddAsync(
                    new HamTest {
                    TestName        = testName,
                    TestDescription = testDesc,
                    FromDate        = startDate,
                    ToDate          = endDate
                });

                await _db.SaveChangesAsync();
            }
            else
            {
                //clear old test items
                var figures = _db.Figure.Where(f => f.Test.TestName == testName).ToList();
                if (figures != null)
                {
                    foreach (var figure in figures)
                    {
                        _db.Remove(figure);
                    }
                    await _db.SaveChangesAsync();
                }
                var answers = _db.Answer.Where(a => a.Question.Test.TestName == testName).ToList();
                if (answers != null)
                {
                    foreach (var answer in answers)
                    {
                        _db.Remove(answer);
                    }
                    await _db.SaveChangesAsync();
                }
                var questions = _db.Questions.Where(q => q.Test.TestName == testName).ToList();
                if (questions != null)
                {
                    foreach (var questionItem in questions)
                    {
                        _db.Remove(questionItem);
                    }
                    await _db.SaveChangesAsync();
                }
            }

            test          = _db.HamTest.Where(t => t.TestName == testName).FirstOrDefault();
            test.FromDate = startDate;
            test.ToDate   = endDate;
            await _db.SaveChangesAsync();

            //get questions converted from json to C# objects
            var question = QuestionIngest.FromJson(File.ReadAllText(curFile));

            //loop through and add to the database
            foreach (var item in question)
            {
                var questionText = item.Question;
                var answerchar   = Char.Parse(item.AnswerKey.ToString());
                var questionId   = item.QuestionId;
                var fccPart      = item.FccPart;
                var subDesc      = item.SubelementDesc;
                var subName      = item.SubelementName;

                if (string.IsNullOrEmpty(fccPart))
                {
                    await _db.AddAsync(
                        new Questions {
                        QuestionText    = questionText,
                        QuestionSection = questionId,
                        SubelementDesc  = subDesc,
                        FigureName      = item.Figure,
                        SubelementName  = subName.ToString(),
                        Test            = test
                    });
                }
                else
                {
                    await _db.AddAsync(
                        new Questions {
                        QuestionText    = questionText,
                        QuestionSection = questionId,
                        FccPart         = fccPart,
                        SubelementDesc  = subDesc,
                        FigureName      = item.Figure,
                        SubelementName  = subName.ToString(),
                        Test            = test
                    });
                }

                //save question to db
                await _db.SaveChangesAsync();

                //get the current question we just added, so we can associate the answer
                var curQuestion = _db.Questions.Where(q => q.QuestionSection == item.QuestionId).FirstOrDefault();

                //iterate through all the answers and add them
                foreach (var answer in item.PossibleAnswer)
                {
                    bool isAnswer      = false;
                    var  posAnswerText = answer.Substring(3);
                    var  posAnswerChar = answer.Substring(0, 1);
                    if (answerchar == Char.Parse(posAnswerChar))
                    {
                        isAnswer = true;
                    }
                    await _db.AddAsync(
                        new Answer {
                        Question   = curQuestion,
                        AnswerText = posAnswerText,
                        IsAnswer   = isAnswer
                    });
                }
                await _db.SaveChangesAsync();
            }

            var files = Directory.EnumerateFiles($"import/{testName}", $"{testName}_*.png");

            if (test != null)
            {
                foreach (var file in files)
                {
                    string curFigure = file;
                    if (File.Exists(curFigure))
                    {
                        var contents = File.ReadAllBytes(curFigure);

                        await _db.AddAsync(
                            new Figure {
                            Test        = test,
                            FigureName  = file.Split('_')[1].Replace(".png", "").Trim(),
                            FigureImage = contents
                        });

                        await _db.SaveChangesAsync();
                    }
                }
            }
            await ReplyAsync($"Imported {testName} into the database!");
        }