Example #1
0
        public void Apply(ProjectDeletedEvent aggregateEvent)
        {
            var projectToRemove = _projects.FirstOrDefault(i => i.Id == aggregateEvent.ProjectId);

            if (projectToRemove != null)
            {
                _projects.Remove(projectToRemove);
            }
        }
Example #2
0
        public override void Delete()
        {
            CheckIfCreated();

            var projectDeletedEvent = new ProjectDeletedEvent(
                Id,
                Version + 1,
                "");

            Apply(projectDeletedEvent);
        }
Example #3
0
        private void OnProjectDeleted(ProjectDeletedEvent e)
        {
            Debug.Assert(!this.InvokeRequired);
            var node = this.rootNode.Nodes
                       .Cast <ProjectNode>()
                       .Where(p => p.ProjectId == e.ProjectId)
                       .FirstOrDefault();

            if (node != null)
            {
                // Remove corresponding node from tree.
                this.rootNode.Nodes.Remove(node);
            }
        }
Example #4
0
        public async Task DeleteProject(ProjectDeletedEvent @event)
        {
            string accountUrl = $"https://{@event.CMSAccountName}.visualstudio.com";

            HttpClientWrapperAuthorizationModel authCredentials = new HttpClientWrapperAuthorizationModel();

            authCredentials.Schema = "Basic";
            authCredentials.Value  = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", @event.CMSAccessSecret)));

            string projectUrl      = $"{accountUrl}/_apis/projects/{@event.ProjectExternalId}?api-version={_vstsOptions.Value.ApiVersion}";
            var    projectResponse = await _httpClientWrapperService.DeleteAsync(projectUrl, authCredentials);

            projectResponse.EnsureSuccessStatusCode();
        }
        public async Task DeleteProject(ProjectDeletedEvent @event)
        {
            //Begin: check data **********
            @event.CMSAccountName  = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId;
            @event.CMSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret;

            string cmsProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectExternalId : @event.ProjectVSTSFakeId;
            //End: check data **********

            string accountUrl = $"https://{@event.CMSAccountName}.visualstudio.com";

            HttpClientWrapperAuthorizationModel authCredentials = new HttpClientWrapperAuthorizationModel();

            authCredentials.Schema = "Basic";
            authCredentials.Value  = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", @event.CMSAccessSecret)));

            string projectUrl      = $"{accountUrl}/_apis/projects/{cmsProjectId}?api-version={_fakeAccountOptions.Value.ApiVersion}";
            var    projectResponse = await _httpClientWrapperService.DeleteAsync(projectUrl, authCredentials);

            projectResponse.EnsureSuccessStatusCode();
        }
Example #6
0
        public async Task DeleteProject(ProjectDeletedEvent @event)
        {
            //Begin: check data **********
            @event.CMSAccountName  = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId;
            @event.CMSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret;

            string cmsProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectExternalId : @event.ProjectVSTSFakeId;
            //End: check data **********

            string accountUrl = $"https://{@event.CMSAccountName}.visualstudio.com";

            HttpClientWrapperAuthorizationModel authCredentials = new HttpClientWrapperAuthorizationModel();

            authCredentials.Schema = "Basic";
            authCredentials.Value  = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", @event.CMSAccessSecret)));

            string projectUrl      = $"{accountUrl}/_apis/projects/{cmsProjectId}?api-version={_fakeAccountOptions.Value.ApiVersion}";
            var    projectResponse = await _httpClientWrapperService.DeleteAsync(projectUrl, authCredentials);

            projectResponse.EnsureSuccessStatusCode();

            // Delete from Bitbucket

            var client = new HttpClient();

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", @event.CMSAccountId, @event.CMSAccessToken))));
            client.BaseAddress = new Uri(API_URL);

            var response = await client.GetAsync($"/{API_VERSION}/teams?role=admin");

            var teamResult = await response.MapTo <CMSBitBucketTeamListModel>();

            var defaultTeam = teamResult.Teams.FirstOrDefault(c => c.TeamId.Equals(@event.OrganizationExternalId));

            response = await client.DeleteAsync($"/{API_VERSION}/teams/{defaultTeam.UserName}/projects/{@event.ProjectExternalId}");

            response.EnsureSuccessStatusCode();
        }
Example #7
0
 public Task Handle(ProjectDeletedEvent notification, CancellationToken cancellationToken)
 {
     return(_eventStore.Save(notification));
 }
 public void Handle(ProjectDeletedEvent evt)
 {
     _logger.LogInformation(GetLogMessage("Project Deleted Event Triggered"));
 }
Example #9
0
 public void Handle(ProjectDeletedEvent domainEvent)
 {
     _projectRepository.Delete(domainEvent.AggregateId);
 }
        public async Task DeleteProject(Guid organizationId, Guid projectId)
        {
            string loggedUserId = _identityService.GetUserId();

            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;
            }

            Project project = user.FindProjectById(projectId, false);

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

                return;
            }

            PipelineRole role = user.GetRoleInProject(projectId);

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

                return;
            }

            if (project.Status != EntityStatus.Active)
            {
                await _domainManagerService.AddConflict($"The project with id {projectId} must be in status Active to be modified/deleted.");

                return;
            }

            var preparingServices = project.GetPreparingServices();

            if (preparingServices.Any())
            {
                await _domainManagerService.AddConflict($"The project with id {projectId} has pipes in status Preparing. All services must be in status Active to delete the project");

                return;
            }

            var preparingFeatures = project.GetPreparingFeatures();

            if (preparingFeatures.Any())
            {
                await _domainManagerService.AddConflict($"The project with id {projectId} has features in status Preparing. All features must be in status Active to delete the project");

                return;
            }

            user.DeleteProject(organizationId, projectId);

            _userRepository.Update(user);

            await _userRepository.SaveChanges();

            //send event to delete project in CMS
            var projectDeletedEvent = new ProjectDeletedEvent(_correlationId, project.IsImported)
            {
                OrganizationExternalId = project.OrganizationExternalId,
                ProjectExternalId      = project.ProjectExternalId,
                ProjectVSTSFakeId      = project.ProjectVSTSFakeId,
                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)
            };

            await _eventBusService.Publish(queueName : "ProjectDeletedEvent", @event : projectDeletedEvent);

            //send event to delete cloud services in CPS - Services
            var services = await _projectRepository.GetProjectServices(organizationId, projectId);

            var environments = await _projectRepository.GetProjectEnvironments(organizationId, projectId);

            foreach (var service in services)
            {
                var projectServiceDeletedEvent = new ProjectServiceDeletedEvent(_correlationId)
                {
                    OrganizationExternalId                = project.OrganizationExternalId,
                    OrganizationName                      = organization.Name,
                    ProjectName                           = project.Name,
                    ServiceName                           = service.Name,
                    ProjectVSTSFakeName                   = project.ProjectVSTSFakeName,
                    ProjectExternalId                     = project.ProjectExternalId,
                    ProjectServiceExternalId              = service.ProjectServiceExternalId,
                    CommitStageId                         = service.CommitStageId,
                    ReleaseStageId                        = service.ReleaseStageId,
                    CommitServiceHookId                   = service.CommitServiceHookId,
                    ReleaseServiceHookId                  = service.ReleaseServiceHookId,
                    CodeServiceHookId                     = service.CodeServiceHookId,
                    ReleaseStartedServiceHookId           = service.ReleaseStartedServiceHookId,
                    ReleasePendingApprovalServiceHookId   = service.ReleasePendingApprovalServiceHookId,
                    ReleaseCompletedApprovalServiceHookId = service.ReleaseCompletedApprovalServiceHookId,
                    Environments                          = environments.Select(x => x.Name).ToList(),
                    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),
                    CPSType            = project.OrganizationCPS.Type,
                    CPSAccessId        = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessId),
                    CPSAccessName      = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessName),
                    CPSAccessSecret    = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessSecret),
                    CPSAccessRegion    = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessRegion),
                    CPSAccessAppId     = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessAppId),
                    CPSAccessAppSecret = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessAppSecret),
                    CPSAccessDirectory = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessDirectory),
                    SourceEvent        = Domain.Models.Enums.SourceEvent.Project
                };

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

            //send event to delete cloud services in CPS - Features
            var features = await _projectRepository.GetProjectFeatures(organizationId, projectId);

            foreach (var feature in features)
            {
                List <ProjectFeatureServiceDeletedEvent> projectFeatureServiceDeletedEventList = new List <ProjectFeatureServiceDeletedEvent>();

                var featureServices = await _projectFeatureRepository.GetProjectFeatureServices(organizationId, projectId, feature.ProjectFeatureId);

                foreach (var item in featureServices)
                {
                    projectFeatureServiceDeletedEventList.Add(new ProjectFeatureServiceDeletedEvent(_correlationId)
                    {
                        ServiceId                             = item.ProjectServiceId,
                        ServiceExternalId                     = item.ProjectService.ProjectServiceExternalId,
                        ServiceExternalUrl                    = item.ProjectService.ProjectServiceExternalUrl,
                        ServiceName                           = item.ProjectService.Name,
                        ServiceTemplateUrl                    = item.ProjectService.ProjectServiceTemplate.Url,
                        CommitStageId                         = item.CommitStageId,
                        ReleaseStageId                        = item.ReleaseStageId,
                        CommitServiceHookId                   = item.CommitServiceHookId,
                        ReleaseServiceHookId                  = item.ReleaseServiceHookId,
                        CodeServiceHookId                     = item.CodeServiceHookId,
                        ReleaseStartedServiceHookId           = item.ReleaseStartedServiceHookId,
                        ReleasePendingApprovalServiceHookId   = item.ReleasePendingApprovalServiceHookId,
                        ReleaseCompletedApprovalServiceHookId = item.ReleaseCompletedApprovalServiceHookId
                    });
                }

                var projectFeatureDeletedEvent = new ProjectFeatureDeletedEvent(_correlationId)
                {
                    OrganizationId            = organization.OrganizationId,
                    OrganizationName          = organization.Name,
                    ProjectId                 = project.ProjectId,
                    Services                  = projectFeatureServiceDeletedEventList,
                    ProjectExternalId         = project.ProjectExternalId,
                    ProjectExternalEndpointId = project.ProjectExternalEndpointId,
                    ProjectVSTSFakeName       = project.ProjectVSTSFakeName,
                    ProjectName               = project.Name,
                    FeatureId                 = feature.ProjectFeatureId,
                    FeatureName               = feature.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),
                    CPSType            = project.OrganizationCPS.Type,
                    CPSAccessId        = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessId),
                    CPSAccessName      = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessName),
                    CPSAccessSecret    = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessSecret),
                    CPSAccessRegion    = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessRegion),
                    CPSAccessAppId     = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessAppId),
                    CPSAccessAppSecret = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessAppSecret),
                    CPSAccessDirectory = _dataProtectorService.Unprotect(project.OrganizationCPS.AccessDirectory),
                    SourceEvent        = Domain.Models.Enums.SourceEvent.Project
                };

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