public async Task Process(PaidFeeQueueItem item) { var paidFeeId = item.Id.ToString(); await _paidFeeRepository.Create(paidFeeId, item.AssetId, item.FromClient, item.ToClient, item.Volume, item.Order, item.TradeClient, item.TradeOppositeClient, item.TradeVolume); // do not process disabled assets if (_memoryCache.Get <IDisabledAsset>(Constants.GetCacheDisabledAssetKey(item.AssetId)) != null) { return; } var clientAffiliate = GetAffiliate(await GetClientId(item.TradeClient)); var oppositeClientAffiliate = GetAffiliate(await GetClientId(item.TradeOppositeClient)); var clientHasAffiliate = !string.IsNullOrWhiteSpace(clientAffiliate); var oppositeClientHasAffiliate = !string.IsNullOrWhiteSpace(oppositeClientAffiliate); if (clientHasAffiliate && oppositeClientHasAffiliate) { await AddBothFeeBonus(clientAffiliate, oppositeClientAffiliate, paidFeeId, item); } else if (clientHasAffiliate) { await AddOneFeeBonus(clientAffiliate, paidFeeId, item); } else if (oppositeClientHasAffiliate) { await AddOneFeeBonus(oppositeClientAffiliate, paidFeeId, item); } }
public async Task AddPaidFee(Guid id, string asset, string fromClient, string toClient, decimal volume, DateTime date, string order, string tradeClient, string tradeOppositeClient, decimal tradeVolume) { var msg = new PaidFeeQueueItem { AssetId = asset, Date = date, FromClient = fromClient, Id = id, Order = order, ToClient = toClient, Volume = volume, TradeClient = tradeClient, TradeOppositeClient = tradeOppositeClient, TradeVolume = tradeVolume }; await _queue.PutRawMessageAsync(msg.ToJson()); }
private async Task AddBothFeeBonus(string firstAffiliateId, string secondAffiliateId, string paidFeeId, PaidFeeQueueItem item) { var bonus = item.Volume * BothAffiliateShare; await Task.WhenAll( _bonusAccrualRepository.Create(paidFeeId, firstAffiliateId, item.AssetId, item.TradeVolume, bonus), _bonusAccrualRepository.Create(paidFeeId, secondAffiliateId, item.AssetId, item.TradeVolume, bonus) ); }
private async Task AddOneFeeBonus(string affiliateId, string paidFeeId, PaidFeeQueueItem item) { var bonus = item.Volume * OneAffiliateShare; await _bonusAccrualRepository.Create(paidFeeId, affiliateId, item.AssetId, item.TradeVolume, bonus); }
public async Task Process(PaidFeeQueueItem item) { await _paidFeeProcessor.Process(item); }