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); }
/// <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)); }
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)); }
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()); * }*/ }
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)); }
/// <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); }
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)); }