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); }
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)); }
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); }
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)); }
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())); }
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() }); }
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); }
public async Task <int> Handle(GetCountQuery request, CancellationToken cancellationToken) { var userId = contextProvider.GetUserId(); return(await dbContext.Groups.CountAsync(g => g.User.Id == userId)); }