public Task <object> RequestGiftCoinsReferralLink(GiftCoinsReferralLinkRequest request)
 {
     throw new NotImplementedException("Reserved for version 2");
     //try
     //{
     //    return await _service.RequestGiftCoinsReferralLinkAsync(request);
     //}
     //catch (Exception ex)
     //{
     //    await _log.WriteErrorAsync(nameof(ReferralLinksClient), nameof(RequestGiftCoinsReferralLink), ex);
     //    throw;
     //}
 }
Exemplo n.º 2
0
        /// <summary>
        /// Request money transfer referral link - reserved for version 2
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        //[HttpPost("giftCoinLinks")] - for v2
        //[SwaggerOperation("RequestGiftCoinsReferralLink")]
        //[ProducesResponseType(typeof(ErrorResponseModel), (int)HttpStatusCode.BadRequest)]
        //[ProducesResponseType(typeof(ErrorResponseModel), (int)HttpStatusCode.NotFound)]
        //[ProducesResponseType(typeof(RequestRefLinkResponse), (int)HttpStatusCode.Created)]
        private async Task <IActionResult> RequestGiftCoinsReferralLink([FromBody] GiftCoinsReferralLinkRequest request)
        {
            if (request == null)
            {
                return(await LogAndReturnBadRequest("", ControllerContext, Phrases.InvalidRequest));
            }

            if (request.Amount <= 0)
            {
                return(await LogAndReturnBadRequest(request, ControllerContext, Phrases.InvalidAmount));
            }

            if (String.IsNullOrEmpty(request.SenderClientId))
            {
                return(await LogAndReturnBadRequest(request, ControllerContext, Phrases.InvalidSenderClientId));
            }

            var asset = (await _assets.GetDictionaryAsync()).Values.FirstOrDefault(v => v.Id == request.Asset);

            if (String.IsNullOrEmpty(request.Asset) || asset == null)
            {
                return(await LogAndReturnBadRequest(request, ControllerContext, Phrases.InvalidAsset));
            }

            var clientBalances = await _balancesClient.GetClientBalances(request.SenderClientId);

            if (clientBalances == null)
            {
                return(await LogAndReturnNotFound(request, ControllerContext, $"Cant get clientBalance of asset {asset.Name} for client id {request.SenderClientId}."));
            }

            var balance = clientBalances.FirstOrDefault(x => x.AssetId == asset.Id)?.Balance;

            if (!balance.HasValue || balance.Value < request.Amount)
            {
                return(await LogAndReturnBadRequest(request, ControllerContext, Phrases.InvalidTreesAmount));
            }

            var referralLink = await _referralLinksService.CreateGiftCoinsLink(request);

            await LogInfo(request, ControllerContext, referralLink.ToJson());

            return(Created(uri: $"api/referralLinks/{referralLink.Id}", value: new RequestRefLinkResponse {
                RefLinkId = referralLink.Id, RefLinkUrl = referralLink.Url
            }));
        }
        public async Task <IReferralLink> CreateGiftCoinsLink(GiftCoinsReferralLinkRequest referralLinkRequest)
        {
            var entity = new ReferralLink
            {
                Id             = Guid.NewGuid().ToString(),
                ExpirationDate = DateTime.UtcNow.AddDays(_settings.GiftCoinsLinkSettings.ExpirationDaysLimit)
            };

            entity.Url = await _firebaseService.GenerateUrl(entity.Id);

            entity.SenderClientId = referralLinkRequest.SenderClientId;
            entity.Asset          = referralLinkRequest.Asset;
            entity.Amount         = referralLinkRequest.Amount;
            entity.Type           = referralLinkRequest.Type.ToString();
            entity.State          = ReferralLinkState.Created.ToString();

            return(await _referralLinkRepository.Create(entity));
        }