public async Task <StatsUserDailyGetModel> Handle(GetStatsUserDailyQ request, CancellationToken cancellationToken)
        {
            var flashcardsProgresses = await _flashcardProgressRepo.GetAllUserFlashcards(request.UserId);

            return(new StatsUserDailyGetModel()
            {
                TotalFlashcards = flashcardsProgresses.Count(),
                NewFlashcards = flashcardsProgresses.Where(e => e.PracticeDate == DateTime.MinValue).Count(),
                ToLearnFlashcards = flashcardsProgresses.Where(e => e.PracticeDate <= DateTime.Now).Count()
            });
        }
Beispiel #2
0
        public async Task <StatsUserProgressGetModel> Handle(GetStatsUserProgressQ request, CancellationToken cancellationToken)
        {
            var flashcardProgreses = await _flashcardProgressRepo.GetAllUserFlashcards(request.UserId);

            return(new StatsUserProgressGetModel()
            {
                NewFlashcards = flashcardProgreses.Where(e => e.PracticeDate == DateTime.MinValue).Count(),
                BaseKnowledge = flashcardProgreses.Where(e => (e.CorrectInRow >= 0 && e.CorrectInRow <= 3) && e.PracticeDate != DateTime.MinValue).Count(),
                MediumKnowledge = flashcardProgreses.Where(e => (e.CorrectInRow >= 4 && e.CorrectInRow <= 7)).Count(),
                GoodKnowledge = flashcardProgreses.Where(e => (e.CorrectInRow >= 8 && e.CorrectInRow <= 10)).Count(),
                Remebered = flashcardProgreses.Where(e => e.CorrectInRow > 10).Count()
            });
        }
Beispiel #3
0
        public async Task <FlashcardPracticeGetModel> Handle(GetRandomFlashcardQ request, CancellationToken cancellationToken)
        {
            var flashcards = await _flashcardProgressRepo.GetAllUserFlashcards(request.UserId);

            var randomFlashcard = flashcards[(new Random()).Next(0, flashcards.Count())];

            return(new FlashcardPracticeGetModel()
            {
                FlashcardProgressId = randomFlashcard.Id,
                Front = randomFlashcard.PracticeDirection == PracticeDirection.ForeignToNative ? randomFlashcard.FlashcardModel.Foreign : randomFlashcard.FlashcardModel.Native,
                Back = randomFlashcard.PracticeDirection == PracticeDirection.ForeignToNative ? randomFlashcard.FlashcardModel.Native : randomFlashcard.FlashcardModel.Foreign
            });
        }
        public async Task <List <FlashcardWithProgressionGetModel> > Handle(GetFlashcardsListWithProgressesParallelQ request, CancellationToken cancellationToken)
        {
            if (await _mediator.Send(new GetCollectionByIdWithDailyStatsQ(request.CollectionId, request.UserId)) == null)
            {
                return(new List <FlashcardWithProgressionGetModel>());
            }

            var flashcards = await _flashcardRepo.GetWhereCollectionId(request.CollectionId);

            var output = new ConcurrentBag <FlashcardWithProgressionGetModel>();

            var progressModels = await _flashcardProgressRepo.GetAllUserFlashcards(request.UserId);

            Parallel.ForEach(flashcards, async flashcard =>
            {
                var nativeToForeign = progressModels.FirstOrDefault(e => e.FlashcardModelId == flashcard.Id && e.PracticeDirection == PracticeDirection.NativeToForeign);
                var foreignToNative = progressModels.FirstOrDefault(e => e.FlashcardModelId == flashcard.Id && e.PracticeDirection == PracticeDirection.ForeignToNative);

                output.Add(new FlashcardWithProgressionGetModel()
                {
                    Id      = flashcard.Id,
                    Foreign = flashcard.Foreign,
                    Native  = flashcard.Native,
                    ProgressForeignToNative = new FlashcardWithProgressGetModel()
                    {
                        CorrectInRow             = foreignToNative.CorrectInRow,
                        PracticeDate             = foreignToNative.PracticeDate.ToString("dd-MM-yyyy"),
                        PracticeDateIfCorrectAns = ((await _mediator.Send(new CalculatePracticeDateQ(foreignToNative.CorrectInRow, FlashcardProgress.Know)))
                                                    .AddDays((foreignToNative.PracticeDate - DateTime.Now.Date).TotalDays)).ToString("dd-MM-yyyy")
                    },
                    ProgressNativeToForeign = new FlashcardWithProgressGetModel()
                    {
                        CorrectInRow             = nativeToForeign.CorrectInRow,
                        PracticeDate             = nativeToForeign.PracticeDate.ToString("dd-MM-yyyy"),
                        PracticeDateIfCorrectAns = ((await _mediator.Send(new CalculatePracticeDateQ(nativeToForeign.CorrectInRow, FlashcardProgress.Know)))
                                                    .AddDays((nativeToForeign.PracticeDate - DateTime.Now.Date).TotalDays)).ToString("dd-MM-yyyy")
                    }
                });
            });

            return(output.ToList());
        }
        public async Task <FlashcardPracticeGetModel> Handle(GetRandomExpiredFlashcardQ request, CancellationToken cancellationToken)
        {
            var allUserFlashcards = await _flashcardProgressRepo.GetAllUserFlashcards(request.UserId);

            var expiredFlashcards = allUserFlashcards.Where(e => e.PracticeDate <= DateTime.Now.Date).ToList();

            if (!expiredFlashcards.Any())
            {
                return(null);
            }

            var randomExpiredFlashcard = expiredFlashcards[(new Random()).Next(0, expiredFlashcards.Count())];

            return(new FlashcardPracticeGetModel()
            {
                FlashcardProgressId = randomExpiredFlashcard.Id,
                Front = randomExpiredFlashcard.PracticeDirection == PracticeDirection.ForeignToNative ? randomExpiredFlashcard.FlashcardModel.Foreign : randomExpiredFlashcard.FlashcardModel.Native,
                Back = randomExpiredFlashcard.PracticeDirection == PracticeDirection.ForeignToNative ? randomExpiredFlashcard.FlashcardModel.Native : randomExpiredFlashcard.FlashcardModel.Foreign,
                PracticeDirection = randomExpiredFlashcard.PracticeDirection
            });
        }
Beispiel #6
0
        public async Task <StatsUserExpiredWeekGetModel> Handle(GetStatsUserExpiredNextWeekQ request, CancellationToken cancellationToken)
        {
            var flashcardProgreses = await _flashcardProgressRepo.GetAllUserFlashcards(request.UserId);

            return(new StatsUserExpiredWeekGetModel()
            {
                TodayDate = DecorateDateDayMonth(DateTime.Now.Date),
                TodayCount = Count(flashcardProgreses, DateTime.Now.Date),
                TomorrowDate = DecorateDateDayMonth(DateTime.Now.Date.AddDays(1)),
                TomorrowCount = Count(flashcardProgreses, DateTime.Now.Date.AddDays(1)),
                ThreeDayDate = DecorateDateDayMonth(DateTime.Now.Date.AddDays(2)),
                ThreeDayCount = Count(flashcardProgreses, DateTime.Now.Date.AddDays(2)),
                FourDayDate = DecorateDateDayMonth(DateTime.Now.Date.AddDays(3)),
                FourDayCount = Count(flashcardProgreses, DateTime.Now.Date.AddDays(3)),
                FiveDayDate = DecorateDateDayMonth(DateTime.Now.Date.AddDays(4)),
                FiveDayCount = Count(flashcardProgreses, DateTime.Now.Date.AddDays(4)),
                SixDayDate = DecorateDateDayMonth(DateTime.Now.Date.AddDays(5)),
                SixDayCount = Count(flashcardProgreses, DateTime.Now.Date.AddDays(5)),
                SevenDayDate = DecorateDateDayMonth(DateTime.Now.Date.AddDays(6)),
                SevenDayCount = Count(flashcardProgreses, DateTime.Now.Date.AddDays(6))
            });
        }