Ejemplo n.º 1
0
        public IActionResult Add(MoonAddModel model)
        {
            if (!ModelState.IsValid)
            {
                return(RedirectToAction("Add"));
            }

            List <Sector> sectors = null;

            try
            {
                sectors = new MoonProbeDataDump(model).Parse();
            }
            catch (Exception)
            {
                //malformed data, just redirect
            }

            if (sectors == null)
            {
                return(RedirectToAction("Add"));
            }

            foreach (Sector sector in sectors)
            {
                if (!_repoWorld.SystemExists(sector.Name))
                {
                    _repoWorld.AddSystem(sector.Name);
                }
                int sectorId = _repoWorld.GetSystemId(sector.Name);

                foreach (var entryP in sector.Planets)
                {
                    int    planetNumber = (int)entryP.Key;
                    Planet planet       = entryP.Value;

                    if (!_repoWorld.PlanetExists(planetNumber, sectorId))
                    {
                        _repoWorld.AddPlanet(planetNumber, sectorId);
                    }
                    int planetId = _repoWorld.GetPlanetId(planetNumber, sectorId);

                    foreach (var entryM in planet.Moons)
                    {
                        int  moonNumber = (int)entryM.Key;
                        Moon moon       = entryM.Value;

                        if (!_repoWorld.MoonExists(moonNumber, planetId))
                        {
                            _repoWorld.AddMoon(moonNumber, planetId);
                        }
                        int moonId = _repoWorld.GetMoonId(moonNumber, planetId);

                        _repoWorld.DeleteMoonOre(moonId);

                        foreach (var ore in moon.GetOres())
                        {
                            int oreId      = _repoOre.GetOreId(ore.Type.Name);
                            int percentage = (int)(ore.Percentage * 100);
                            _repoWorld.AddMoonOre(moonId, oreId, percentage);
                        }
                    }
                }
            }

            return(RedirectToAction("Search"));
        }