public static OperationToHashMatchEntity Create(IOperationToHashMatch match)
 {
     return(new OperationToHashMatchEntity
     {
         PartitionKey = GetPartitionKey(),
         OperationId = match.OperationId,
         TransactionHash = match.TransactionHash
     });
 }
        public async Task <IPendingOperation> GetOperationByHashAsync(string hash)
        {
            IOperationToHashMatch match = await _operationToHashMatchRepository.GetByHashAsync(hash);

            if (match == null)
            {
                return(null);
            }

            IPendingOperation operation = await _pendingOperationRepository.GetOperation(match.OperationId);

            return(operation);
        }
        public async Task MatchHashToOpId(string transactionHash, string operationId)
        {
            IOperationToHashMatch match = await _operationToHashMatchRepository.GetAsync(operationId);

            if (match == null)
            {
                //await _operationToHashMatchRepository.InsertOrReplaceHistoricalAsync(match);
                return;
            }

            match.TransactionHash = transactionHash;
            await _operationToHashMatchRepository.InsertOrReplaceAsync(match);
        }
        public async Task RefreshOperationByIdAsync(string operationId)
        {
            IOperationToHashMatch match = await _operationToHashMatchRepository.GetAsync(operationId);

            if (match == null)
            {
                return;
            }

            match.TransactionHash = "";

            await _operationToHashMatchRepository.InsertOrReplaceAsync(match);

            await _queue.PutRawMessageAsync(JsonConvert.SerializeObject(new OperationHashMatchMessage()
            {
                OperationId = match.OperationId
            }));
        }
        public async Task InsertOrReplaceAsync(IOperationToHashMatch match)
        {
            var entity        = OperationToHashMatchEntity.Create(match);
            var historyEntity = OperationToHashMatchHistoryEntity.Create(match);

            if (match.TransactionHash != null)
            {
                var entityReverse = HashToOperationMatchEntity.Create(match);
                await _tableReverse.InsertOrReplaceAsync(entityReverse);
            }
            else
            {
                await _tableReverse.DeleteIfExistAsync(HashToOperationMatchEntity.GetPartitionKey(), match.TransactionHash);
            }

            await _table.InsertOrReplaceAsync(entity);

            await _tableHistory.InsertOrReplaceAsync(historyEntity);
        }
        public async Task RefreshOperationAsync(string trHash)
        {
            IOperationToHashMatch match = await _operationToHashMatchRepository.GetByHashAsync(trHash);

            if (match == null)
            {
                return;
            }

            IPendingOperation operation = await _pendingOperationRepository.GetOperation(match.OperationId);

            match.TransactionHash = "";

            await _operationToHashMatchRepository.InsertOrReplaceAsync(match);

            await _queue.PutRawMessageAsync(JsonConvert.SerializeObject(new OperationHashMatchMessage()
            {
                OperationId = match.OperationId
            }));
        }
        public async Task InsertOrReplaceHistoricalAsync(IOperationToHashMatch match)
        {
            var historyEntity = OperationToHashMatchHistoryEntity.Create(match);

            await _tableHistory.InsertOrReplaceAsync(historyEntity);
        }