public async Task <long> Handle(AddGroupCommand request, CancellationToken cancellationToken)
        {
            var userId = contextProvider.GetUserId();
            var user   = await dbContext.Users.Include(u => u.Groups).SingleOrDefaultAsync(u => u.Id == userId);

            var newGroup = new Domain.Group
            {
                Name              = request.Name,
                GroupLanguage1    = request.LanguageFront,
                GroupLanguage2    = request.LanguageBack,
                User              = user,
                GroupCreationDate = dateTimeProvider.GetTime()
            };

            foreach (var card in request.Cards)
            {
                newGroup.Words.Add(
                    new Domain.Card
                {
                    Heads            = Domain.Side.New(card.Front.Value, card.Front.Example),
                    Tails            = Domain.Side.New(card.Back.Value, card.Back.Example),
                    Comment          = string.Empty,
                    Group            = newGroup,
                    IsVisible        = true,
                    WordCreationDate = dateTimeProvider.GetTime(),
                });
            }

            await dbContext.Groups.AddAsync(newGroup);

            await dbContext.SaveChangesAsync();

            return(newGroup.Id);
        }
Example #2
0
        public async Task <IEnumerable <GroupDto> > Handle(GetGroupsQuery request, CancellationToken cancellationToken)
        {
            var userId = httpContextProvider.GetUserId();
            var groups = dbContext.Groups
                         .Include(g => g.Words).ThenInclude(c => c.Repeats)
                         .Include(g => g.User)
                         .Where(g => g.User.Id == userId)
                         .Select(g => g.GetGroupDto());

            return(await Task.FromResult(groups));
        }
Example #3
0
        public async Task <int> Handle(GetTodayCardsCountQuery request, CancellationToken cancellationToken)
        {
            var userId = contextProvider.GetUserId();
            var date   = timeProvider.GetDate().AddDays(1);
            var count  = 0;

            count += await dbContext.Words.CountAsync(c => c.Group.User.Id == userId && c.Heads.State.NextRepeat < timeProvider.GetDate(), cancellationToken);

            count += await dbContext.Words.CountAsync(c => c.Group.User.Id == userId && c.Tails.State.NextRepeat < timeProvider.GetDate(), cancellationToken);

            return(count);
        }
Example #4
0
        public Task <IEnumerable <CardDetailsDto> > Handle(GetAllQuery request, CancellationToken cancellationToken)
        {
            var userId = contextProvider.GetUserId();
            var cards  = dbContext.Words
                         .Include(c => c.Group)
                         .Include(c => c.Repeats)
                         .Where(c => c.Group.Id == request.GroupId && c.Group.User.Id == userId)
                         .Select(c => c.GetCardDetailsDto())
                         .AsEnumerable();

            return(Task.FromResult(cards));
        }
        public async Task <Unit> Handle(FinishCommand request, CancellationToken cancellationToken)
        {
            var userId = contextProvider.GetUserId();
            var lesson = await dbContext.Lessons.SingleOrDefaultAsync(l => l.Id == request.LessonId && l.User.Id == userId);

            lesson.FinishDate = timeProvider.GetTime();

            dbContext.Lessons.Update(lesson);
            await dbContext.SaveChangesAsync();

            return(Unit.Value);
        }
        public async Task <IEnumerable <ExtendedCardDetailsDto> > Handle(GetLastAddedQuery request, CancellationToken cancellationToken)
        {
            var userId    = httpContextProvider.GetUserId();
            var lastAdded = dbContext.Words
                            .Include(w => w.Group).ThenInclude(g => g.User)
                            .Where(w => w.Group.User.Id == userId)
                            .OrderByDescending(w => w.WordCreationDate)
                            .Take(request.Count)
                            .Select(card => card.GetExtendedCardDetailsDto())
                            .AsNoTracking();

            return(await Task.FromResult(lastAdded));
        }
Example #7
0
        public async Task <LastLessonDateDto> Handle(GetLastLessonQuery request, CancellationToken cancellationToken)
        {
            var userId     = contextProvider.GetUserId();
            var lastLesson = await dbContext.Lessons.Where(l => l.User.Id == userId).OrderByDescending(l => l.StartDate).FirstOrDefaultAsync();

            var isAnyLesson = lastLesson != null;

            return(new LastLessonDateDto
            {
                IsAnyLesson = isAnyLesson,
                Date = isAnyLesson ? lastLesson.StartDate : new DateTime(0)
            });
        }
        public async Task <ExtendedCardDetailsDto> Handle(GetLastFailedQuery request, CancellationToken cancellationToken)
        {
            var userId = httpContextProvider.GetUserId();
            var result = await dbContext.Repeats
                         .Include(r => r.Word).ThenInclude(c => c.Group)
                         .Where(r => r.Lesson.User.Id == userId && r.Result < 0)
                         .OrderByDescending(r => r.DateTime)
                         .Take(1)
                         .FirstOrDefaultAsync();

            var card = result?.Word;

            return(card != null?card.GetExtendedCardDetailsDto() : null);
        }
        public async Task <ExtendedCardDetailsDto> Handle(GetNextRepeatQuery request, CancellationToken cancellationToken)
        {
            var userId = contextProvider.GetUserId();

            var minHeads = await dbContext.Words
                           .Include(w => w.Group).ThenInclude(g => g.User)
                           .Where(c => c.Group.User.Id == userId).OrderBy(w => w.Heads.State.NextRepeat).Take(1).FirstOrDefaultAsync();

            var minTails = await dbContext.Words
                           .Include(w => w.Group).ThenInclude(g => g.User)
                           .Where(c => c.Group.User.Id == userId).OrderBy(w => w.Tails.State.NextRepeat).Take(1).FirstOrDefaultAsync();

            var card = GetNextRepeat(minHeads, minTails);

            return(card == null ? null : card.GetExtendedCardDetailsDto());
        }
        public Task <IEnumerable <CardRepeatDto> > Handle(GetTodayCardsQuery request, CancellationToken cancellationToken)
        {
            var userId  = contextProvider.GetUserId();
            var results = new List <CardRepeatDto>();

            var heads = dbContext.Words.Include(c => c.Group)
                        .Where(c => c.Group.User.Id == userId && c.Heads.State.NextRepeat < timeProvider.GetDate());

            results.AddRange(heads.Select(item => ConvertIntoRepeatDto(item, false)));

            var tails = dbContext.Words.Include(c => c.Group)
                        .Where(c => c.Group.User.Id == userId && c.Tails.State.NextRepeat < timeProvider.GetDate());

            results.AddRange(tails.Select(item => ConvertIntoRepeatDto(item, true)));

            return(Task.FromResult(results.AsEnumerable()));
        }
Example #11
0
        public async Task <GroupDetailsDto> Handle(GetDetailsQuery request, CancellationToken cancellationToken)
        {
            var userId = contextProvider.GetUserId();
            var group  = await dbContext.Groups
                         .Include(g => g.Words).ThenInclude(c => c.Repeats)
                         .FirstOrDefaultAsync(g => g.Id == request.GroupId && g.User.Id == userId);

            return(new GroupDetailsDto
            {
                Id = group.Id,
                LanguageFront = group.GroupLanguage1,
                LanguageBack = group.GroupLanguage2,
                Name = group.Name,
                CreationDate = group.GroupCreationDate,
                CardsCount = group.Words.Count,
                RepeatsCount = group.Words.Select(c => c.Repeats.Count).Sum()
            });
        }
Example #12
0
        public async Task <long> Handle(StartCommand request, CancellationToken cancellationToken)
        {
            var userId = contextProvider.GetUserId();
            var user   = await dbContext.Users.SingleOrDefaultAsync(u => u.Id == userId);

            if (user == null)
            {
                throw new Exception("user == null");
            }
            var now = timeProvider.GetTime();

            var newLesson = new Domain.Lesson
            {
                User      = user,
                StartDate = now
            };

            dbContext.Lessons.Add(newLesson);
            await dbContext.SaveChangesAsync();

            return(newLesson.Id);
        }
Example #13
0
        public async Task <int> Handle(GetCountQuery request, CancellationToken cancellationToken)
        {
            var userId = contextProvider.GetUserId();

            return(await dbContext.Groups.CountAsync(g => g.User.Id == userId));
        }