public async Task <IActionResult> CreateUserInvitation(Guid organizationId, [FromBody] OrganizationUserInvitationPostRp resource) { if (!ModelState.IsValid) { return(this.BadRequest(ModelState)); } if (resource.Role != Domain.Models.PipelineRole.OrganizationAdmin && resource.Role != Domain.Models.PipelineRole.OrganizationContributor) { ModelState.AddModelError("", "The role is not valid, select a valid role"); return(this.BadRequest(ModelState)); } await _organizationUserInvitationService.InviteUser(organizationId, resource); if (_domainManagerService.HasNotFounds()) { return(this.NotFound(_domainManagerService.GetNotFounds())); } if (_domainManagerService.HasForbidden()) { return(this.Forbidden(_domainManagerService.GetForbidden())); } if (_domainManagerService.HasConflicts()) { return(this.Conflict(_domainManagerService.GetConflicts())); } return(this.Ok()); }
public async Task InviteUser(Guid organizationId, OrganizationUserInvitationPostRp resource) { string loggedUserId = _identityService.GetUserId(); string loggedUserName = _identityService.GetUserName(); User user = await _userRepository.GetUser(loggedUserId); Organization organization = user.FindOrganizationById(organizationId); if (organization == null) { await _domainManagerService.AddNotFound($"The organzation with id {organizationId} does not exists."); return; } PipelineRole role = user.GetRoleInOrganization(organizationId); if (role != PipelineRole.OrganizationAdmin) { await _domainManagerService.AddForbidden($"You are not authorized to invite users in this organization."); return; } User invitedUser = await _userRepository.GetUserByEmail(resource.UserEmail); if (invitedUser != null) { OrganizationUser organizationUser = organization.GetOrganizationUser(resource.UserEmail); if (organizationUser != null) { await _domainManagerService.AddConflict($"The user with email {resource.UserEmail} already exists."); return; } } OrganizationUserInvitation organizationUserInvitation = organization.GetOrganizationUserInvitation(resource.UserEmail); if (organizationUserInvitation != null) { await _domainManagerService.AddConflict($"The user with email {resource.UserEmail} was already invited."); return; } OrganizationUserInvitation newUserInvitation = OrganizationUserInvitation.Factory.Create(organizationId, invitedUser == null ? null : invitedUser.Id, resource.UserEmail, resource.Role, loggedUserId); organization.AddUserInvitation(newUserInvitation); await _userRepository.SaveChanges(); var @event = new OrganizationUserInvitedEvent(_correlationId) { OrganizationUserInvitationId = newUserInvitation.OrganizationUserInvitationId, InvitationType = newUserInvitation.InvitationType, RequestorFullName = loggedUserName, Role = newUserInvitation.Role, UserEmail = newUserInvitation.UserEmail, UserFullName = invitedUser == null ? null : invitedUser.GetFullName() }; await _eventBusService.Publish(queueName : "OrganizationUserInvitedEvent", @event : @event); }