Пример #1
0
        public async Task Handle(UserHandlerData <AuthorAddingFormData> notification, CancellationToken cancellationToken)
        {
            Project project = await Context.Projects
                              .FirstAsync(project => project.Name == notification.Data.ProjectName &&
                                          project.Creator.UserName == notification.User.UserName);

            var unathorizedAuthor = new UnauthorizedAuthor
            {
                Email   = notification.Data.Email,
                Project = project
            };

            await AssignService.Assign(unathorizedAuthor);
        }
Пример #2
0
        /// <summary>
        /// Creation new project in database and saving project file in repository
        /// </summary>
        /// <param name="request">User, project name, desciption and file.</param>
        /// <param name="cancellationToken"></param>
        /// <returns>
        /// If project with same name is exist return error
        /// else return empty error responce.
        /// </returns>
        public async Task <ErrorResponce> Handle(UserHandlerData <SnapshotFormData, ErrorResponce> request, CancellationToken cancellationToken)
        {
            var errors = new List <string>();

            bool isExist = Context.Projects
                           .Where(project => project.Creator.UserName == request.User.UserName)
                           .Any(project => project.Name == request.Data.Name);

            if (isExist)
            {
                errors.Add(InvalidProjectName);
                return(new ErrorResponce(errors));
            }


            Role creatorRole = await Context.Roles.FirstAsync(role => role.Name == Role.Value.Creator.ToString());

            var user = await Context.Users
                       .Include(user => user.ProjectRoles)
                       .FirstAsync(user => user.UserName == request.User.UserName);

            var project = new Project(request.Data.Name, request.Data.Description, request.Data.File.ContentType, user);

            // Adding for user role creator for current project.
            user.ProjectRoles = user.ProjectRoles.ToList();
            ((List <UserProjectRole>)user.ProjectRoles).Add(new UserProjectRole
            {
                Project = project,
                Role    = creatorRole
            });

            Context.Users.Update(user);
            await Context.SaveChangesAsync();

            // Convert file to byte array.
            byte[] fileBytes;
            using (var stream = new MemoryStream())
            {
                request.Data.File.CopyTo(stream);
                fileBytes = stream.ToArray();
            };

            // Make file name base on his name and content type.
            // For example, GetFileName("1", "text/plain") = "1.txt"
            string fileName = FileData.GetFileName(project.Snapshots.First().Id.ToString(), project.FileContentType);

            Repository.Create(fileName, fileBytes);

            return(new ErrorResponce(errors));
        }
Пример #3
0
        public async Task <IActionResult> DeleteAuthor([FromForm] AuthorDeletingFormData formData, [FromRoute] UserRoute route)
        {
            //Getting field _user based on route.
            await Init(route);

            var request = new UserHandlerData <AuthorDeletingFormData, Unit>
            {
                Data = formData,
                User = _user
            };

            await _mediator.Send(request);

            return(RedirectToAction(nameof(ShowAuthors), route));
        }
Пример #4
0
 public async Task Handle(UserHandlerData <AuthorAddingFormData> notification, CancellationToken cancellationToken)
 {
     /*
      * User user = await Context.Users
      *  .Include(user => user.ProjectRoles)
      *  .FirstOrDefaultAsync(user => user.Email == notification.Data.Email);
      *
      * if (user == null)
      * {
      *  string projectLocation = String.Format(notification.User.UserName, notification.Data.ProjectName);
      *  var builder = new ProjectInviteBuilder("");
      *  var creator = new EmailMessageCreator(builder);
      *  await EmailSender.SendEmailAsync(notification.Data.Email, creator.Create());
      * }*/
 }
Пример #5
0
        public async Task <IActionResult> AddAuthor([FromForm] AuthorAddingFormData formData, [FromRoute] UserRoute route)
        {
            //Getting field _user based on route.
            await Init(route);

            var request = new UserHandlerData <AuthorAddingFormData>
            {
                Data = formData,
                User = _user
            };

            // Sending request to all notification handlers that process author adding.
            await _mediator.Publish(request);

            return(RedirectToAction(nameof(ShowAuthors), route));
        }
Пример #6
0
        /// <summary>
        /// Delete author from project.
        /// </summary>
        /// <param name="request">Author name and project name.</param>
        /// <returns> Nothing.</returns>
        public async Task <Unit> Handle(UserHandlerData <AuthorDeletingFormData, Unit> request, CancellationToken cancellationToken)
        {
            User user = await Context.Users
                        .Include(user => user.ProjectRoles)
                        .ThenInclude(projectRole => projectRole.Project)
                        .FirstAsync(user => user.UserName == request.Data.UserName);

            UserProjectRole projectRole = user.ProjectRoles
                                          .First(projectRole => projectRole.Project.Name == request.Data.ProjectName &&
                                                 projectRole.Project.Creator.UserName == request.User.UserName);

            /// Deleting user role author for current project.
            user.ProjectRoles = user.ProjectRoles.ToList();
            ((List <UserProjectRole>)user.ProjectRoles).Remove(projectRole);

            Context.Users.Update(user);
            await Context.SaveChangesAsync();

            return(Unit.Value);
        }
Пример #7
0
        public async Task <IActionResult> AddProject([FromRoute] UserRoute route, [FromForm] SnapshotFormData formData)
        {
            if (ModelState.IsValid)
            {
                // Getting field _user based on route.
                await Init(route);

                var request = new UserHandlerData <SnapshotFormData, ErrorResponce>
                {
                    User = _user,
                    Data = formData
                };

                // Getting object that contain errors about login user data.
                ErrorResponce responce = await _mediator.Send(request);

                // Checking errors if exist then add them to modelstate.
                ModelState.CheckErrors(responce);
            }

            return(RedirectToRoute("Projects", route));
        }