Beispiel #1
0
 private void SaveSettings(MemoryRepeatQueryDto query, Setting setting)
 {
     setting.CountNew    = query.NewWords;
     setting.Minute      = query.Minutes;
     setting.LastUsedSM2 = DateTime.Today;
     _unitOfWork.SaveChanges();
 }
Beispiel #2
0
        public async Task <MemoryRepeatResultDto> GenerateRepetition(MemoryRepeatQueryDto query, string userName)
        {
            var result = new MemoryRepeatResultDto();

            var userSettings = await GetSettings(userName);

            var lastDate    = userSettings.Item2.LastUsedSM2;
            var missingDays = GetMissingDay(lastDate);

            var dates = new List <DateTime>();

            for (int i = 0; i < missingDays; i++)
            {
                lastDate = lastDate.AddDays(1);
                dates.Add(lastDate);
            }

            var todayRepetition = await _unitOfWork.Repository <Word>()
                                  .GetFilteredAsync(w => dates.Contains(w.SuperMemory.NextRepetition));

            foreach (var word in todayRepetition)
            {
                result.RepeatedWords.Add(_mapper.Map <WordDto>(word));
            }

            if (query.NewWords > 0)
            {
                var repository        = _unitOfWork.Repository <Word>();
                var withoutRepetition =
                    await repository.GetFilteredAsync(w => w.SuperMemory.Repetition == 0);

                if (withoutRepetition.Count() > query.NewWords)
                {
                    var count = withoutRepetition.Count();
                    var rand  = new Random();
                    for (int i = 0; i < query.NewWords; i++)
                    {
                        var index = rand.Next(0, count);
                        var word  = withoutRepetition.ElementAt(index);
                        await repository.LoadAsync <Translate>(word, w => w.Translates);

                        result.NewWords.Add(_mapper.Map <WordDto>(word));
                    }
                }
                else
                {
                    foreach (var word in withoutRepetition)
                    {
                        result.NewWords.Add(_mapper.Map <WordDto>(word));
                    }
                }
            }

            SaveSettings(query, userSettings.Item2);

            return(result);
        }
Beispiel #3
0
 public async Task <IActionResult> GenerateRepetition([FromBody] MemoryRepeatQueryDto query)
 {
     try
     {
         return(Ok(await _service.GenerateRepetition(query, GetUserName())));
     }
     catch (Exception e)
     {
         return(BadRequest(e.Message));
     }
 }