Beispiel #1
0
        private async Task ValidateTradingCondition(TradingConditionContract tradingCondition)
        {
            if (tradingCondition == null)
            {
                throw new ArgumentNullException("tradingCondition", "Model is incorrect");
            }

            if (string.IsNullOrWhiteSpace(tradingCondition?.Id))
            {
                throw new ArgumentNullException(nameof(tradingCondition.Id), "TradingCondition Id must be set");
            }

            if (!string.IsNullOrEmpty(tradingCondition.LimitCurrency) &&
                await _assetsRepository.GetAsync(tradingCondition.LimitCurrency) == null)
            {
                throw new InvalidOperationException($"LimitCurrency asset {tradingCondition.LimitCurrency} does not exist");
            }

            foreach (var baseAsset in tradingCondition.BaseAssets)
            {//TODO optimization may be applied here
                if (await _assetsRepository.GetAsync(baseAsset) == null)
                {
                    throw new InvalidOperationException($"Base asset {baseAsset} does not exist");
                }
            }
        }
Beispiel #2
0
        public async Task <TradingConditionContract> Insert([FromBody] TradingConditionContract tradingCondition)
        {
            await ValidateTradingCondition(tradingCondition);

            var defaultTradingCondition =
                (await _tradingConditionsRepository.GetDefaultAsync()).FirstOrDefault();

            if (tradingCondition.IsDefault &&
                defaultTradingCondition != null && defaultTradingCondition.Id != tradingCondition.Id)
            {
                await SetDefault(defaultTradingCondition, false);
            }

            if (defaultTradingCondition == null)
            {
                tradingCondition.IsDefault = true;
            }

            _defaultLegalEntitySettings.Set(tradingCondition);

            if (!await _tradingConditionsRepository.TryInsertAsync(
                    _convertService.Convert <TradingConditionContract, TradingCondition>(tradingCondition)))
            {
                throw new ArgumentException($"Trading condition with id {tradingCondition.Id} already exists",
                                            nameof(tradingCondition.Id));
            }

            await _eventSender.SendSettingsChangedEvent($"{Request.Path}",
                                                        SettingsChangedSourceType.TradingCondition, tradingCondition.Id);

            return(tradingCondition);
        }
Beispiel #3
0
 private void ValidateId(string id, TradingConditionContract contract)
 {
     if (contract?.Id != id)
     {
         throw new ArgumentException("Id must match with contract id");
     }
 }
 public static void Set(this DefaultLegalEntitySettings defaults, TradingConditionContract contract)
 {
     if (string.IsNullOrWhiteSpace(contract.LegalEntity))
     {
         contract.LegalEntity = defaults.DefaultLegalEntity;
     }
 }
Beispiel #5
0
        private static async Task CheckTradingConditionsApiWorking(IHttpClientGenerator clientGenerator)
        {
            var tradingCondition = new TradingConditionContract
            {
                Id              = "t1",
                Name            = "1",
                LegalEntity     = "1",
                MarginCall1     = 1,
                MarginCall2     = 1,
                StopOut         = 1,
                DepositLimit    = 1,
                WithdrawalLimit = 1,
                LimitCurrency   = "1",
                BaseAssets      = new List <string>()
                {
                    "1"
                },
            };

            var tradingConditionApiClient = clientGenerator.Generate <ITradingConditionsApi>();
            await tradingConditionApiClient.List().Dump();

            if (await tradingConditionApiClient.Get("t1") == null)
            {
                await tradingConditionApiClient.Insert(tradingCondition).Dump();
            }
            await tradingConditionApiClient.Get("t1").Dump();

            tradingCondition.Name = "11111";
            await tradingConditionApiClient.Update("t1", tradingCondition).Dump();
        }
Beispiel #6
0
        public async Task <TradingConditionContract> Update(string tradingConditionId,
                                                            [FromBody] TradingConditionContract tradingCondition)
        {
            await ValidateTradingCondition(tradingCondition);

            ValidateId(tradingConditionId, tradingCondition);

            var defaultTradingCondition =
                (await _tradingConditionsRepository.GetDefaultAsync()).FirstOrDefault();

            if (defaultTradingCondition == null && !tradingCondition.IsDefault)
            {
                tradingCondition.IsDefault = true;
            }

            if (defaultTradingCondition != null &&
                tradingCondition.IsDefault && defaultTradingCondition.Id != tradingCondition.Id)
            {
                await SetDefault(defaultTradingCondition, false);
            }

            _defaultLegalEntitySettings.Set(tradingCondition);

            var existingCondition = await _tradingConditionsRepository.GetAsync(tradingCondition.Id);

            if (existingCondition == null)
            {
                throw new Exception($"Trading condition with Id = {tradingCondition.Id} not found");
            }

            if (existingCondition.LegalEntity != tradingCondition.LegalEntity)
            {
                throw new Exception("LegalEntity cannot be changed");
            }

            await _tradingConditionsRepository.UpdateAsync(
                _convertService.Convert <TradingConditionContract, TradingCondition>(tradingCondition));

            await _eventSender.SendSettingsChangedEvent($"{Request.Path}",
                                                        SettingsChangedSourceType.TradingCondition, tradingConditionId);

            return(tradingCondition);
        }
Beispiel #7
0
        public static ITradingConditionsApi GetPopulatedTradingConditions()
        {
            var defaultTc = new TradingConditionContract
            {
                Id         = TradingConditionId,
                IsDefault  = true,
                Name       = "Default trading condition",
                BaseAssets = new List <string> {
                    "USD", "EUR", "CHF"
                },
                MarginCall1 = 1.25M,
                MarginCall2 = 1.11M,
                StopOut     = 1M
            };

            var mock = new Mock <ITradingConditionsApi>();

            mock.Setup(s => s.List(It.IsAny <bool?>())).ReturnsAsync(new List <TradingConditionContract> {
                defaultTc
            });

            return(mock.Object);
        }