diff --git a/subscribers/slack/worker/AppConfig.cs b/subscribers/slack/worker/AppConfig.cs index a7a9c892..59336778 100755 --- a/subscribers/slack/worker/AppConfig.cs +++ b/subscribers/slack/worker/AppConfig.cs @@ -12,6 +12,7 @@ public class AppConfig { public string SupplierSlackUrl { get; set; } public string BuyerSlackUrl { get; set; } public string UserSlackUrl { get; set; } + public string MailchimpSlackUrl { get; set; } public int WorkIntervalInSeconds { get; set; } = 60; public string SentryDsn { get; set; } } diff --git a/subscribers/slack/worker/Model/VcapServices.cs b/subscribers/slack/worker/Model/VcapServices.cs index c23552ae..0ed7800c 100644 --- a/subscribers/slack/worker/Model/VcapServices.cs +++ b/subscribers/slack/worker/Model/VcapServices.cs @@ -72,6 +72,9 @@ public partial class Credentials { [JsonProperty("USER_SLACK_URL")] public string UserSlackUrl { get; set; } + [JsonProperty("MAILCHIMP_SLACK_URL")] + public string MailchimpSlackUrl { get; set; } + [JsonProperty("WORK_INTERVAL_IN_SECONDS")] public int WorkIntervalInSeconds { get; set; } diff --git a/subscribers/slack/worker/Processors/MailChimpMessageProcessor.cs b/subscribers/slack/worker/Processors/MailChimpMessageProcessor.cs new file mode 100644 index 00000000..7fa6a2ee --- /dev/null +++ b/subscribers/slack/worker/Processors/MailChimpMessageProcessor.cs @@ -0,0 +1,41 @@ +using System; +using System.Threading.Tasks; +using Newtonsoft.Json; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Dta.Marketplace.Subscribers.Slack.Worker.Model; +using Dta.Marketplace.Subscribers.Slack.Worker.Services; + +namespace Dta.Marketplace.Subscribers.Slack.Worker.Processors { + internal class MailchimpMessageProcessor : AbstractMessageProcessor { + private readonly ISlackService _slackService; + + public MailchimpMessageProcessor(ILogger logger, IOptions config, ISlackService slackService) : base(logger, config) { + _slackService = slackService; + } + + public async override Task Process(AwsSnsMessage awsSnsMessage) { + switch (awsSnsMessage.MessageAttributes.EventType.Value) { + case "mailchimp": + var definition = new { + mailchimp = new { + message = "", + error = "" + } + }; + var message = JsonConvert.DeserializeAnonymousType(awsSnsMessage.Message, definition); + var slackMessage = +$@":email:*Mailchimp Error*:email: +Message: {message.mailchimp.message} +Error: {message.mailchimp.error}"; + + return await _slackService.SendSlackMessage(_config.Value.MailchimpSlackUrl, slackMessage); + + default: + _logger.LogDebug("Unknown processor for {@AwsSnsMessage}.", awsSnsMessage); + break; + } + return true; + } + } +} diff --git a/subscribers/slack/worker/Program.cs b/subscribers/slack/worker/Program.cs index 0efc8c27..2eaf8653 100755 --- a/subscribers/slack/worker/Program.cs +++ b/subscribers/slack/worker/Program.cs @@ -54,6 +54,7 @@ public static async Task Main(string[] args) { ac.BuyerSlackUrl = Environment.GetEnvironmentVariable("BUYER_SLACK_URL"); ac.SupplierSlackUrl = Environment.GetEnvironmentVariable("SUPPLIER_SLACK_URL"); ac.UserSlackUrl = Environment.GetEnvironmentVariable("USER_SLACK_URL"); + ac.MailchimpSlackUrl = Environment.GetEnvironmentVariable("MAILCHIMP_SLACK_URL"); var workIntervalInSeconds = Environment.GetEnvironmentVariable("WORK_INTERVAL_IN_SECONDS"); if (string.IsNullOrWhiteSpace(workIntervalInSeconds) == false) { ac.WorkIntervalInSeconds = int.Parse(workIntervalInSeconds); @@ -79,6 +80,7 @@ public static async Task Main(string[] args) { ac.BuyerSlackUrl = credentials.BuyerSlackUrl; ac.SupplierSlackUrl = credentials.SupplierSlackUrl; ac.UserSlackUrl = credentials.UserSlackUrl; + ac.MailchimpSlackUrl = credentials.MailchimpSlackUrl; if (credentials.WorkIntervalInSeconds != 0) { ac.WorkIntervalInSeconds = credentials.WorkIntervalInSeconds; } @@ -100,8 +102,9 @@ public static async Task Main(string[] args) { services.AddTransient(); services.AddTransient(); services.AddTransient(); - services.AddTransient(); + services.AddTransient(); + services.AddTransient(); services.AddTransient>(sp => key => { switch (key) { case "agency": @@ -112,6 +115,8 @@ public static async Task Main(string[] args) { return sp.GetService(); case "user": return sp.GetService(); + case "mailchimp": + return sp.GetService(); default: return null; }