Ejemplo n.º 1
0
        private async Task UpdateRefLinkState(IReferralLink refLink, ReferralLinkState state)
        {
            refLink.State = state.ToString();
            await _referralLinksService.UpdateAsync(refLink);

            await LogInfo(refLink, ControllerContext, $"RefLink state set to {state.ToString()}");
        }
Ejemplo n.º 2
0
 private async Task <IReferralLinkClaim> CreateNewRefLinkClaim(IReferralLink refLink, string recipientClientId, bool shouldReceiveReward, bool isNewClient)
 {
     return(await _referralLinkClaimsService.CreateAsync(new ReferralLinkClaim
     {
         IsNewClient = isNewClient,
         RecipientClientId = recipientClientId,
         ReferralLinkId = refLink.Id,
         ShouldReceiveReward = shouldReceiveReward
     }));
 }
Ejemplo n.º 3
0
        public async Task <IReferralLink> UpdateAsync(IReferralLink referralLink)
        {
            var result = await _referralLinkTable.MergeAsync(GetPartitionKey(), GetRowKey(referralLink.Id), x =>
            {
                Mapper.Map(referralLink, x);

                return(x);
            });

            return(Mapper.Map <ReferralLinkDto>(result));
        }
Ejemplo n.º 4
0
        public async Task <IReferralLink> Create(IReferralLink referralLink)
        {
            var entity = Mapper.Map <ReferralLinkEntity>(referralLink);

            entity.PartitionKey = GetPartitionKey();
            entity.RowKey       = GetRowKey(referralLink.Id);

            await _referralLinkTable.InsertAsync(entity);

            return(Mapper.Map <ReferralLinkDto>(entity));
        }
Ejemplo n.º 5
0
        private async void AttachSenderTransferToRefLink(IReferralLink refLink, string transferId)
        {
            var transfer = await _offchainTransferRepository.GetTransfer(transferId);

            refLink.Amount = (double)transfer.Amount;
            refLink.Asset  = (await _assets.GetItemAsync(transfer.AssetId)).Id;
            refLink.SenderOffchainTransferId = transferId;
            refLink.State = ReferralLinkState.SentToLykkeSharedWallet.ToString();

            await _referralLinksService.UpdateAsync(refLink);

            await LogInfo(new { RefLink = refLink, TransferId = transferId }, ControllerContext, $"Transfer complete for ref link id {refLink.Id} with amount {transfer.Amount} and asset Id {refLink.Asset}. Offchain transfer Id {transferId} attached with ref link. ");
        }
Ejemplo n.º 6
0
        private string ValidateClaimRefLinkAndRequest(IReferralLink refLink, ClaimReferralLinkRequest request, string refLinkId)
        {
            if (request.RecipientClientId == null)
            {
                return("RecipientClientId not found or not supplied");
            }
            if (refLinkId == null && request.ReferalLinkUrl == null)
            {
                return("ReferalLinkId and ReferalLinkUrl not supplied. Please specify either of them.");
            }

            if (refLink == null)
            {
                return("RefLink not found by id or url.");
            }

            if (refLink.SenderClientId == request.RecipientClientId)
            {
                return("RecipientClientId can't be the same as SenderClientId. Client cant claim their own ref link.");
            }

            if (Math.Abs(refLink.Amount) < MinimalAmount && refLink.Type == ReferralLinkType.GiftCoins.ToString())
            {
                return($"Requested amount for RefLink with id {refLink.Id} is 0 (not set). 0 amount gift links are not allowed.");
            }

            if (refLink.Type == ReferralLinkType.GiftCoins.ToString() && refLink.State != ReferralLinkState.SentToLykkeSharedWallet.ToString())
            {
                return($"RefLink type {refLink.Type} with state {refLink.State} can not be claimed.");
            }

            if (refLink.Type == ReferralLinkType.Invitation.ToString() && refLink.State != ReferralLinkState.Created.ToString())
            {
                return($"RefLink type {refLink.Type} with state {refLink.State} can not be claimed.");
            }

            if (refLink.ExpirationDate.HasValue && refLink.ExpirationDate.Value.CompareTo(DateTime.UtcNow) < 0)
            {
                return($"RefLink is expired at {refLink.ExpirationDate.Value} and can not be claimed.");
            }

            return(null);
        }
Ejemplo n.º 7
0
        public async Task <ExchangeOperationResult> TransferRewardCoins(IReferralLink refLink, bool isNewClient, string recipientClientId, string executionContext)
        {
            var request = new { RefLinkId = refLink.Id, RefLinkUrl = refLink.Url, RecipientClientId = recipientClientId, IsNewClient = isNewClient };

            try
            {
                var asset = (await _assets.GetDictionaryAsync()).Values.FirstOrDefault(v => v.Id == refLink.Asset);
                if (asset == null)
                {
                    var message = $"Asset with symbol id {refLink.Asset} not found";
                    await _log.WriteErrorAsync(executionContext, nameof(TransferRewardCoins), (new { Error = message }).ToJson(), new Exception(message));

                    return(new ExchangeOperationResult {
                        Message = message
                    });
                }

                var result = await _exchangeOperationsService.TransferAsync(
                    recipientClientId,
                    _settings.ReferralLinksService.LykkeReferralClientId,
                    refLink.Amount,
                    asset.Id,
                    TransferType.Common.ToString()
                    );

                if (!result.IsOk())
                {
                    string error;
                    if (result.Code.HasValue && Enum.IsDefined(typeof(MeStatusCodes), result.Code.Value))
                    {
                        error = $"Error: {((MeStatusCodes)result.Code.Value).ToString()}, Message: {result.Message}, TransactionId: {result.TransactionId}";
                    }
                    else
                    {
                        error = $"Error: {result.Code}, Message: {result.Message}, TransactionId: {result.TransactionId}";
                    }
                    await _log.WriteErrorAsync(executionContext, nameof(TransferRewardCoins), error, new Exception(error));

                    result.Message = error;
                    return(result);
                }
                await _log.WriteInfoAsync(executionContext, request.ToJson(), $"Transfer successfull: {result.ToJson()}");

                return(result);
            }
            catch (OffchainException ex)
            {
                await _log.WriteErrorAsync(executionContext, request.ToJson(), ex);

                throw new Exception($"ExchangeOperationsService error: Code={ex.OffchainExceptionCode}.OffchainException={ex.OffchainExceptionMessage}.Message={ex.Message}.{ex.InnerException?.Message}");
            }
            catch (ApplicationException ex)
            {
                await _log.WriteErrorAsync(executionContext, request.ToJson(), ex);

                throw new Exception($"ExchangeOperationsService error: {ex.Message}{ex.InnerException?.Message}");
            }
            catch (Exception ex)
            {
                await _log.WriteErrorAsync(executionContext, request.ToJson(), ex);

                throw new Exception($"ExchangeOperationsService error: {ex.Message}{ex.InnerException?.Message}");
            }
        }
 public async Task <IReferralLink> UpdateAsync(IReferralLink referralLink)
 {
     return(await _referralLinkRepository.UpdateAsync(referralLink));
 }
Ejemplo n.º 9
0
        private async Task <bool> ShoulReceiveReward(IEnumerable <IReferralLinkClaim> claims, IReferralLink refLink)
        {
            var  countOfNewClientClaims = claims.Count(c => c.IsNewClient && c.ShouldReceiveReward && c.RecipientClientId != refLink.SenderClientId);
            bool shouldReceiveReaward   = countOfNewClientClaims < _settings.InvitationLinkSettings.MaxNumOfClientsToReceiveReward;

            if (!shouldReceiveReaward)
            {
                await LogInfo(refLink, ControllerContext, "MaxNumOfClientsToReceiveReward reached. Recipient and sender wont get reward coins.");
            }

            return(shouldReceiveReaward);
        }