Esempio n. 1
0
 public ExternalController(NotificationsRepository notificationsRepository)
 {
     _notificationsRepository = notificationsRepository;
 }
        protected override void HandleNotificationInternal(BaseMessage message, string action, ProjectMembersRepository projectMembersRepository,
                                                           NotificationsRepository notificationsRepository)
        {
            string text      = null;
            string projectId = null;

            switch (message)
            {
            case TaskCreatedMessage createdMessage:
                projectId = createdMessage.ProjectId;

                if (action == MessageActions.Created)
                {
                    text = $"Created task \"{createdMessage.Title}\" in list \"{createdMessage.ListTitle}\" (project \"{createdMessage.ProjectTitle}\").";

                    if (createdMessage.Members?.Any() ?? false)
                    {
                        text += $" Members: {string.Join(", ", createdMessage.Members.Select(m => m.Username))}.";
                    }

                    if (createdMessage.Labels?.Any() ?? false)
                    {
                        text += $" Labels: {string.Join(", ", createdMessage.Labels.Select(m => m.Title))}.";
                    }
                }
                break;

            case TaskUpdatedMessage updatedMessage:
                projectId = updatedMessage.ProjectId;
                text      = $"Updated task \"{updatedMessage.Title}\" in list \"{updatedMessage.ListTitle}\" (project \"{updatedMessage.ProjectTitle}\").";

                if (updatedMessage.AddedMembers?.Any() ?? false)
                {
                    text += $" Added members: {string.Join(", ", updatedMessage.AddedMembers.Select(m => m.Username))}.";
                }

                if (updatedMessage.RemovedMembers?.Any() ?? false)
                {
                    text += $" Removed members: {string.Join(", ", updatedMessage.RemovedMembers.Select(m => m.Username))}.";
                }

                if (updatedMessage.AddedLabels?.Any() ?? false)
                {
                    text += $" Added labels: {string.Join(", ", updatedMessage.AddedLabels.Select(m => m.Title))}.";
                }

                if (updatedMessage.RemovedLabels?.Any() ?? false)
                {
                    text += $" Removed labels: {string.Join(", ", updatedMessage.RemovedLabels.Select(m => m.Title))}.";
                }
                break;

            case TaskDeletedMessage deletedMessage:
                projectId = deletedMessage.ProjectId;
                text      = $"Removed task \"{deletedMessage.Title}\"";
                break;

            default:
                ThrowUnknownMessageException(message);
                break;
            }

            if (text != null && projectId != null)
            {
                var udatedProjectMembers = projectMembersRepository
                                           .GetProjectMembersIdsAsync(projectId)
                                           .GetAwaiter()
                                           .GetResult();

                notificationsRepository
                .AddNotificationsToUsersAsync(text, udatedProjectMembers)
                .GetAwaiter()
                .GetResult();
            }
        }