private int CreateAlert(int tenant, string user, int mailboxId, AlertTypes type, object data = null)
        {
            using (var db = GetDb())
            {
                var jsonData = MailUtil.GetJsonString(data);

                var insertQuery = new SqlInsert(MailAlertsTable.name)
                                  .InColumnValue(MailAlertsTable.Columns.id_tenant, tenant)
                                  .InColumnValue(MailAlertsTable.Columns.id_user, user)
                                  .InColumnValue(MailAlertsTable.Columns.id_mailbox, mailboxId)
                                  .InColumnValue(MailAlertsTable.Columns.type, (int)type)
                                  .InColumnValue(MailAlertsTable.Columns.data, jsonData);

                return(db.ExecuteNonQuery(insertQuery));
            }
        }
        private int CreateAlerts(IDbManager db, int tenant, List <string> users, AlertTypes type, object data = null)
        {
            var result = 0;

            if (!users.Any())
            {
                return(result);
            }


            var jsonData = MailUtil.GetJsonString(data);

            CreateInsertDelegate createInsertQuery = ()
                                                     => new SqlInsert(MailAlertsTable.name)
                                                     .IgnoreExists(true)
                                                     .InColumns(MailAlertsTable.Columns.id_tenant,
                                                                MailAlertsTable.Columns.id_user,
                                                                MailAlertsTable.Columns.id_mailbox,
                                                                MailAlertsTable.Columns.type,
                                                                MailAlertsTable.Columns.data);

            var insertQuery = createInsertQuery();

            int i, usersLen;

            for (i = 0, usersLen = users.Count; i < usersLen; i++)
            {
                var user = users[i];

                insertQuery
                .Values(tenant, user, -1, (int)type, jsonData);

                if ((i % 100 != 0 || i == 0) && i + 1 != usersLen)
                {
                    continue;
                }

                result     += db.ExecuteNonQuery(insertQuery);
                insertQuery = createInsertQuery();
            }

            return(result);
        }
        private int CreateUniqueAlert(IDbManager db, int tenant, string user, int mailboxId, AlertTypes type, object data = null)
        {
            var alerts = FindAlerts(db, tenant, user, mailboxId, type);

            if (alerts.Any())
            {
                return(-1);
            }

            var jsonData = MailUtil.GetJsonString(data);

            var insertQuery = new SqlInsert(MailAlertsTable.name)
                              .InColumnValue(MailAlertsTable.Columns.id_tenant, tenant)
                              .InColumnValue(MailAlertsTable.Columns.id_user, user)
                              .InColumnValue(MailAlertsTable.Columns.id_mailbox, mailboxId)
                              .InColumnValue(MailAlertsTable.Columns.type, (int)type)
                              .InColumnValue(MailAlertsTable.Columns.data, jsonData);

            return(db.ExecuteNonQuery(insertQuery));
        }