public async Task <PagedResultResponse <AmountByDate[]> > PageMinerEarningsByDayV2Async( string poolId, string address, [FromQuery] int page, [FromQuery] int pageSize = 15) { var pool = GetPool(poolId); if (string.IsNullOrEmpty(address)) { throw new ApiException("Invalid or missing miner address", HttpStatusCode.NotFound); } if (pool.Template.Family == CoinFamily.Ethereum) { address = address.ToLower(); } uint pageCount = (uint)Math.Floor((await cf.Run(con => paymentsRepo.GetMinerPaymentsByDayCountAsync(con, poolId, address))) / (double)pageSize); var earnings = (await cf.Run(con => paymentsRepo.PageMinerPaymentsByDayAsync( con, pool.Id, address, page, pageSize))) .ToArray(); var response = new PagedResultResponse <AmountByDate[]>(earnings, pageCount); return(response); }
public async Task <PagedResultResponse <Responses.BalanceChange[]> > PageMinerBalanceChangesV2Async( string poolId, string address, [FromQuery] int page, [FromQuery] int pageSize = 15) { var pool = GetPool(poolId); if (string.IsNullOrEmpty(address)) { throw new ApiException("Invalid or missing miner address", HttpStatusCode.NotFound); } if (pool.Template.Family == CoinFamily.Ethereum) { address = address.ToLower(); } uint pageCount = (uint)Math.Floor((await cf.Run(con => paymentsRepo.GetBalanceChangesCountAsync(con, poolId, address))) / (double)pageSize); var balanceChanges = (await cf.Run(con => paymentsRepo.PageBalanceChangesAsync( con, pool.Id, address, page, pageSize))) .Select(mapper.Map <Responses.BalanceChange>) .ToArray(); var response = new PagedResultResponse <Responses.BalanceChange[]>(balanceChanges, pageCount); return(response); }
public async Task <PagedResultResponse <Responses.Payment[]> > PagePoolPaymentsV2Async( string poolId, [FromQuery] int page, [FromQuery] int pageSize = 15) { var pool = GetPool(poolId); uint pageCount = (uint)Math.Floor((await cf.Run(con => paymentsRepo.GetPaymentsCountAsync(con, poolId))) / (double)pageSize); var payments = (await cf.Run(con => paymentsRepo.PagePaymentsAsync( con, pool.Id, null, page, pageSize))) .Select(mapper.Map <Responses.Payment>) .ToArray(); // enrich payments var txInfobaseUrl = pool.Template.ExplorerTxLink; var addressInfobaseUrl = pool.Template.ExplorerAccountLink; foreach (var payment in payments) { // compute transaction infoLink if (!string.IsNullOrEmpty(txInfobaseUrl)) { payment.TransactionInfoLink = string.Format(txInfobaseUrl, payment.TransactionConfirmationData); } // pool wallet link if (!string.IsNullOrEmpty(addressInfobaseUrl)) { payment.AddressInfoLink = string.Format(addressInfobaseUrl, payment.Address); } } var response = new PagedResultResponse <Responses.Payment[]>(payments, pageCount); return(response); }
public async Task <PagedResultResponse <Responses.Payment[]> > PageMinerPaymentsV2Async( string poolId, string address, [FromQuery] int page, [FromQuery] int pageSize = 15) { var pool = GetPool(poolId); if (string.IsNullOrEmpty(address)) { throw new ApiException("Invalid or missing miner address", HttpStatusCode.NotFound); } if (pool.Template.Family == CoinFamily.Ethereum) { address = address.ToLower(); } uint pageCount = (uint)Math.Floor((await cf.Run(con => paymentsRepo.GetPaymentsCountAsync(con, poolId, address))) / (double)pageSize); var payments = (await cf.Run(con => paymentsRepo.PagePaymentsAsync( con, pool.Id, address, page, pageSize))) .Select(mapper.Map <Responses.Payment>) .ToArray(); // enrich payments var txInfobaseUrl = pool.Template.ExplorerTxLink; var addressInfobaseUrl = pool.Template.ExplorerAccountLink; foreach (var payment in payments) { // compute transaction infoLink if (!string.IsNullOrEmpty(txInfobaseUrl)) { payment.TransactionInfoLink = string.Format(txInfobaseUrl, payment.TransactionConfirmationData); } // pool wallet link if (!string.IsNullOrEmpty(addressInfobaseUrl)) { payment.AddressInfoLink = string.Format(addressInfobaseUrl, payment.Address); } } var response = new PagedResultResponse <Responses.Payment[]>(payments, pageCount); return(response); }
public async Task <PagedResultResponse <Responses.Block[]> > PagePoolBlocksV2Async( string poolId, [FromQuery] int page, [FromQuery] int pageSize = 15, [FromQuery] BlockStatus[] state = null) { var pool = GetPool(poolId); var blockStates = state != null && state.Length > 0 ? state : new[] { BlockStatus.Confirmed, BlockStatus.Pending, BlockStatus.Orphaned }; uint pageCount = (uint)Math.Floor((await cf.Run(con => blocksRepo.GetPoolBlockCountAsync(con, poolId))) / (double)pageSize); var blocks = (await cf.Run(con => blocksRepo.PageBlocksAsync(con, pool.Id, blockStates, page, pageSize))) .Select(mapper.Map <Responses.Block>) .ToArray(); // enrich blocks var blockInfobaseDict = pool.Template.ExplorerBlockLinks; foreach (var block in blocks) { // compute infoLink if (blockInfobaseDict != null) { blockInfobaseDict.TryGetValue(!string.IsNullOrEmpty(block.Type) ? block.Type : "block", out var blockInfobaseUrl); if (!string.IsNullOrEmpty(blockInfobaseUrl)) { if (blockInfobaseUrl.Contains(CoinMetaData.BlockHeightPH)) { block.InfoLink = blockInfobaseUrl.Replace(CoinMetaData.BlockHeightPH, block.BlockHeight.ToString(CultureInfo.InvariantCulture)); } else if (blockInfobaseUrl.Contains(CoinMetaData.BlockHashPH) && !string.IsNullOrEmpty(block.Hash)) { block.InfoLink = blockInfobaseUrl.Replace(CoinMetaData.BlockHashPH, block.Hash); } } } } var response = new PagedResultResponse <Responses.Block[]>(blocks, pageCount); return(response); }