public NotifyMessageEngine(NotifyMessageType notifyMessageType, INotifyMessageSender notifyMessageSender, IDatabase database, string notifyMessageTableName)
 {
     this.notifyMessageType      = notifyMessageType;
     this.notifyMessageSender    = notifyMessageSender;
     this.database               = database;
     this.notifyMessageTableName = notifyMessageTableName;
 }
        public NotifyManager(IDatabase database, INotifyMessageSender emailNotifyMessageSender = null, INotifyMessageSender phoneTextNotifyMessageSender = null, string notifyMessageTableName = "notify_message", string notifyVerifyTableName = "notify_verify", int verifyCodeExpiresSeconds = 3600, string verifyEmailFile = null, string verifyPhoneTextFile = null, string verifyCodeFormat = "###-###")
        {
            this.database = database;
            this.emailNotifyMessageEngine     = emailNotifyMessageSender == null ? null : new NotifyMessageEngine(NotifyMessageType.Email, emailNotifyMessageSender, database, notifyMessageTableName);
            this.phoneTextNotifyMessageEngine = phoneTextNotifyMessageSender == null ? null : new NotifyMessageEngine(NotifyMessageType.PhoneText, phoneTextNotifyMessageSender, database, notifyMessageTableName);
            this.notifyMessageTableName       = notifyMessageTableName;
            this.notifyVerifyTableName        = notifyVerifyTableName;
            this.verifyCodeExpiresSeconds     = verifyCodeExpiresSeconds;

            this.verifyEmailNotifyMessage = verifyEmailFile != null?NotifyMessage.ParseFile(verifyEmailFile) : null;

            this.verifyPhoneTextNotifyMessage = verifyPhoneTextFile != null?NotifyMessage.ParseFile(verifyPhoneTextFile) : null;

            this.verifyCodeFormat = verifyCodeFormat;
        }
        public static async Task SendPhoneNotifyMessage(INotifyMessageSender notifyMessageSender)
        {
            IDatabase database = new Butterfly.Core.Database.Memory.MemoryDatabase();
            await database.CreateFromResourceFileAsync(Assembly.GetExecutingAssembly(), "Butterfly.Notify.Test.db.sql");

            database.SetDefaultValue("id", tableName => Guid.NewGuid().ToString());
            database.SetDefaultValue("created_at", tableName => DateTime.Now);

            var notifyMessageManager = new NotifyManager(database, phoneNotifyMessageSender: notifyMessageSender);

            notifyMessageManager.Start();
            var notifyMessage = new NotifyMessage("+1 316 712 7412", "+1 316 555 1212", null, "Just testing", null);

            using (ITransaction transaction = await database.BeginTransactionAsync()) {
                await notifyMessageManager.Queue(transaction, notifyMessage);
            }
            await Task.Delay(200000);
        }
        public static async Task SendEmailNotifyMessage(INotifyMessageSender notifyMessageSender)
        {
            IDatabase database = new Butterfly.Core.Database.Memory.MemoryDatabase();
            await database.CreateFromResourceFileAsync(Assembly.GetExecutingAssembly(), "Butterfly.Notify.Test.db.sql");

            database.SetDefaultValue("id", tableName => Guid.NewGuid().ToString());
            database.SetDefaultValue("created_at", tableName => DateTime.Now);

            var notifyMessageManager = new NotifyManager(database, emailNotifyMessageSender: notifyMessageSender);

            notifyMessageManager.Start();
            var notifyMessage = new NotifyMessage("*****@*****.**", "*****@*****.**", "Test SES", "Just testing", null);

            using (ITransaction transaction = await database.BeginTransactionAsync()) {
                await notifyMessageManager.Queue(transaction, notifyMessage);

                await transaction.CommitAsync();
            }
            await Task.Delay(200000);
        }