Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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);
        }