Ejemplo n.º 1
0
        public void Test_QueryModel()
        {
            var item0 = new TestQueryModelItems
            {
                Description = "TEST1",
                ItemId      = 1
            };
            var item1 = new TestQueryModelItems
            {
                Description = "TEST2",
                ItemId      = 2
            };
            var model = new TestQueryModel
            {
                ServerGroupId = "Test",
                Items         = new List <TestQueryModelItems> {
                    item0,
                    item1
                }
            };
            Dictionary <string, object> dictionary = new Dictionary <string, object>();

            dictionary["ServerGroupId"] = model.ServerGroupId;
            dictionary["Items"]         = model.Items;
            var dictionary1 = new Dictionary <string, string>();

            dictionary1 = AlibabaCloud.OpenApiUtil.Client.Query(dictionary);
            Assert.Equal("Test", dictionary1["ServerGroupId"]);
            Assert.Equal("TEST1", dictionary1["Items.1.Description"]);
            Assert.Equal("1", dictionary1["Items.1.ItemId"]);
            Assert.Equal("TEST2", dictionary1["Items.2.Description"]);
            Assert.Equal("2", dictionary1["Items.2.ItemId"]);
        }
Ejemplo n.º 2
0
        public async Task <ApiResult <TestQueryModel> > GetTestQuestionOptionAsync(GetTestQuestionOptionForEndUserByTestId filter)
        {
            TestQueryModel modeltest = null;

            try
            {
                if (_unit.Context.Tblusersubmitedanswer.Any(t => t.UserId == filter.CurrentUserId && t.TestId == filter.Filter.TestId.Value && t.IsMatched.HasValue))
                {
                    return(new ApiResult <TestQueryModel>(new ApiResultCode(ApiResultType.Error, messageText: "You have already done this test.")));
                }

                if (!_unit.Context.Tblusersubmitedanswer.Any(t => t.UserId == filter.CurrentUserId && t.TestId == filter.Filter.TestId.Value))
                {
                    var noofquestionAndCategoryId = await _unit.Context.Tbltest.Where(p => p.Id == filter.Filter.TestId.Value).
                                                    Select(t => new { t.NoOfQuestion.Value, t.CategoryId }).FirstOrDefaultAsync();

                    var query = await(from t in _unit.Context.Tbltest
                                      join ttr in _unit.Context.Tbltestuserright on t.Id equals ttr.TestId
                                      join tcat in _unit.Context.Tblcategory on t.CategoryId equals tcat.Id
                                      join tq in _unit.Context.Tblquestion on tcat.Id equals tq.CategoryId
                                      join to in _unit.Context.Tblquestionoptions on tq.Id equals to.QuestionId
                                      where ttr.TestId == filter.Filter.TestId && ttr.UserId == filter.CurrentUserId.Value && ttr.Status == 1 && tq.Status == 1 &&
                                      tq.CategoryId == noofquestionAndCategoryId.CategoryId.Value && t.CategoryId == noofquestionAndCategoryId.CategoryId.Value
                                      select new Tblusersubmitedanswer
                    {
                        TestId         = ttr.TestId,
                        UserId         = ttr.UserId,
                        QuestionId     = tq.Id,
                        OptionId       = to.Id,
                        InsertDate     = DateTime.Now,
                        LastUpdateDate = DateTime.Now
                    }).ToListAsync();
                    var         allAvailbleQuestionIds = query.Select(t => t.QuestionId.Value).Distinct();
                    int         questioncout           = allAvailbleQuestionIds.Count();
                    List <long> ids = new List <long>();
                    int         number;
                    if (noofquestionAndCategoryId.Value == questioncout)
                    {
                        ids.AddRange(allAvailbleQuestionIds);
                    }
                    else
                    {
                        for (int i = 0; i < noofquestionAndCategoryId.Value; i++)
                        {
                            do
                            {
                                number = new Random().Next(1, Convert.ToInt32(allAvailbleQuestionIds.Max()));
                            } while (!allAvailbleQuestionIds.Contains(number) || ids.Contains(number)); //prevent duplicate number ids.Contains(number)
                            ids.Add(number);
                        }
                    }
                    var questionsquery = query.Where(t => ids.Contains(t.QuestionId.Value)).ToList();
                    questionsquery.ProduceShuffle(new Random());
                    _unit.Context.Tblusersubmitedanswer.AddRange(questionsquery);
                    var saveresult = await _unit.SaveChangesAsync();
                }
                var testquery = await _unit.Context.Tbltest.Where(p => p.Id == filter.Filter.TestId).Include(t => t.Tblusersubmitedanswer).ThenInclude(t => t.Question).
                                ThenInclude(t => t.Tblquestionoptions).Include(t => t.Tbltestuserright).ThenInclude(t => t.User).FirstOrDefaultAsync();

                if (testquery != null)
                {
                    modeltest           = new TestQueryModel();
                    modeltest.TestName  = testquery.Name;
                    modeltest.UserId    = filter.CurrentUserId.Value;
                    modeltest.UserName  = testquery.Tblusersubmitedanswer.Where(t => t.UserId == filter.CurrentUserId).Select(t => (t.User.FirstName + " " + t.User.MiddleName + " " + t.User.LastName)).FirstOrDefault();
                    modeltest.TestId    = testquery.Id;
                    modeltest.Questions = testquery.Tblusersubmitedanswer.Where(t => t.UserId == filter.CurrentUserId).GroupBy(t => t.QuestionId).Select(q => new TestQuestionQueryModel
                    {
                        Question           = q.FirstOrDefault().Question.Name,
                        QuestionId         = q.FirstOrDefault().Question.Id,
                        TakeActionDuration = q.FirstOrDefault().Question.QuestionDuration.Value,
                        Options            = q.FirstOrDefault().Question.Tblusersubmitedanswer.Where(t => t.UserId == filter.CurrentUserId && t.QuestionId == q.FirstOrDefault().Question.Id).
                                             Select(t => new TestQuestionOptionsQueryModel
                        {
                            SubmmitedAnswerId = t.Id,
                            OptionId          = t.OptionId.Value,
                            Option            = t.Option.Name,
                        }).ToList()
                    }).Distinct().ToList();
                    return(new ApiResult <TestQueryModel>(new ApiResultCode(ApiResultType.Success), modeltest));
                }
                return(new ApiResult <TestQueryModel>(new ApiResultCode(ApiResultType.Error, messageText: "no data found")));
            }
            catch (Exception ex)
            {
                ErrorTrace.Logger(LogArea.RepositoryLayer, ex);
                return(new ApiResult <TestQueryModel>(new ApiResultCode(ApiResultType.Error, messageText: "Error while geting data")));
            }
        }