예제 #1
0
 private void ValidateId(string id, ScheduleSettingsContract contract)
 {
     if (contract?.Id != id)
     {
         throw new ArgumentException("Id must match with contract id");
     }
 }
예제 #2
0
 private static ScheduleSettings Convert(ScheduleSettingsContract shedule)
 {
     return(new ScheduleSettings(
                dayOffStartDay: shedule.DayOffStartDay,
                dayOffStartTime: shedule.DayOffStartTime,
                dayOffEndDay: shedule.DayOffEndDay,
                dayOffEndTime: shedule.DayOffEndTime,
                assetPairsWithoutDayOff: shedule.AssetPairsWithoutDayOff,
                pendingOrdersCutOff: shedule.PendingOrdersCutOff));
 }
예제 #3
0
 public static ScheduleSettingsContract CloneWithRank(this ScheduleSettingsContract schedule, int rank)
 => new ScheduleSettingsContract
 {
     Id                  = schedule.Id,
     Rank                = rank,
     AssetPairRegex      = schedule.AssetPairRegex,
     AssetPairs          = schedule.AssetPairs,
     MarketId            = schedule.MarketId,
     IsTradeEnabled      = schedule.IsTradeEnabled,
     PendingOrdersCutOff = schedule.PendingOrdersCutOff,
     Start               = schedule.Start.Clone(),
     End                 = schedule.End.Clone(),
 };
예제 #4
0
        public async Task <ScheduleSettingsContract> Update(string settingId,
                                                            [FromBody] ScheduleSettingsContract scheduleSetting)
        {
            await ValidateScheduleSettings(scheduleSetting);

            ValidateId(settingId, scheduleSetting);

            await _scheduleSettingsRepository.UpdateAsync(
                _convertService.Convert <ScheduleSettingsContract, ScheduleSettings>(scheduleSetting));

            await _eventSender.SendSettingsChangedEvent($"{Request.Path}",
                                                        SettingsChangedSourceType.ScheduleSettings, settingId);

            return(scheduleSetting);
        }
예제 #5
0
        public async Task <ScheduleSettingsContract> Insert([FromBody] ScheduleSettingsContract scheduleSetting)
        {
            await ValidateScheduleSettings(scheduleSetting);

            if (!await _scheduleSettingsRepository.TryInsertAsync(
                    _convertService.Convert <ScheduleSettingsContract, ScheduleSettings>(scheduleSetting)))
            {
                throw new ArgumentException($"Schedule setting with id {scheduleSetting.Id} already exists",
                                            nameof(scheduleSetting.Id));
            }

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

            return(scheduleSetting);
        }
예제 #6
0
 public static ScheduleSettings Create(ScheduleSettingsContract scheduleSettingsContract)
 {
     return(new ScheduleSettings
     {
         Id = scheduleSettingsContract.Id,
         Rank = scheduleSettingsContract.Rank,
         IsTradeEnabled = scheduleSettingsContract.IsTradeEnabled,
         PendingOrdersCutOff = scheduleSettingsContract.PendingOrdersCutOff,
         Start = new ScheduleConstraint
         {
             Date = scheduleSettingsContract.Start.Date,
             DayOfWeek = scheduleSettingsContract.Start.DayOfWeek,
             Time = scheduleSettingsContract.Start.Time
         },
         End = new ScheduleConstraint
         {
             Date = scheduleSettingsContract.End.Date,
             DayOfWeek = scheduleSettingsContract.End.DayOfWeek,
             Time = scheduleSettingsContract.End.Time,
         }
     });
 }
예제 #7
0
        private async Task ValidateScheduleSettings(ScheduleSettingsContract scheduleSetting)
        {
            if (scheduleSetting == null)
            {
                throw new ArgumentNullException(nameof(scheduleSetting), "Model is incorrect");
            }

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

            if (!string.IsNullOrEmpty(scheduleSetting.MarketId) &&
                await _marketRepository.GetAsync(scheduleSetting.MarketId) == null)
            {
                throw new InvalidOperationException($"Market {scheduleSetting.MarketId} does not exist");
            }

            ScheduleConstraintContract.Validate(scheduleSetting);

            if (scheduleSetting.Start.DayOfWeek != null && !Enum.IsDefined(typeof(DayOfWeek), scheduleSetting.Start.DayOfWeek))
            {
                throw new ArgumentNullException(nameof(scheduleSetting.Start.DayOfWeek), "AssetPair Start DayOfWeek is set to an incorrect value");
            }

            if (scheduleSetting.End.DayOfWeek != null && !Enum.IsDefined(typeof(DayOfWeek), scheduleSetting.End.DayOfWeek))
            {
                throw new ArgumentNullException(nameof(scheduleSetting.End.DayOfWeek), "AssetPair End DayOfWeek is set to an incorrect value");
            }

            foreach (var assetPair in scheduleSetting.AssetPairs)
            {
                if (await _assetPairsRepository.GetAsync(assetPair) == null)
                {
                    throw new InvalidOperationException($"Asset pair {assetPair} does not exist");
                }
            }
        }
예제 #8
0
        private static async Task CheckScheduleSettingsApiWorking(IHttpClientGenerator clientGenerator)
        {
            var scheduleSettings = new ScheduleSettingsContract
            {
                Id             = "s1",
                Rank           = 1000,
                AssetPairRegex = "",
                AssetPairs     = new HashSet <string>()
                {
                    "EURUSD"
                },
                MarketId            = "1",
                IsTradeEnabled      = true,
                PendingOrdersCutOff = null,
                Start = new ScheduleConstraintContract {
                    Date = null, DayOfWeek = DayOfWeek.Friday, Time = new TimeSpan(0, 0, 0)
                },
                End = new ScheduleConstraintContract {
                    Date = null, DayOfWeek = DayOfWeek.Sunday, Time = new TimeSpan(0, 0, 0)
                },
            };

            var scheduleSettingsApiClient = clientGenerator.Generate <IScheduleSettingsApi>();
            await scheduleSettingsApiClient.List().Dump();

            await scheduleSettingsApiClient.Insert(scheduleSettings).Dump();

            await scheduleSettingsApiClient.Get("s1").Dump();

            scheduleSettings.Rank = 100000;
            await scheduleSettingsApiClient.Update("s1", scheduleSettings).Dump();

            await scheduleSettingsApiClient.StateList(new[] { "EURUSD" }).Dump();

            await scheduleSettingsApiClient.Delete("s1");
        }
예제 #9
0
 public Task <ScheduleSettingsContract> SetSchedule([FromBody] ScheduleSettingsContract scheduleSettingsContract)
 {
     return(Task.FromResult(Convert(_dayOffSettingsService.SetScheduleSettings(Convert(scheduleSettingsContract)))));
 }