Ejemplo n.º 1
0
        public override async Task <AssetsDictionaryResponse> AssetsDictionary(Empty request, ServerCallContext context)
        {
            var result = new AssetsDictionaryResponse();

            var categories = await _assetsService.AssetCategoryGetAllAsync();

            string clientId  = context.GetClientId();
            string partnerId = context.GetParnerId();

            var assets = await _assetsHelper.GetAssetsAvailableToClientAsync(clientId, partnerId, true);

            result.Body = new AssetsDictionaryResponse.Types.Body();

            result.Body.Categories.AddRange(_mapper.Map <List <AssetCategory> >(categories));
            result.Body.Assets.AddRange(_mapper.Map <List <Asset> >(assets));

            var popularAssetPairs = await _assetsHelper.GetPopularPairsAsync(assets.Select(x => x.Id).ToList());

            foreach (var asset in result.Body.Assets)
            {
                if (popularAssetPairs.ContainsKey(asset.Id))
                {
                    asset.PopularPairs.AddRange(popularAssetPairs[asset.Id]);
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        public override async Task <BalancesResponse> GetBalances(Empty request, ServerCallContext context)
        {
            var clientId = context.GetClientId();
            var balances = await _balancesClient.GetClientBalances(clientId);

            var res = new BalancesResponse {
                Body = new BalancesResponse.Types.Body()
            };

            res.Body.Balances.AddRange(_mapper.Map <List <Balance> >(balances));

            return(res);
        }
Ejemplo n.º 3
0
        public override async Task <EmptyResponse> RegisterPushNotifications(RegisterPushRequest request, ServerCallContext context)
        {
            var result = new EmptyResponse();

            var clientId = context.GetClientId();

            var clientInfo = await _clientAccountClient.ClientAccountInformation.GetByIdAsync(clientId);

            var sessionId = context.GetLykkeSessionId();

            await _pushNotificationsClient.FcmTokens.RegisterAsync(new FcmTokenModel
            {
                NotificationId = clientInfo.NotificationsId,
                ClientId       = clientId,
                SessionId      = sessionId,
                FcmToken       = request.FcmToken
            });

            return(result);
        }
Ejemplo n.º 4
0
        public override async Task <FundsResponse> GetFunds(FundsRequest request, ServerCallContext context)
        {
            var result = new FundsResponse();

            var token   = context.GetBearerToken();
            var wallets = await _clientAccountClient.Wallets.GetClientWalletsFilteredAsync(context.GetClientId(), WalletType.Trading);

            var walletId = wallets.FirstOrDefault()?.Id;

            var response = await _walletApiV2Client.GetFundsByWalletIdAsync(
                walletId, null, request.AssetId, request.Take, request.Skip,
                request.OptionalFromDateCase == FundsRequest.OptionalFromDateOneofCase.None?(DateTimeOffset?)null : request.From.ToDateTimeOffset(),
                request.OptionalToDateCase == FundsRequest.OptionalToDateOneofCase.None?(DateTimeOffset?)null : request.To.ToDateTimeOffset(),
                token);

            if (response != null)
            {
                result.Body = new FundsResponse.Types.Body();
                result.Body.Funds.AddRange(_mapper.Map <List <FundsResponse.Types.FundsModel> >(response));
            }

            return(result);
        }
Ejemplo n.º 5
0
        public override async Task <AssetTradesResponse> GetAssetTrades(AssetTradesRequest request, ServerCallContext context)
        {
            var result = new AssetTradesResponse();

            var token   = context.GetBearerToken();
            var wallets = await _clientAccountClient.Wallets.GetClientWalletsFilteredAsync(context.GetClientId(), WalletType.Trading);

            var walletId = wallets.FirstOrDefault()?.Id;

            var response = await _walletApiV2Client.GetByWalletIdAsync(
                walletId, new List <string> {
            }, request.AssetId, null, request.Take, request.Skip,
                token);

            var assetPairs = await _assetsService.AssetPairGetAllAsync();

            if (response != null)
            {
                foreach (var group in response.GroupBy(x => x.Id))
                {
                    var pair = group.ToList();

                    if (pair.Count == 0 || pair.Count != 2)
                    {
                        continue;
                    }

                    string assetPairId = pair[0].AssetPair;

                    var assetPair = assetPairs.FirstOrDefault(x => x.Id == assetPairId);

                    if (assetPair == null)
                    {
                        continue;
                    }

                    var assetTrade = new AssetTradesResponse.Types.AssetTradeModel
                    {
                        Id           = pair[0].Id,
                        AssetPairId  = assetPairId,
                        BaseAssetId  = assetPair.BaseAssetId,
                        QuoteAssetId = assetPair.QuotingAssetId,
                        Price        = pair[0].Price?.ToString() ?? string.Empty,
                        Timestamp    = Timestamp.FromDateTime(pair[0].DateTime.UtcDateTime)
                    };

                    foreach (var item in pair)
                    {
                        if (item.Asset == assetPair.BaseAssetId)
                        {
                            assetTrade.BaseVolume = item.Amount.ToString(CultureInfo.InvariantCulture);
                        }
                        else
                        {
                            assetTrade.QuoteVolume = item.Amount.ToString(CultureInfo.InvariantCulture);
                        }
                    }

                    result.Body = new AssetTradesResponse.Types.Body();
                    result.Body.Trades.Add(assetTrade);
                }
            }

            return(result);
        }
Ejemplo n.º 6
0
        public override async Task <CancelOrderResponse> CancelAllOrders(CancelOrdersRequest request, ServerCallContext context)
        {
            MeResponseModel response;

            if (!string.IsNullOrEmpty(request.AssetPairId))
            {
                var result = await _validationService.ValidateAssetPairAsync(request.AssetPairId);

                if (result != null)
                {
                    var res = new CancelOrderResponse
                    {
                        Error = new ErrorResponseBody {
                            Code = ErrorCode.InvalidField, Message = result.Message
                        }
                    };

                    res.Error.Fields.Add(result.FieldName, result.Message);
                }

                bool?isBuy;

                if (request.OptionalSideCase == CancelOrdersRequest.OptionalSideOneofCase.None)
                {
                    isBuy = null;
                }
                else
                {
                    switch (request.Side)
                    {
                    case Side.Buy:
                        isBuy = true;
                        break;

                    case Side.Sell:
                        isBuy = false;
                        break;

                    default:
                        isBuy = null;
                        break;
                    }
                }

                var model = new LimitOrderMassCancelModel
                {
                    Id          = Guid.NewGuid().ToString(),
                    AssetPairId = request.AssetPairId,
                    ClientId    = context.GetClientId(),
                    IsBuy       = isBuy
                };

                response = await _matchingEngineClient.MassCancelLimitOrdersAsync(model);
            }
            else
            {
                var orders = await GetOrders(new LimitOrdersRequest(), context);

                if (orders.Body?.Orders.Any() ?? false)
                {
                    var orderIds = orders.Body.Orders.Select(x => x.Id).ToList();
                    response = await _matchingEngineClient.CancelLimitOrdersAsync(orderIds);
                }
                else
                {
                    response = new MeResponseModel {
                        Status = MeStatusCodes.Ok
                    };
                }
            }

            if (response == null)
            {
                return(new CancelOrderResponse
                {
                    Error = new ErrorResponseBody {
                        Code = ErrorCode.Runtime, Message = ErrorMessages.MeNotAvailable
                    }
                });
            }

            if (response.Status == MeStatusCodes.Ok)
            {
                return new CancelOrderResponse
                       {
                           Body = new CancelOrderResponse.Types.Body
                           {
                               Payload = true
                           }
                       }
            }
            ;

            return(new CancelOrderResponse
            {
                Error = new ErrorResponseBody {
                    Code = ErrorCode.Runtime, Message = response.Message ?? response.Status.ToString()
                }
            });
        }