コード例 #1
0
ファイル: UserCourseModel.cs プロジェクト: DerArvend/Ulearn
        public UserCourseModel(Course course, ApplicationUser user, ULearnDb db)
        {
            Course = course;
            User   = user;

            var visits      = db.Visits.Where(v => v.UserId == user.Id && v.CourseId == course.Id).GroupBy(v => v.SlideId).ToDictionary(g => g.Key, g => g.FirstOrDefault());
            var unitResults = new Dictionary <Guid, UserCourseUnitModel>();

            foreach (var slide in Course.Slides)
            {
                var unit = slide.Info.Unit;
                if (!unitResults.ContainsKey(unit.Id))
                {
                    unitResults.Add(unit.Id, new UserCourseUnitModel
                    {
                        Unit        = unit,
                        SlideVisits = new ProgressModel(),
                        Exercises   = new ProgressModel(),
                        Quizes      = new ProgressModel(),
                        Total       = new ProgressModel()
                    });
                }

                var res       = unitResults[unit.Id];
                var isVisited = visits.ContainsKey(slide.Id);
                var isPassed  = isVisited && visits[slide.Id].IsPassed;
                var score     = isPassed ? visits[slide.Id].Score : 0;

                res.SlideVisits.Total++;
                res.Total.Total  += slide.MaxScore;
                res.Total.Earned += score;

                if (isVisited)
                {
                    res.SlideVisits.Earned++;
                }

                if (slide is ExerciseSlide)
                {
                    res.Exercises.Total  += slide.MaxScore;
                    res.Exercises.Earned += score;
                }

                if (slide is QuizSlide)
                {
                    res.Quizes.Total  += slide.MaxScore;
                    res.Quizes.Earned += score;
                }
            }

            Units = course.Units.Select(unit => unitResults[unit.Id]).ToArray();
            Total = new UserCourseUnitModel
            {
                Total       = new ProgressModel(),
                Exercises   = new ProgressModel(),
                SlideVisits = new ProgressModel(),
                Quizes      = new ProgressModel()
            };
            foreach (var result in Units)
            {
                Total.Total.Add(result.Total);
                Total.Exercises.Add(result.Exercises);
                Total.SlideVisits.Add(result.SlideVisits);
                Total.Quizes.Add(result.Quizes);
            }
        }
コード例 #2
0
ファイル: UserCourseModel.cs プロジェクト: andgein/uLearn
		public UserCourseModel(Course course, ApplicationUser user, ULearnDb db)
		{
			Course = course;
			User = user;

			var visits = db.Visits.Where(v => v.UserId == user.Id && v.CourseId == course.Id).GroupBy(v => v.SlideId).ToDictionary(g => g.Key, g => g.FirstOrDefault());
			var unitResults = new Dictionary<string, UserCourseUnitModel>();
			foreach (var slide in Course.Slides)
			{
				var unit = slide.Info.UnitName;
				if (!unitResults.ContainsKey(unit))
					unitResults.Add(unit, new UserCourseUnitModel
					{
						UnitName = unit,
						SlideVisits = new ProgressModel(),
						Exercises = new ProgressModel(),
						Quizes = new ProgressModel(),
						Total = new ProgressModel()
					});

				var res = unitResults[unit];
				var isVisited = visits.ContainsKey(slide.Id);
				var isPassed = isVisited && visits[slide.Id].IsPassed;
				var score = isPassed ? visits[slide.Id].Score : 0;

				res.SlideVisits.Total++;
				res.Total.Total += slide.MaxScore;
				res.Total.Earned += score;

				if (isVisited)
					res.SlideVisits.Earned++;

				if (slide is ExerciseSlide)
				{
					res.Exercises.Total += slide.MaxScore;
					res.Exercises.Earned += score;
				}

				if (slide is QuizSlide)
				{
					res.Quizes.Total += slide.MaxScore;
					res.Quizes.Earned += score;
				}
			}

			Units = course.GetUnits().Select(unitName => unitResults[unitName]).ToArray();
			Total = new UserCourseUnitModel
			{
				Total = new ProgressModel(),
				Exercises = new ProgressModel(),
				SlideVisits = new ProgressModel(),
				Quizes = new ProgressModel()
			};
			foreach (var result in Units)
			{
				Total.Total.Add(result.Total);
				Total.Exercises.Add(result.Exercises);
				Total.SlideVisits.Add(result.SlideVisits);
				Total.Quizes.Add(result.Quizes);
			}
		}