public async Task ImportProject(ProjectImportedEvent @event, ApplicationOptions options)
 {
     await this.CreateProject(new ProjectCreatedEvent(@event.CorrelationId) {
         AgentPoolId        = @event.AgentPoolId,
         CMSAccessId        = @event.CMSAccessId,
         CMSAccessSecret    = @event.CMSAccessSecret,
         CMSAccessToken     = @event.CMSAccessToken,
         CMSAccountId       = @event.CMSAccountId,
         CMSAccountName     = @event.CMSAccountName,
         CMSType            = @event.CMSType,
         CPSAccessAppId     = @event.CPSAccessAppId,
         CPSAccessAppSecret = @event.CPSAccessAppSecret,
         CPSAccessDirectory = @event.CPSAccessDirectory,
         CPSAccessId        = @event.CPSAccessId,
         CPSAccessName      = @event.CPSAccessName,
         CPSAccessSecret    = @event.CPSAccessSecret,
         CPSType            = @event.CPSType,
         OrganizationId     = @event.OrganizationId,
         ProjectId          = @event.ProjectId,
         ProjectName        = @event.ProjectName,
         ProjectVSTSFake    = @event.ProjectVSTSFake,
         UserId             = @event.UserId
     }, options);
 }
예제 #2
0
 public Task ImportProject(ProjectImportedEvent @event, ApplicationOptions options)
 {
     return(Task.CompletedTask);
 }
        public async Task ImportProject(Guid organizationId, ProjectImportPostRp resource)
        {
            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;
            }

            OrganizationCMS organizationCMS = organization.GetConfigurationManagementServiceById(resource.OrganizationCMSId);

            if (organizationCMS == null)
            {
                await _domainManagerService.AddNotFound($"The configuration management service with id {resource.OrganizationCMSId} does not exists.");

                return;
            }

            if (organizationCMS.Type == ConfigurationManagementService.VSTS && resource.projectVisibility == ProjectVisibility.None)
            {
                await _domainManagerService.AddConflict($"The project visibility should be Private or Public.");

                return;
            }

            OrganizationCPS organizationCPS = null;

            if (resource.OrganizationCPSId.HasValue)
            {
                organizationCPS = organization.GetCloudProviderServiceById(resource.OrganizationCPSId.Value);

                if (organizationCPS == null)
                {
                    await _domainManagerService.AddNotFound($"The cloud provider service with id {resource.OrganizationCPSId} does not exists.");

                    return;
                }
            }
            else
            {
                organizationCPS = new OrganizationCPS {
                    Type = CloudProviderService.None
                };
            }

            Project existingProject = organization.GetProjectByName(resource.Name);

            if (existingProject != null)
            {
                await _domainManagerService.AddConflict($"The project name {resource.Name} has already been taken.");

                return;
            }

            //Auth
            CMSAuthCredentialModel cmsAuthCredential = this._cmsCredentialService(organizationCMS.Type).GetToken(
                _dataProtectorService.Unprotect(organizationCMS.AccountId),
                _dataProtectorService.Unprotect(organizationCMS.AccountName),
                _dataProtectorService.Unprotect(organizationCMS.AccessSecret),
                _dataProtectorService.Unprotect(organizationCMS.AccessToken));


            Project newProject = user.ImportProject(organizationId, string.Empty, resource.Name, resource.Description, resource.ProjectType, resource.OrganizationCMSId, resource.OrganizationCPSId, null, resource.AgentPoolId, resource.projectVisibility, organizationCPS.Type, organizationCMS.Type);

            //SaveChanges in CSM
            CMSProjectCreateModel projectCreateModel = CMSProjectCreateModel.Factory.Create(organization.Name, resource.Name, resource.Description, resource.projectVisibility);

            newProject.UpdateExternalInformation(resource.ProjectExternalId, resource.ProjectExternalName);

            _userRepository.Update(user);

            await _userRepository.SaveChanges();

            await _domainManagerService.AddResult("ProjectId", newProject.ProjectId);

            //send event
            var @event = new ProjectImportedEvent(_correlationId)
            {
                OrganizationId      = organization.OrganizationId,
                OrganizationCMSId   = resource.OrganizationCMSId,
                ProjectId           = newProject.ProjectId,
                ProjectName         = resource.Name,
                InternalProjectName = newProject.InternalName,
                ProjectExternalId   = resource.ProjectExternalId,
                ProjectExternalName = resource.ProjectExternalName,

                BuildDefinitionYML       = resource.BuildDefinitionYML,
                ProjectServiceTemplateId = resource.ProjectServiceTemplateId,

                ProjectVSTSFake = this._slugService.GetSlug($"{organization.Owner.Email} {organization.Name} {newProject.Name}"),
                AgentPoolId     = newProject.AgentPoolId,

                CMSType         = organizationCMS.Type,
                CMSAccountId    = _dataProtectorService.Unprotect(organizationCMS.AccountId),
                CMSAccountName  = _dataProtectorService.Unprotect(organizationCMS.AccountName),
                CMSAccessId     = _dataProtectorService.Unprotect(organizationCMS.AccessId),
                CMSAccessSecret = _dataProtectorService.Unprotect(organizationCMS.AccessSecret),
                CMSAccessToken  = _dataProtectorService.Unprotect(organizationCMS.AccessToken),

                CPSType            = organizationCPS.Type,
                CPSAccessId        = _dataProtectorService.Unprotect(organizationCPS.AccessId),
                CPSAccessName      = _dataProtectorService.Unprotect(organizationCPS.AccessName),
                CPSAccessSecret    = _dataProtectorService.Unprotect(organizationCPS.AccessSecret),
                CPSAccessAppId     = _dataProtectorService.Unprotect(organizationCPS.AccessAppId),
                CPSAccessAppSecret = _dataProtectorService.Unprotect(organizationCPS.AccessAppSecret),
                CPSAccessDirectory = _dataProtectorService.Unprotect(organizationCPS.AccessDirectory),
                UserId             = loggedUserId,

                ProjectRepository = new ProjectRepositoryCreatedEvent {
                    Repositories = resource.Repositories.Select(c => new ProjectRepositoryServiceCreatedEvent {
                        Id           = c.Id,
                        Name         = c.Name,
                        Link         = c.Link,
                        BranchName   = c.BranchName,
                        ExternalName = c.ExternalName
                    }).ToList(),
                }
            };

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