public Task SendIssueCreatedAsync(IssueCreatedEventArgs args)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }

            _logger.Information("Posting IssueCreated event to service bus.");

            var userProperties = new Dictionary <string, object>();

            userProperties["Title"]                = args.Title;
            userProperties["Description"]          = args.Description;
            userProperties["RemedyStatus"]         = args.RemedyStatus;
            userProperties["RequestorGivenName"]   = args.RequestorGivenName;
            userProperties["RequestorSurnName"]    = args.RequestorSurnName;
            userProperties["RequestorDisplayName"] = args.RequestorDisplayName;
            userProperties["RequestorTelephone"]   = args.RequestorTelephone;
            userProperties["RequestorEmail"]       = args.RequestorEmail;
            userProperties["ReferenceId"]          = args.ReferenceId;
            userProperties["AssigneeEmail"]        = args.AssigneeEmail;
            userProperties["AssigneeGroup"]        = args.AssigneeGroup;
            userProperties["CreatedDate"]          = args.CreatedDate;
            userProperties["Urgency"]              = args.Urgency;


            return(_messageSender.SendMessageAsync(ISSUE_CREATED, userProperties));
        }
        private async Task ReceiveIssueCreated(Ideas.Shared.ServiceBus.Message msg, CancellationToken token, Func <IssueCreatedEventArgs, CancellationToken, Task> issueCreatedHandler)
        {
            // TODO: add logging and error handling
            var args = new IssueCreatedEventArgs();

            if (msg.MessageProperties.ContainsKey("Title"))
            {
                args.Title = msg.MessageProperties["Title"] as string;
            }
            if (msg.MessageProperties.ContainsKey("Description"))
            {
                args.Description = msg.MessageProperties["Description"] as string;
            }
            if (msg.MessageProperties.ContainsKey("RemedyStatus"))
            {
                args.RemedyStatus = msg.MessageProperties["RemedyStatus"] as string;
            }
            if (msg.MessageProperties.ContainsKey("ReferenceId"))
            {
                args.ReferenceId = msg.MessageProperties["ReferenceId"] as string;
            }
            if (msg.MessageProperties.ContainsKey("AssigneeEmail"))
            {
                args.AssigneeEmail = msg.MessageProperties["AssigneeEmail"] as string;
            }
            if (msg.MessageProperties.ContainsKey("AssigneeGroup"))
            {
                args.AssigneeGroup = msg.MessageProperties["AssigneeGroup"] as string;
            }
            if (msg.MessageProperties.ContainsKey("RequestorEmail"))
            {
                args.RequestorEmail = msg.MessageProperties["RequestorEmail"] as string;
            }
            if (msg.MessageProperties.ContainsKey("RequestorTelephone"))
            {
                args.RequestorTelephone = msg.MessageProperties["RequestorTelephone"] as string;
            }
            if (msg.MessageProperties.ContainsKey("RequestorGivenName"))
            {
                args.RequestorGivenName = msg.MessageProperties["RequestorGivenName"] as string;
            }
            if (msg.MessageProperties.ContainsKey("RequestorSurnName"))
            {
                args.RequestorSurnName = msg.MessageProperties["RequestorSurnName"] as string;
            }
            if (msg.MessageProperties.ContainsKey("RequestorDisplayName"))
            {
                args.RequestorDisplayName = msg.MessageProperties["RequestorDisplayName"] as string;
            }
            if (msg.MessageProperties.ContainsKey("Urgency"))
            {
                args.Urgency = msg.MessageProperties["Urgency"] as string;
            }
            var createdDate = await GetMessageProperty <DateTime>(msg, propertyName : nameof(IssueCreatedEventArgs.CreatedDate));

            args.CreatedDate = createdDate.Item;

            await issueCreatedHandler(args, token);
        }