Ejemplo n.º 1
0
        public virtual async Task <ToDoGroupDto> CreateToDoGroup(CreateToDoGroupArgs args, CancellationToken cancellationToken)
        {
            if (string.IsNullOrEmpty(args.title))
            {
                throw new BadRequestException("TitleMayNotBeEmpty");
            }

            Guid userId = Guid.Parse(UserInformationProvider.GetCurrentUserId());

            ToDoGroup addedToDoGroup = await ToDoGroupsRepository.AddAsync(new ToDoGroup
            {
                Id          = Guid.NewGuid(),
                CreatedById = userId,
                CreatedOn   = DateTimeProvider.GetCurrentUtcDateTime(),
                ModifiedOn  = DateTimeProvider.GetCurrentUtcDateTime(),
                Title       = args.title,
                Options     = new List <ToDoGroupOptions>
                {
                    new ToDoGroupOptions
                    {
                        HideCompletedToDoItems = false,
                        SortedBy = SortBy.CreatedDate,
                        Id       = Guid.NewGuid(),
                        Theme    = "Green",
                        UserId   = userId
                    }
                }
            }, cancellationToken);

            return(await GetMyToDoGroups()
                   .FirstAsync(tdg => tdg.Id == addedToDoGroup.Id, cancellationToken));
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        public virtual async Task DeleteToDoGroup(Guid key, CancellationToken cancellationToken)
        {
            Guid userId = Guid.Parse(UserInformationProvider.GetCurrentUserId());

            ToDoGroup toDoGroupToBeDeleted = await ToDoGroupsRepository.GetByIdAsync(cancellationToken, key);

            if (toDoGroupToBeDeleted == null)
            {
                throw new ResourceNotFoundException("ToDoGroupCouldNotBeFound");
            }

            if (toDoGroupToBeDeleted.CreatedById != userId)
            {
                throw new DomainLogicException("OnlyOwnerCanDeleteTheToDoGroup");
            }

            await ToDoGroupsRepository.DeleteAsync(toDoGroupToBeDeleted, cancellationToken);
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
 public ItemsList(ToDoGroup group)
 {
     InitializeComponent();
     BindingContext = Locator.GetClass <ItemsListViewModel>(group);
 }
Ejemplo n.º 7
0
 public ManageGroup(ToDoGroup group)
 {
     InitializeComponent();
     BindingContext = Locator.GetClass <ManageGroupViewModel>(group);
 }