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()}"); }
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 })); }
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)); }
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)); }
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. "); }
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); }
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)); }
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); }