public async Task <bool> Save(RacingInformation info)
        {
            var raceInDb = await _context.Race.FirstOrDefaultAsync(r => r.RaceName == info.RaceData.RaceName);

            if (raceInDb != null)
            {
                return(false);
            }

            _context.Race.Attach(info.RaceData);

            foreach (var item in info.Teams)
            {
                var team = await _context.Team.FirstOrDefaultAsync(t => t.Car == item.Car);

                if (team == null)
                {
                    _context.Team.Attach(item);
                }
                else
                {
                    foreach (var pilot in item.Pilot)
                    {
                        var p = await _context.Pilot.FirstOrDefaultAsync(h => h.Number == pilot.Number);

                        if (p != null)
                        {
                            foreach (var result in pilot.Result)
                            {
                                result.PilotId = p.Id;
                                _context.Result.Attach(result);
                            }
                        }
                        else
                        {
                            pilot.TeamId = team.Id;
                            _context.Pilot.Attach(pilot);
                        }
                    }
                }
            }

            var count = await _context.SaveChangesAsync();

            return(count > 0);
        }
Exemple #2
0
        public async Task <IActionResult> Index(FormulaModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            _parser          = new ParserWorker <RaceModel>(new FormulaParser());
            _parser.Settings = new ParserSettings()
            {
                Link = model.Link
            };

            RaceModel parsed = null;

            try
            {
                parsed = await _parser.Start();

                ViewBag.ResultTable = parsed.ResultTable;
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(nameof(model.Link), $"Ошибка при парсинге: {ex.Message}");
                ViewBag.ResultTable = null;
            }

            if (parsed == null)
            {
                return(View(model));
            }

            try
            {
                RacingInformation info = _racingRepository.Convert(parsed);
                await _racingRepository.Save(info);
            }
            catch
            {
                ModelState.AddModelError(nameof(model.Link), "Ошибка при сохранении данных");
            }
            return(View(model));
        }
        public RacingInformation Convert(RaceModel racingResult)
        {
            RacingInformation result = new RacingInformation();

            result.RaceData = new Race()
            {
                RaceName = racingResult.RaceName
            };

            result.Teams = new List <Team>();

            foreach (var item in racingResult.RaceResults)
            {
                Team team = result.Teams.FirstOrDefault(x => string.Equals(x.Car, item.Car, StringComparison.InvariantCultureIgnoreCase));
                if (team == null)
                {
                    team = new Team()
                    {
                        Car = item.Car
                    };
                    result.Teams.Add(team);
                }

                Pilot pilot = team.Pilot.FirstOrDefault(x => x.Number == item.No);
                if (pilot == null)
                {
                    pilot = new Pilot()
                    {
                        FirstName = item.DriverFirstName, LastName = item.DriverLastName, Number = item.No, ShortName = item.DriverShortName
                    };
                    var oneResult = new Result()
                    {
                        Laps = item.Laps, Pos = item.Pos, Pts = item.Pts, Retired = item.Retired, Time = item.Time, Race = result.RaceData
                    };
                    pilot.Result.Add(oneResult);

                    team.Pilot.Add(pilot);
                }
            }
            return(result);
        }