public virtual async Task <ToDoItemDto> CreateToDoItem(ToDoItemDto toDoItem, CancellationToken cancellationToken) { if (toDoItem == null) { throw new BadRequestException("ToDoItemMayNotBeNull"); } Guid userId = Guid.Parse(UserInformationProvider.GetCurrentUserId()); List <ToDoItemOptions> optionsList = new List <ToDoItemOptions> { }; List <Guid> usersOfThisToDoGroup = toDoItem.ToDoGroupId == null ? (new List <Guid> { userId } /*ToDoItem has no to do group*/) : (await ToDoGroupOptionsListRepository .GetAll() .Where(tdgo => tdgo.ToDoGroupId == toDoItem.ToDoGroupId) .Select(tdgo => tdgo.UserId) .ToListAsync(cancellationToken)); foreach (Guid otherUserId in usersOfThisToDoGroup) { ToDoItemOptions options = new ToDoItemOptions { Id = Guid.NewGuid(), UserId = otherUserId }; if (options.UserId == userId) /* For current user only */ { options.ShowInMyDayOn = toDoItem.ShowInMyDay == true ? (DateTimeOffset?)DateTimeProvider.GetCurrentUtcDateTime() : null; } optionsList.Add(options); } ToDoItem addedToDoItem = await ToDoItemsRepository.AddAsync(new ToDoItem { Id = Guid.NewGuid(), CreatedById = userId, CreatedOn = DateTimeProvider.GetCurrentUtcDateTime(), ModifiedOn = DateTimeProvider.GetCurrentUtcDateTime(), Notes = toDoItem.Notes, Title = toDoItem.Title, ToDoGroupId = toDoItem.ToDoGroupId, Options = optionsList }, cancellationToken); return(await GetMyToDoItems() .FirstAsync(tdi => tdi.Id == addedToDoItem.Id, cancellationToken)); }
public virtual async Task KickUserFromToDoGroup(KickAnotherUserFromMyToDoGroupArge args, CancellationToken cancellationToken) { Guid userId = Guid.Parse(UserInformationProvider.GetCurrentUserId()); ToDoGroup toDoGroupsToBeKickFrom = await ToDoGroupsRepository.GetAll() .Where(tdg => tdg.Id == args.toDoGroupId) .Select(tdg => new ToDoGroup { Id = tdg.Id, CreatedById = tdg.CreatedById, Items = tdg.Items.Select(tdi => new ToDoItem { Id = tdi.Id, Options = tdi.Options.Where(tdio => tdio.UserId == args.userId).Select(tdio => new ToDoItemOptions { Id = tdio.Id, UserId = tdio.UserId }).ToList() }).ToList() }).FirstOrDefaultAsync(cancellationToken);; if (toDoGroupsToBeKickFrom == null) { throw new ResourceNotFoundException("ToDoGroupCouldNotBeFound"); } if (toDoGroupsToBeKickFrom.CreatedById != userId) { throw new DomainLogicException("OnlyOwnerCanKickOtherUsers"); } User kickedUser = await UsersRepository.GetByIdAsync(cancellationToken, args.userId); if (kickedUser == null) { throw new ResourceNotFoundException("UserCouldNotBeFoundToBeKicked"); } foreach (ToDoItemOptions toDoItemOptionsToBeDeleted in toDoGroupsToBeKickFrom.Items.SelectMany(tdi => tdi.Options) /* We've loaded options of to be kicked user only! */) { await ToDoItemOptionsListRepository.DeleteAsync(toDoItemOptionsToBeDeleted, cancellationToken); } ToDoGroupOptions toDoGroupOptionsToBeDeleted = await ToDoGroupOptionsListRepository.GetAll().FirstOrDefaultAsync(tdo => tdo.ToDoGroupId == args.toDoGroupId && tdo.UserId == args.userId); await ToDoGroupOptionsListRepository.DeleteAsync(toDoGroupOptionsToBeDeleted, cancellationToken); }
public virtual IQueryable <ToDoGroupDto> GetMyToDoGroups() { Guid userId = Guid.Parse(UserInformationProvider.GetCurrentUserId()); return(ToDoGroupOptionsListRepository.GetAll().Where(tdgo => tdgo.UserId == userId) .Select(tdgo => new ToDoGroupDto { Id = tdgo.ToDoGroup.Id, CreatedBy = tdgo.ToDoGroup.CreatedBy.UserName, CreatedOn = tdgo.ToDoGroup.CreatedOn, HideCompletedToDoItems = tdgo.HideCompletedToDoItems, ModifiedOn = tdgo.ToDoGroup.ModifiedOn, SharedByCount = tdgo.ToDoGroup.Options.Count, SortedBy = tdgo.SortedBy, Theme = tdgo.Theme, Title = tdgo.ToDoGroup.Title })); }
public virtual async Task <ToDoGroupDto> ShareToDoGroupWithAnotherUser(ShareToDoGroupWithAnotherUserArgs args, CancellationToken cancellationToken) { Guid userId = Guid.Parse(UserInformationProvider.GetCurrentUserId()); ToDoGroup toDoGroup = await ToDoGroupsRepository.GetAll() .Where(tdg => tdg.CreatedById == userId && tdg.Id == args.toDoGroupId) .Select(tdg => new ToDoGroup { Id = tdg.Id, Items = tdg.Items.Select(tdi => new ToDoItem { Id = tdi.Id }).ToList() }).FirstOrDefaultAsync(cancellationToken); if (toDoGroup == null) { throw new ResourceNotFoundException("ToDoGroupCouldNotBeFound"); } await ToDoGroupOptionsListRepository.AddAsync(new ToDoGroupOptions { HideCompletedToDoItems = false, Id = Guid.NewGuid(), SortedBy = SortBy.CreatedDate, Theme = "Green", ToDoGroupId = args.toDoGroupId, UserId = args.anotherUserId }, cancellationToken); foreach (ToDoItem toDoItem in toDoGroup.Items) { await ToDoItemOptionsListRepository.AddAsync(new ToDoItemOptions { Id = Guid.NewGuid(), ToDoItemId = toDoItem.Id, UserId = args.anotherUserId, ShowInMyDayOn = null }, cancellationToken); } return(await GetMyToDoGroups().FirstAsync(tdg => tdg.Id == args.toDoGroupId, cancellationToken)); }
public virtual async Task <ToDoGroupDto> UpdateToDoGroup(Guid key, ToDoGroupDto toDoGroup, CancellationToken cancellationToken) { if (toDoGroup == null) { throw new BadRequestException("ToDoGroupMayNotBeNull"); } Guid userId = Guid.Parse(UserInformationProvider.GetCurrentUserId()); ToDoGroup toDoGroupToBeModified = await ToDoGroupsRepository.GetByIdAsync(cancellationToken, key); if (toDoGroupToBeModified == null) { throw new ResourceNotFoundException("ToDoGroupCouldNotBeFound"); } ToDoGroupOptions toDoGroupOptionsToBeModified = await ToDoGroupOptionsListRepository.GetAll() .FirstAsync(tdgo => tdgo.UserId == userId && tdgo.ToDoGroupId == key, cancellationToken); if (toDoGroupOptionsToBeModified == null) { throw new ResourceNotFoundException("ToDoGroupCouldNotBeFound"); } toDoGroupToBeModified.Title = toDoGroup.Title; toDoGroupToBeModified.ModifiedOn = DateTimeProvider.GetCurrentUtcDateTime(); toDoGroupOptionsToBeModified.Theme = toDoGroup.Theme; toDoGroupOptionsToBeModified.HideCompletedToDoItems = toDoGroup.HideCompletedToDoItems; toDoGroupOptionsToBeModified.SortedBy = toDoGroup.SortedBy; await ToDoGroupsRepository.UpdateAsync(toDoGroupToBeModified, cancellationToken); await ToDoGroupOptionsListRepository.UpdateAsync(toDoGroupOptionsToBeModified, cancellationToken); return(await GetMyToDoGroups() .FirstAsync(tdg => tdg.Id == key, cancellationToken)); }