예제 #1
0
        public async Task <bool> UpdateStartList(int raceId, IEnumerable <StartList> startList)
        {
            using var scope = ScopeBuilder.BuildTransactionScope();
            await _startListDao.DeleteAllForRace(raceId);

            foreach (var sl in startList)
            {
                await _startListDao.InsertAsync(sl);
            }
            scope.Complete();
            return(true);
        }
예제 #2
0
        public async Task <RaceModificationResult> InsertOrUpdateRace(Race race, int sensorCount)
        {
            try
            {
                using var scope = ScopeBuilder.BuildTransactionScope();
                if (race.Id == -1)
                {
                    var raceId = await _raceDao.InsertGetIdAsync(race);

                    if (raceId.HasValue)
                    {
                        race.Id = raceId.Value;
                    }
                    else
                    {
                        return(RaceModificationResult.Err);
                    }
                }
                else if (!await IsUpdateInvalid(race))
                {
                    await _raceDao.UpdateAsync(race);
                }
                else
                {
                    return(RaceModificationResult.StartListDefined);
                }

                var sensors = (await _sensorDao.FindAllSensorsForRace(race.Id)).ToList();

                if (sensors.Count > sensorCount)
                {
                    foreach (var s in sensors.Where(s => s.SensorNumber >= sensorCount))
                    {
                        await _sensorDao.DeleteAsync(s.Id);
                    }
                }
                else
                {
                    for (var i = sensors.Count; i < sensorCount; i++)
                    {
                        await _sensorDao.InsertAsync(new Sensor { RaceId = race.Id, SensorNumber = i });
                    }
                }

                scope.Complete();
                return(RaceModificationResult.Ok);
            }
            catch (Exception)
            {
                return(RaceModificationResult.Err);
            }
        }
예제 #3
0
        public async Task <bool> UpdatePossibleDisciplines(int skierId, IEnumerable <int> disciplines)
        {
            var skier = await GetSkierById(skierId);

            if (skier == null)
            {
                return(false);
            }
            using var scope = ScopeBuilder.BuildTransactionScope();
            await _skierDao.DeleteAllPossibleDisciplineForSkier(skierId);

            foreach (var discipline in disciplines)
            {
                await _skierDao.InsertPossibleDisciplineForSkier(skierId, discipline);
            }
            scope.Complete();
            return(true);
        }
예제 #4
0
        public async Task <bool> RemoveRace(int raceId)
        {
            var race = await _raceDao.FindByIdAsync(raceId);

            if (race == null)
            {
                return(false);
            }

            if (race.RaceStateId != (int)RaceState.Upcoming)
            {
                return(false);
            }
            using var scope = ScopeBuilder.BuildTransactionScope();
            await _sensorDao.DeleteAllSensorsForRace(race.Id);

            await _startListDao.DeleteAllForRace(race.Id);

            await _raceDao.DeleteAsync(race.Id);

            scope.Complete();
            return(true);
        }