Example #1
0
        public async Task <SetBaseAssetResponse> SetBaseAssetAsync(SetBaseAssetRequest request)
        {
            using var activity = MyTelemetry.StartActivity($"Set base asset request");
            request.AddToActivityAsJsonTag("request");
            request.ClientId.ClientId.AddToActivityAsTag("clientId");
            request.ClientId.BrokerId.AddToActivityAsTag("brokerId");
            request.WalletId.AddToActivityAsTag("WalletId");

            if (string.IsNullOrEmpty(request.ClientId?.ClientId) ||
                string.IsNullOrEmpty(request.ClientId?.BrokerId) ||
                string.IsNullOrEmpty(request.WalletId) ||
                string.IsNullOrWhiteSpace(request.BaseAsset))
            {
                var message = "Cannot set base asset. BadRequest.";
                _logger.LogError(message);
                return(new SetBaseAssetResponse()
                {
                    Success = false,
                    ErrorMessage = message
                });
            }
            await using var ctx = new DatabaseContext(_dbContextOptionsBuilder.Options);
            var walletEntity = ctx.ClientWallet.FirstOrDefault(e => e.WalletId == request.WalletId);

            if (walletEntity == null)
            {
                var message = $"Wallet not found. WalletId: {request.WalletId}";
                _logger.LogError(message);
                return(new SetBaseAssetResponse()
                {
                    Success = false,
                    ErrorMessage = message
                });
            }

            var oldWallet = (ClientWallet)walletEntity.Clone();

            walletEntity.BaseAsset = request.BaseAsset;
            await ctx.SaveChangesAsync();

            await UpdateCache(request.ClientId.ClientId, request.ClientId.BrokerId, new List <ClientWalletEntity> {
                walletEntity
            });

            await _publisher.PublishAsync(new ClientWalletUpdateMessage()
            {
                OldWallet = ClientWallet.Create(oldWallet),
                NewWallet = ClientWallet.Create(walletEntity)
            });

            return(new SetBaseAssetResponse()
            {
                Success = true
            });
        }
 public Task <SetBaseAssetResponse> SetBaseAssetAsync(SetBaseAssetRequest request)
 {
     return(_grpcService.SetBaseAssetAsync(request));
 }