protected Task DeleteModelAsync(string modelId, OutboxMessageModel message = null)
        {
            string deleteQuery = $"delete from {_tableName} where id = '{modelId}';";

            if (message != null)
            {
                string insertMessageQuery = ConstructInsertMessageQuery(message);
                deleteQuery += insertMessageQuery;
            }

            return(_connection.ExecuteAsync(deleteQuery));
        }
 public bool SendMessage(OutboxMessageModel outboxMessage)
 {
     return(SendMessage(outboxMessage.Topic, outboxMessage.Message, outboxMessage.Action));
 }
 protected string ConstructInsertMessageQuery(OutboxMessageModel message)
 {
     return($" insert into {_outboxTableName} (topic, message, action) " +
            $"values('{message.Topic}', '{message.Message}', '{message.Action}'); ");
 }
示例#4
0
        public async Task <TransactionBase> UpdateTransactionRecordAsync(string id, string data, string message, TransactionStates?state, OutboxMessageModel outboxMessage)
        {
            string AddStatement(string targetStatements, string addingStatement)
            {
                if (string.IsNullOrWhiteSpace(targetStatements))
                {
                    return(addingStatement);
                }

                return(targetStatements + ", " + addingStatement);
            }

            string statements = string.Empty;

            if (!string.IsNullOrWhiteSpace(data))
            {
                statements = AddStatement(statements, $" data = '{data}' ");
            }

            if (!string.IsNullOrWhiteSpace(message))
            {
                statements = AddStatement(statements, $" message = '{message}' ");
            }

            if (state.HasValue)
            {
                statements = AddStatement(statements, $" state = {(int)state.Value} ");
            }

            if (string.IsNullOrWhiteSpace(statements))
            {
                return(null);
            }


            string query = $"update {_tableName} set {statements} where id = '{id}' ; ";

            if (outboxMessage != null)
            {
                string messageQuery = ConstructInsertMessageQuery(outboxMessage);
                query += messageQuery;
            }

            int result = 0;

            try
            {
                result = await _connection.ExecuteAsync(query);
            }
            catch
            {
                Console.WriteLine(query);
                throw;
            }


            if (result <= 0)
            {
                throw new DatabaseException("Transaction updation failed");
            }

            return(await GetTransactionAsync(id));
        }
示例#5
0
        public async Task <TransactionBase> CreateTransactionRecordAsync(TransactionBase transactionRecord, OutboxMessageModel outboxMessage)
        {
            string query = $"insert into {_tableName} (id, objectid, type, data, message, state, createddate) " +
                           $" values ('{transactionRecord.Id}', '{transactionRecord.ObjectId}', '{transactionRecord.Type}', '{transactionRecord.Data}', '{transactionRecord.Message}', {(int)transactionRecord.State}, '{transactionRecord.CreatedDate}'); ";

            if (outboxMessage != null)
            {
                string messageQuery = ConstructInsertMessageQuery(outboxMessage);
                query += messageQuery;
            }

            var result = await _connection.ExecuteAsync(query);

            if (result <= 0)
            {
                throw new DatabaseException("Transaction insertion failed");
            }

            return(await GetTransactionAsync(transactionRecord.Id));
        }
示例#6
0
        public async Task <TransactionBase> CreateOrUpdateTransactionAsync(TransactionBase transactionRecord, OutboxMessageModel outboxMessage)
        {
            var existingTransaction = await GetTransactionAsync(transactionRecord.Id);

            if (existingTransaction == null)
            {
                return(await CreateTransactionRecordAsync(transactionRecord, outboxMessage));
            }

            return(await UpdateTransactionRecordAsync(transactionRecord.Id, transactionRecord.Data, transactionRecord.Message,
                                                      transactionRecord.State, outboxMessage));
        }