예제 #1
0
        public async Task <int> UpdateDepositBaseTransactionHistory()
        {
            var count = 0;

            try
            {
                var depositBase = _balanceService.GetDepositBaseAddress();
                var context     = new TransactionContext
                {
                    Cursor = await _keyValueStoreRepository.GetAsync(GetPagingTokenKey)
                };

                do
                {
                    count += await QueryAndProcessTransactions(depositBase, context, SaveTransactionHistory);

                    if (!string.IsNullOrEmpty(context.Cursor))
                    {
                        await _keyValueStoreRepository.SetAsync(GetPagingTokenKey, context.Cursor);
                    }
                }while (!string.IsNullOrEmpty(context.Cursor));

                _lastJobError = null;
            }
            catch (Exception ex)
            {
                _lastJobError = $"Error in job {nameof(TransactionHistoryService)}.{nameof(UpdateDepositBaseTransactionHistory)}: {ex.Message}";
                throw new JobExecutionException("Failed to execute deposit base transaction history update", ex, count);
            }

            return(count);
        }
        public async Task <IActionResult> AddObservation([Required] string address)
        {
            if (!_balanceService.IsAddressValid(address, out var hasExtension))
            {
                return(BadRequest(ErrorResponse.Create("Invalid parameter").AddModelError("address", "Address must be valid")));
            }
            if (!_balanceService.IsDepositBaseAddress(address))
            {
                return(BadRequest(ErrorResponse.Create("Invalid parameter").AddModelError("address", $"Address must match configured deposit base address. expected={_balanceService.GetDepositBaseAddress()}")));
            }
            if (!hasExtension)
            {
                return(BadRequest(ErrorResponse.Create("Invalid parameter").AddModelError("address", "Address must have public address extension")));
            }
            var exists = await _balanceService.IsBalanceObservedAsync(address);

            if (exists)
            {
                return(new StatusCodeResult(StatusCodes.Status409Conflict));
            }
            await _balanceService.AddBalanceObservationAsync(address);

            return(Ok());
        }