Ejemplo n.º 1
0
            public async Task <UserEnvelope> Handle(Command message, CancellationToken cancellationToken)
            {
                if (await _context.Users.AnyAsync(x => x.Email.Equals(message.User.Email), cancellationToken))
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { Email = $"The Email '{message.User.Email}' is already taken" });
                }

                var salt = Guid.NewGuid().ToByteArray();
                var user = new User
                {
                    Name  = message.User.Name,
                    Email = message.User.Email,
                    Hash  = _passwordHasher.Hash(message.User.Password, salt),
                    Salt  = salt
                };

                _context.Users.Add(user);
                await _context.SaveChangesAsync(cancellationToken);

                var person = _mapper.Map <User, PublicUser>(user);

                person.Token = await _jwtTokenGenerator.CreateToken(person.Name);

                return(new UserEnvelope(person));
            }
Ejemplo n.º 2
0
            public async Task <BoardEnvelope> Handle(Command request, CancellationToken cancellationToken)
            {
                if (await _context.Boards.AnyAsync(x => x.Name == request.Board.Name, cancellationToken))
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { Name = Constants.IN_USE });
                }

                var owner = await _context.Users.SingleOrDefaultAsync(t =>
                                                                      t.Email.Equals(_currentUserAccessor.GetCurrentUserEmail()), cancellationToken);

                if (owner == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { User = Constants.NOT_FOUND });
                }

                var board = new Board()
                {
                    Name = request.Board.Name, OwnerId = owner.Id
                };
                await _context.Boards.AddAsync(board, cancellationToken);

                await _context.UserBoards.AddAsync(new UserBoard()
                {
                    BoardId = board.Id, UserId = owner.Id
                },
                                                   cancellationToken);

                await _context.SaveChangesAsync(cancellationToken);

                return(new BoardEnvelope(board));
            }
Ejemplo n.º 3
0
            public async Task <UserEnvelope> Handle(Command message, CancellationToken cancellationToken)
            {
                var currentUserEmail = _currentUserAccessor.GetCurrentUserEmail();
                var user             = await _context.Users.SingleOrDefaultAsync(x => x.Email == currentUserEmail, cancellationToken);

                if (user == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { User = Constants.NOT_FOUND });
                }

                user.Name      = message.User.Name ?? user.Name;
                user.Email     = message.User.Email ?? user.Email;
                user.Biography = message.User.Biography ?? user.Biography;

                if (!string.IsNullOrWhiteSpace(message.User.Password))
                {
                    var salt = Guid.NewGuid().ToByteArray();
                    user.Hash = _passwordHasher.Hash(message.User.Password, salt);
                    user.Salt = salt;
                }

                await _context.SaveChangesAsync(cancellationToken);

                return(new UserEnvelope(_mapper.Map <User, PublicUser>(user)));
            }
Ejemplo n.º 4
0
        public static async Task <Guid> CreateTask(TasksBoardContext context, Guid userId, Guid columnId,
                                                   string header             = "header",
                                                   string description        = "desc",
                                                   List <Guid> assignedUsers = null)
        {
            var task = new Backend.Domain.Task
            {
                ColumnId    = columnId,
                OwnerId     = userId,
                Header      = header,
                Description = description,
                OrderNum    = context.Tasks.Any() ? context.Tasks.Max(t => t.OrderNum) + 1 : default
            };

            await context.Tasks.AddAsync(task);

            await context.UserTasks.AddAsync(new UserTask { TaskId = task.Id, UserId = userId });

            assignedUsers?.ForEach(t => context.UserTasks.Add(new UserTask {
                TaskId = task.Id, UserId = t
            }));

            await context.SaveChangesAsync();

            return(task.Id);
        }
Ejemplo n.º 5
0
            public async Task <ColumnEnvelope> Handle(Command request, CancellationToken cancellationToken)
            {
                var column =
                    await _context.Columns
                    .Include(t => t.Tasks)
                    .SingleOrDefaultAsync(t => t.Id == request.ColumnId, cancellationToken);

                if (column == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { Column = Constants.NOT_FOUND });
                }

                column.Header   = request.Column.Header ?? column.Header;
                column.Color    = request.Column.Color ?? column.Color;
                column.OrderNum = request.Column.OrderNum ?? column.OrderNum;

                if (request.Column.RemovedTasks?.Any() == true)
                {
                    await HandleTasks(request.Column.RemovedTasks, t => column.Tasks.Remove(t), cancellationToken);
                }

                if (request.Column.AddedTasks?.Any() == true)
                {
                    await HandleTasks(request.Column.AddedTasks, t => column.Tasks.Add(t), cancellationToken);
                }

                await _context.SaveChangesAsync(cancellationToken);

                column.Tasks = column.Tasks.OrderBy(t => t.OrderNum).ToList();
                return(new ColumnEnvelope(column));
            }
Ejemplo n.º 6
0
            public async Task <ColumnEnvelope> Handle(Command request, CancellationToken cancellationToken)
            {
                var owner = await _context.Users.SingleOrDefaultAsync(
                    t => t.Email.Equals(_currentUserAccessor.GetCurrentUserEmail()), cancellationToken);

                if (owner == null)
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { User = Constants.NOT_FOUND });
                }

                var board = await _context.Boards
                            .Include(t => t.Columns)
                            .SingleOrDefaultAsync(t => t.Id == request.Column.BoardId, cancellationToken);

                if (board == null)
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { Board = Constants.NOT_FOUND });
                }

                var column = new Column()
                {
                    BoardId  = request.Column.BoardId,
                    Color    = request.Column.Color,
                    Header   = request.Column.Header,
                    OwnerId  = owner.Id,
                    OrderNum = board.Columns.GetNextOrderNum(),
                };

                await _context.Columns.AddAsync(column, cancellationToken);

                await _context.SaveChangesAsync(cancellationToken);

                return(new ColumnEnvelope(column));
            }
Ejemplo n.º 7
0
        public static async Task <Guid> CreateColumn(TasksBoardContext context, Guid userId, string boardName = "board",
                                                     string columnHeader = "column")
        {
            var board = new Board {
                Name = boardName, OwnerId = userId
            };
            await context.Boards.AddAsync(board);

            await context.SaveChangesAsync();

            var column = new Column {
                Header = columnHeader, BoardId = board.Id, OwnerId = userId
            };
            await context.Columns.AddAsync(column);

            await context.SaveChangesAsync();

            return(column.Id);
        }
Ejemplo n.º 8
0
        public static async Task AddTasksTo(TasksBoardContext context, Guid columnId, IEnumerable <Guid> taskIds)
        {
            var column = await context.Columns.Include(t => t.Tasks).SingleOrDefaultAsync(t => t.Id == columnId);

            var tasks = context.Tasks.Where(t => taskIds.Contains(t.Id));

            await tasks.ForEachAsync(t => column.Tasks.Add(t));

            await context.SaveChangesAsync();
        }
Ejemplo n.º 9
0
            public async Task <BoardEnvelope> Handle(Command request, CancellationToken cancellationToken)
            {
                var board = await _context.Boards
                            .Include(t => t.Columns)
                            .ThenInclude(t => t.Tasks)
                            .Include(t => t.UserBoards)
                            .ThenInclude(t => t.User)
                            .SingleOrDefaultAsync(t => t.Id == request.BoardId, cancellationToken);

                if (board == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { Board = Constants.NOT_FOUND });
                }

                board.Name = request.Board.Name ?? board.Name;

                if (request.Board.RemovedColumns?.Any() == true)
                {
                    await HandleColumns(request.Board.RemovedColumns, t => board.Columns.Remove(t), cancellationToken);
                }

                if (request.Board.AddedColumns?.Any() == true)
                {
                    await HandleColumns(request.Board.AddedColumns, board.Columns.Add, cancellationToken);
                }

                if (request.Board.AddedUsers?.Any() == true)
                {
                    var addedUsers = _context.Users
                                     .Where(t => request.Board.AddedUsers.Contains(t.Email));

                    await addedUsers.ForEachAsync(t =>
                                                  board.UserBoards.Add(new UserBoard()
                    {
                        BoardId = board.Id, UserId = t.Id
                    }), cancellationToken);
                }

                if (request.Board.RemovedUsers?.Any() == true)
                {
                    var removedUsers = board.UserBoards
                                       .Where(t => request.Board.RemovedUsers.Contains(t.User.Email))
                                       .ToList();

                    foreach (var removedUser in removedUsers)
                    {
                        board.UserBoards.Remove(removedUser);
                    }
                }

                await _context.SaveChangesAsync(cancellationToken);

                board.Columns = board.Columns.OrderBy(t => t.OrderNum).ToList();
                return(new BoardEnvelope(board));
            }
Ejemplo n.º 10
0
        public static async Task AssignUsers(TasksBoardContext context, Guid taskId, List <Guid> userIds)
        {
            var task = await context.Tasks.Include(t => t.AssignedUsers).FirstOrDefaultAsync(t => t.Id == taskId);

            var users = context.Users.Where(t => userIds.Contains(t.Id)).ToList();

            users.ForEach(t => task.AssignedUsers.Add(new UserTask {
                TaskId = taskId, UserId = t.Id
            }));
            await context.SaveChangesAsync();
        }
Ejemplo n.º 11
0
        public static async Task <Guid> CreateBoard(TasksBoardContext context, Guid userId, string boardName = "board")
        {
            var board = new Board {
                Name = boardName, OwnerId = userId
            };
            await context.Boards.AddAsync(board);

            await context.SaveChangesAsync();

            return(board.Id);
        }
Ejemplo n.º 12
0
        public static async Task AddUserBoards(TasksBoardContext context, Guid boardId, IEnumerable <Guid> userIds)
        {
            var board = await context.Boards.Include(t => t.UserBoards).FirstOrDefaultAsync(t => t.Id == boardId);

            var users = context.Users.Where(t => userIds.Contains(t.Id)).ToList();

            users.ForEach(t => board.UserBoards.Add(new UserBoard()
            {
                BoardId = boardId, UserId = t.Id
            }));
            await context.SaveChangesAsync();
        }
Ejemplo n.º 13
0
        public static async Task <Guid> CreateColumn(TasksBoardContext context, Guid userId, Guid boardId,
                                                     string columnHeader = "header", string columnColor = "color")
        {
            var column = new Column
            {
                Header  = columnHeader,
                BoardId = boardId,
                OwnerId = userId,
                Color   = columnColor
            };

            await context.Columns.AddAsync(column);

            await context.SaveChangesAsync();

            return(column.Id);
        }
Ejemplo n.º 14
0
        public static async Task <List <Column> > CreateColumns(TasksBoardContext context, Guid userId, Guid boardId, int columnsCount)
        {
            var columns = new List <Column>();

            for (int i = 0; i < columnsCount; i++)
            {
                columns.Add(new Column
                {
                    OwnerId = userId,
                    BoardId = boardId,
                    Header  = $"header{i}",
                });
            }

            await context.Columns.AddRangeAsync(columns);

            await context.SaveChangesAsync();

            return(columns.ToList());
        }
Ejemplo n.º 15
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var board = await _context.Boards
                            .Include(t => t.Owner)
                            .SingleOrDefaultAsync(t => t.Id == request.BoardId, cancellationToken);

                if (board == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { Board = Constants.NOT_FOUND });
                }

                if (!board.Owner.Email.Equals(_currentUserAccessor.GetCurrentUserEmail()))
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { User = Constants.NO_OWNER });
                }

                _context.Boards.Remove(board);
                await _context.SaveChangesAsync(cancellationToken);

                return(Unit.Value);
            }
Ejemplo n.º 16
0
        public static async Task <List <Backend.Domain.Task> > CreateTasks(TasksBoardContext context, Guid userId, Guid columnId,
                                                                           int taskCount)
        {
            var tasks = new List <Backend.Domain.Task>();

            for (int i = 0; i < taskCount; i++)
            {
                tasks.Add(new Backend.Domain.Task
                {
                    ColumnId    = columnId,
                    OwnerId     = userId,
                    Header      = $"header{i}",
                    Description = $"description{i}"
                });
            }

            await context.Tasks.AddRangeAsync(tasks);

            await context.SaveChangesAsync();

            return(tasks.ToList());
        }
Ejemplo n.º 17
0
            public async Task <TaskEnvelope> Handle(Command request, CancellationToken cancellationToken)
            {
                var owner = await _context.Users.SingleOrDefaultAsync(t => t.Email.Equals(_userAccessor.GetCurrentUserEmail()), cancellationToken);

                if (owner == null)
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { User = Constants.NOT_FOUND });
                }

                var column = await _context.Columns
                             .Include(t => t.Tasks)
                             .SingleOrDefaultAsync(t => t.Id == request.Task.ColumnId, cancellationToken);

                if (column == null)
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { Column = Constants.NOT_FOUND });
                }

                var task = new Task()
                {
                    ColumnId    = column.Id,
                    Header      = request.Task.Header,
                    Description = request.Task.Description,
                    OrderNum    = column.Tasks.GetNextOrderNum(),
                    OwnerId     = owner.Id,
                };

                await _context.Tasks.AddAsync(task, cancellationToken);

                await _context.UserTasks.AddAsync(new UserTask()
                {
                    TaskId = task.Id, UserId = owner.Id
                }, cancellationToken);

                await _context.SaveChangesAsync(cancellationToken);

                return(new TaskEnvelope(task));
            }