Beispiel #1
0
        public async Task InactivateProjectEnvironment(Guid organizationId, Guid projectId, Guid environmentId)
        {
            string loggedUserId = _identityService.GetUserId();

            DomainModels.User user = await _userRepository.GetUser(loggedUserId);

            DomainModels.Organization organization = user.FindOrganizationById(organizationId);
            if (organization == null)
            {
                await _domainManagerService.AddNotFound($"The organzation with id {organizationId} does not exists.");

                return;
            }

            DomainModels.Project project = user.FindProjectById(projectId);
            if (project == null)
            {
                await _domainManagerService.AddNotFound($"The project with id {projectId} does not exists.");

                return;
            }

            DomainModels.PipelineRole role = user.GetRoleInProject(projectId);
            if (role != DomainModels.PipelineRole.ProjectAdmin)
            {
                await _domainManagerService.AddForbidden($"You are not authorized to delete environments in this project.");

                return;
            }

            if (project.Status != DomainModels.EntityStatus.Active)
            {
                await _domainManagerService.AddConflict($"The project with id {projectId} must be in status Active to inactivate a project environment.");

                return;
            }

            DomainModels.ProjectEnvironment environment = project.GetEnvironmentById(environmentId);
            if (environment == null)
            {
                await _domainManagerService.AddNotFound($"The environment with id {environmentId} does not exists.");

                return;
            }
            ;

            if (environment.Type == DomainModels.EnvironmentType.Fact)
            {
                await _domainManagerService.AddConflict($"The environment fact cannot be inactivated.");

                return;
            }
            ;

            if (environment.Status != DomainModels.EntityStatus.Active)
            {
                await _domainManagerService.AddConflict($"The environment {environment.Name} must be in status Active to be inactivated.");

                return;
            }

            user.InactivateProjectEnvironment(organizationId, projectId, environmentId);

            _userRepository.Update(user);

            await _userRepository.SaveChanges();

            var projectServices = project.GetServicesWithReleaseStages();

            foreach (var projectService in projectServices)
            {
                var @event = new ProjectEnvironmentInactivatedEvent(_correlationId)
                {
                    OrganizationId            = organization.OrganizationId,
                    OrganizationName          = organization.Name,
                    ProjectId                 = project.ProjectId,
                    ProjectExternalId         = project.ProjectExternalId,
                    ProjectExternalEndpointId = project.ProjectExternalEndpointId,
                    ProjectVSTSFakeName       = project.ProjectVSTSFakeName,
                    ProjectName               = project.Name,
                    ServiceName               = projectService.Name,
                    CMSType         = project.OrganizationCMS.Type,
                    CMSAccountId    = _dataProtectorService.Unprotect(project.OrganizationCMS.AccountId),
                    CMSAccountName  = _dataProtectorService.Unprotect(project.OrganizationCMS.AccountName),
                    CMSAccessId     = _dataProtectorService.Unprotect(project.OrganizationCMS.AccessId),
                    CMSAccessSecret = _dataProtectorService.Unprotect(project.OrganizationCMS.AccessSecret),
                    CMSAccessToken  = _dataProtectorService.Unprotect(project.OrganizationCMS.AccessToken),
                    EnvironmentName = environment.Name,
                    ReleseStageId   = projectService.ReleaseStageId.Value
                };

                //Cloud Provider Data
                @event.CPSType            = project.OrganizationCPS.Type;
                @event.CPSAccessId        = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessId);
                @event.CPSAccessName      = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessName);
                @event.CPSAccessSecret    = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessSecret);
                @event.CPSAccessRegion    = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessRegion);
                @event.CPSAccessAppId     = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessAppId);
                @event.CPSAccessAppSecret = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessAppSecret);
                @event.CPSAccessDirectory = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessDirectory);

                await _eventBusService.Publish(queueName : "ProjectEnvironmentInactivatedEvent", @event : @event);
            }
        }