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);
        }
Exemple #5
0
 public async Task Process(PaidFeeQueueItem item)
 {
     await _paidFeeProcessor.Process(item);
 }