public AttachmentsController(IAttachmentsRepository attachmentsRepository,
                              IArtifactPermissionsRepository artifactPermissionsRepository,
                              IArtifactVersionsRepository artifactVersionsRepository) : base()
 {
     AttachmentsRepository         = attachmentsRepository;
     ArtifactPermissionsRepository = artifactPermissionsRepository;
     ArtifactVersionsRepository    = artifactVersionsRepository;
 }
 public RelationshipsController(IRelationshipsRepository relationshipsRepository,
                                IArtifactPermissionsRepository artifactPermissionsRepository,
                                IArtifactVersionsRepository artifactVersionsRepository) : base()
 {
     _relationshipsRepository       = relationshipsRepository;
     _artifactPermissionsRepository = artifactPermissionsRepository;
     _artifactVersionsRepository    = artifactVersionsRepository;
 }
 public DiscussionController(IDiscussionsRepository discussionsRepository,
                             IArtifactPermissionsRepository artifactPermissionsRepository,
                             IArtifactVersionsRepository artifactVersionsRepository) : base()
 {
     _discussionsRepository         = discussionsRepository;
     _artifactPermissionsRepository = artifactPermissionsRepository;
     _artifactVersionsRepository    = artifactVersionsRepository;
 }
Example #4
0
 public ReviewsService(
     IReviewsRepository reviewsRepository,
     IArtifactRepository artifactRepository,
     IArtifactPermissionsRepository permissionsRepository,
     IArtifactVersionsRepository artifactVersionsRepository,
     ILockArtifactsRepository lockArtifactsRepository,
     IItemInfoRepository itemInfoRepository,
     ICurrentDateTimeService currentDateTimeService)
 {
     _reviewsRepository          = reviewsRepository;
     _artifactRepository         = artifactRepository;
     _permissionsRepository      = permissionsRepository;
     _artifactVersionsRepository = artifactVersionsRepository;
     _lockArtifactsRepository    = lockArtifactsRepository;
     _itemInfoRepository         = itemInfoRepository;
     _currentDateTimeService     = currentDateTimeService;
 }
 public StateChangeExecutorRepositories(IArtifactVersionsRepository artifactVersionsRepository,
                                        IWorkflowRepository workflowRepository,
                                        IVersionControlService versionControlService,
                                        IReuseRepository reuseRepository,
                                        ISaveArtifactRepository saveArtifactRepository,
                                        IApplicationSettingsRepository applicationSettingsRepository,
                                        IServiceLogRepository serviceLogRepository,
                                        IUsersRepository usersRepository,
                                        IWebhooksRepository webhooksRepository,
                                        IProjectMetaRepository projectMetaRepository)
 {
     ArtifactVersionsRepository    = artifactVersionsRepository;
     WorkflowRepository            = workflowRepository;
     VersionControlService         = versionControlService;
     ReuseRepository               = reuseRepository;
     SaveArtifactRepository        = saveArtifactRepository;
     ApplicationSettingsRepository = applicationSettingsRepository;
     ServiceLogRepository          = serviceLogRepository;
     UsersRepository               = usersRepository;
     WebhooksRepository            = webhooksRepository;
     ProjectMetaRepository         = projectMetaRepository;
 }
Example #6
0
 public ArtifactVersionsController(IArtifactVersionsRepository artifactVersionsRepository, IArtifactPermissionsRepository artifactPermissionsRepository) : base()
 {
     ArtifactVersionsRepository    = artifactVersionsRepository;
     ArtifactPermissionsRepository = artifactPermissionsRepository;
 }
        public async Task <IList <IWorkflowMessage> > GenerateMessages(int userId,
                                                                       int revisionId,
                                                                       string userName,
                                                                       long transactionId,
                                                                       WorkflowEventTriggers postOpTriggers,
                                                                       IBaseArtifactVersionControlInfo artifactInfo,
                                                                       string projectName,
                                                                       IDictionary <int, IList <Property> > modifiedProperties,
                                                                       WorkflowState currentState,
                                                                       WorkflowState newState,
                                                                       bool sendArtifactPublishedMessage,
                                                                       string artifactUrl,
                                                                       string baseUrl,
                                                                       IUsersRepository usersRepository,
                                                                       IServiceLogRepository serviceLogRepository,
                                                                       IWebhooksRepository webhooksRepository,
                                                                       IProjectMetaRepository projectMetaRepository,
                                                                       IArtifactVersionsRepository artifactVersionsRepository,
                                                                       IDbTransaction transaction = null)
        {
            var resultMessages = new List <IWorkflowMessage>();
            // var project = artifactResultSet?.Projects?.FirstOrDefault(d => d.Id == artifactInfo.ProjectId);
            var baseHostUri = baseUrl ?? ServerUriHelper.GetBaseHostUri()?.ToString();

            foreach (var workflowEventTrigger in postOpTriggers)
            {
                if (workflowEventTrigger?.Action == null)
                {
                    continue;
                }
                switch (workflowEventTrigger.ActionType)
                {
                case MessageActionType.Notification:
                    var notificationAction = workflowEventTrigger.Action as EmailNotificationAction;
                    if (notificationAction == null)
                    {
                        continue;
                    }
                    var notificationMessage = await GetNotificationMessage(userId,
                                                                           revisionId,
                                                                           transactionId,
                                                                           artifactInfo,
                                                                           projectName,
                                                                           notificationAction,
                                                                           artifactUrl,
                                                                           baseHostUri,
                                                                           usersRepository,
                                                                           transaction);

                    if (notificationMessage == null)
                    {
                        await serviceLogRepository.LogInformation(LogSource,
                                                                  $"Skipping Email notification action for artifact {artifactInfo.Id}");

                        continue;
                    }
                    resultMessages.Add(notificationMessage);
                    break;

                case MessageActionType.GenerateChildren:
                    var generateChildrenAction = workflowEventTrigger.Action as GenerateChildrenAction;
                    if (generateChildrenAction == null)
                    {
                        continue;
                    }
                    var generateChildrenMessage = new GenerateDescendantsMessage
                    {
                        TransactionId         = transactionId,
                        ChildCount            = generateChildrenAction.ChildCount.GetValueOrDefault(10),
                        DesiredArtifactTypeId = generateChildrenAction.ArtifactTypeId,
                        ArtifactId            = artifactInfo.Id,
                        RevisionId            = revisionId,
                        UserId         = userId,
                        ProjectId      = artifactInfo.ProjectId,
                        UserName       = userName,
                        BaseHostUri    = baseHostUri,
                        ProjectName    = projectName,
                        TypePredefined = (int)artifactInfo.PredefinedType
                    };
                    resultMessages.Add(generateChildrenMessage);
                    break;

                case MessageActionType.GenerateTests:
                    var generateTestsAction = workflowEventTrigger.Action as GenerateTestCasesAction;
                    if (generateTestsAction == null || artifactInfo.PredefinedType != ItemTypePredefined.Process)
                    {
                        continue;
                    }
                    var generateTestsMessage = new GenerateTestsMessage
                    {
                        TransactionId = transactionId,
                        ArtifactId    = artifactInfo.Id,
                        RevisionId    = revisionId,
                        UserId        = userId,
                        ProjectId     = artifactInfo.ProjectId,
                        UserName      = userName,
                        BaseHostUri   = baseHostUri,
                        ProjectName   = projectName
                    };
                    resultMessages.Add(generateTestsMessage);
                    break;

                case MessageActionType.GenerateUserStories:
                    var generateUserStories = workflowEventTrigger.Action as GenerateUserStoriesAction;
                    if (generateUserStories == null || artifactInfo.PredefinedType != ItemTypePredefined.Process)
                    {
                        continue;
                    }
                    var generateUserStoriesMessage = new GenerateUserStoriesMessage
                    {
                        TransactionId = transactionId,
                        ArtifactId    = artifactInfo.Id,
                        RevisionId    = revisionId,
                        UserId        = userId,
                        ProjectId     = artifactInfo.ProjectId,
                        UserName      = userName,
                        BaseHostUri   = baseHostUri,
                        ProjectName   = projectName
                    };
                    resultMessages.Add(generateUserStoriesMessage);
                    break;

                case MessageActionType.Webhooks:
                    var webhookAction = workflowEventTrigger.Action as WebhookAction;
                    if (webhookAction == null)
                    {
                        continue;
                    }

                    var customTypes =
                        await projectMetaRepository.GetCustomProjectTypesAsync(artifactInfo.ProjectId, userId);

                    var artifactType =
                        customTypes.ArtifactTypes.FirstOrDefault(at => at.Id == artifactInfo.ItemTypeId);

                    var artifactPropertyInfos = await artifactVersionsRepository.GetArtifactPropertyInfoAsync(
                        userId,
                        new List <int> {
                        artifactInfo.Id
                    },
                        new List <int>
                    {
                        (int)PropertyTypePredefined.Name,
                        (int)PropertyTypePredefined.Description,
                        (int)PropertyTypePredefined.ID,
                        (int)PropertyTypePredefined.CreatedBy,
                        (int)PropertyTypePredefined.LastEditedOn,
                        (int)PropertyTypePredefined.LastEditedBy,
                        (int)PropertyTypePredefined.CreatedOn
                    },
                        artifactType.CustomPropertyTypeIds);

                    var webhookArtifactInfo = new WebhookArtifactInfo
                    {
                        Id          = Guid.NewGuid().ToString(),
                        EventType   = WebhookEventType,
                        PublisherId = WebhookPublisherId,
                        Scope       = new WebhookArtifactInfoScope
                        {
                            Type       = WebhookType,
                            WorkflowId = currentState.WorkflowId
                        },
                        Resource = new WebhookResource
                        {
                            Name                 = artifactInfo.Name,
                            ProjectId            = artifactInfo.ProjectId,
                            ParentId             = ((VersionControlArtifactInfo)artifactInfo).ParentId,
                            ArtifactTypeId       = artifactInfo.ItemTypeId,
                            ArtifactTypeName     = artifactType?.Name,
                            BaseArtifactType     = artifactType?.PredefinedType?.ToString(),
                            ArtifactPropertyInfo =
                                await ConvertToWebhookPropertyInfo(artifactPropertyInfos, customTypes.PropertyTypes, usersRepository),
                            ChangedState = new WebhookStateChangeInfo
                            {
                                NewValue = new WebhookStateInfo
                                {
                                    Id         = newState.Id,
                                    Name       = newState.Name,
                                    WorkflowId = newState.WorkflowId
                                },
                                OldValue = new WebhookStateInfo
                                {
                                    Id         = currentState.Id,
                                    Name       = currentState.Name,
                                    WorkflowId = currentState.WorkflowId
                                }
                            },
                            Revision     = revisionId,
                            Version      = ((VersionControlArtifactInfo)artifactInfo).Version,
                            Id           = artifactInfo.Id,
                            BlueprintUrl = string.Format($"{baseHostUri}?ArtifactId={artifactInfo.Id}"),
                            Link         = string.Format(
                                $"{baseHostUri}api/v1/projects/{artifactInfo.ProjectId}/artifacts/{artifactInfo.Id}")
                        }
                    };

                    var webhookMessage = await GetWebhookMessage(userId, revisionId, transactionId, webhookAction,
                                                                 webhooksRepository, webhookArtifactInfo, transaction);

                    if (webhookMessage == null)
                    {
                        await serviceLogRepository.LogInformation(LogSource,
                                                                  $"Skipping Webhook action for artifact {artifactInfo.Id}: {artifactInfo.Name}.");

                        continue;
                    }
                    resultMessages.Add(webhookMessage);
                    break;
                }
            }

            // Add published artifact message
            if (sendArtifactPublishedMessage)
            {
                var publishedMessage =
                    GetPublishedMessage(userId, revisionId, transactionId, artifactInfo, modifiedProperties) as
                    ArtifactsPublishedMessage;
                if (publishedMessage != null && publishedMessage.Artifacts.Any())
                {
                    resultMessages.Add(publishedMessage);
                }
            }

            var artifactIds = new List <int>
            {
                artifactInfo.Id
            };
            var artifactsChangedMessage = new ArtifactsChangedMessage(artifactIds)
            {
                TransactionId = transactionId,
                UserId        = userId,
                RevisionId    = revisionId,
                ChangeType    = ArtifactChangedType.Publish
            };

            resultMessages.Add(artifactsChangedMessage);

            return(resultMessages);
        }