コード例 #1
0
        public async Task <int?> GetPossiblePositionForCurrentSkier(int raceId)
        {
            var current = await GetCurrentSkier(raceId);

            if (current == null)
            {
                return(null);
            }
            var lastTimeData =
                (await _timeDataDao.GetTimeDataForStartList(current.SkierId, current.RaceId))
                .OrderByDescending(td => td?.Sensor?.SensorNumber)
                .First();

            var diff = await _statService.GetDifferenceToLeader(lastTimeData);

            if (diff == null)
            {
                return(1);
            }

            var ranking = await _statService.GetFinishedSkierRanking(raceId);

            return(1 + ranking
                   ?.TakeWhile(raceRanking => (raceRanking?.TimeToLeader ?? 0) < diff.Value.TotalMilliseconds)
                   .Count());
        }
コード例 #2
0
        private async Task <bool> ValidateSensorValue(int sensorNumber, DateTime dateTime)
        {
            //minmax check
            if (sensorNumber < 0 || sensorNumber > _maxSensorNr)
            {
                return(false);
            }

            var currentSkier = await _activeRaceService.GetCurrentSkier(RaceId);

            //no current skier
            if (currentSkier == null)
            {
                return(false);
            }
            var startTime = await _timeDataDao.GetStartTimeForStartList(currentSkier.SkierId, RaceId);

            //no startTime
            if (startTime == null && sensorNumber != 0)
            {
                return(false);
            }
            var average = await _timeDataDao.GetAverageTimeForSensor(RaceId, sensorNumber) ??
                          _sensorConfig.SensorAssumptions[sensorNumber];

            var timeDataList =
                (await _timeDataDao
                 .GetTimeDataForStartList(currentSkier.SkierId, currentSkier.RaceId)).ToList();

            return(ValidSensorSeries(timeDataList, sensorNumber) switch
            {
                SensorSeriesResult.NeedsAverageValidation => IsTimeInBoundAverage(
                    (int)(dateTime - (startTime ?? dateTime)).TotalMilliseconds,
                    average),
                SensorSeriesResult.SensorAlreadyHasValue => false,
                SensorSeriesResult.SensorAfterwardsSet => false,
                _ => false
            });
コード例 #3
0
 public Task <IEnumerable <TimeData> > GetTimeDataForStartList(int raceId,
                                                               int skierId) => _timeDataDao.GetTimeDataForStartList(skierId, raceId);