public ActionResult Edit(int?id)
        {
            var fileManager = new FileManager(Server);

            if (!id.HasValue)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var fullPlanet = planetRepository.GetFullDataPlanet(id ?? (int)InvalidPropertyValues.undefinedValue);

            if (fullPlanet == null)
            {
                return(HttpNotFound());
            }

            var climates = climateRepository.GetClimates();
            var terrains = terrainRepository.GetTerrains();

            var planetClimates = fullPlanet.ClimateZones.ToList();
            var planetTerrains = fullPlanet.SurfaceMorphologies.ToList();

            var climateViewModels = PopulateClimates(climates, planetClimates);
            var terrainViewModels = PopulateTerrains(terrains, planetTerrains);

            var viewModel = ContainerPlanetFormViewModel.CreateFromModels(fullPlanet, fullPlanet.Details, fileManager, climateViewModels, terrainViewModels);

            return(View("PlanetForm", viewModel));
        }
        public ActionResult New()
        {
            var climates = climateRepository.GetClimates();
            var terrains = terrainRepository.GetTerrains();

            var climateViewModels = PopulateClimates(climates, null);
            var terrainViewModels = PopulateTerrains(terrains, null);

            var viewModel = ContainerPlanetFormViewModel.CreateEmpty(climateViewModels, terrainViewModels);

            return(View("PlanetForm", viewModel));
        }
        public ActionResult Save(PlanetFormViewModel planetViewModel, PlanetDetailFormViewModel detailsViewModel, PlanetAssetsFormViewModel planetAssetsFormViewModel, List <ClimateZoneViewModel> climateZonesViewModel, List <SurfaceMorphologyViewModel> surfaceMorphologiesViewModel)
        {
            var fileManager = new FileManager(Server);

            if (!ModelState.IsValid)
            {
                Planet planetWithAssets = planetRepository.GetPlanetRawWithAssets(planetViewModel.PlanetFormViewModelId);
                planetViewModel.AssignUploadedAvatar(fileManager);
                if (planetWithAssets != null)
                {
                    planetAssetsFormViewModel = new PlanetAssetsFormViewModel(planetWithAssets, fileManager);
                }
                var viewModel = ContainerPlanetFormViewModel.CreateFromViewModels(planetViewModel, detailsViewModel, planetAssetsFormViewModel, climateZonesViewModel, surfaceMorphologiesViewModel);
                return(View("PlanetForm", viewModel));
            }

            Planet planetToDB;

            if (planetViewModel.PlanetFormViewModelId == 0)
            {
                planetToDB = Planet.CreateFromFormViewModel(planetViewModel, fileManager);
                var planetDetails = PlanetDetail.CreateFromFormViewModel(detailsViewModel, planetViewModel);
                planetToDB.UpdateSecondaryData(planetDetails, climateZonesViewModel, surfaceMorphologiesViewModel);
                planetToDB.InitializeAssets(fileManager, planetAssetsFormViewModel);
                planetRepository.Add(planetToDB);
            }
            else
            {
                planetToDB = planetRepository.GetFullDataPlanet(planetViewModel.PlanetFormViewModelId);

                if (planetToDB == null)
                {
                    return(HttpNotFound());
                }

                planetToDB.UpdateFromFormViewModel(planetViewModel, fileManager);
                var planetDetails = PlanetDetail.Create(detailsViewModel.RotationPeriod, detailsViewModel.OrbitalPeriod, detailsViewModel.Diameter, detailsViewModel.Population, planetToDB);
                planetToDB.UpdateSecondaryData(planetDetails, climateZonesViewModel, surfaceMorphologiesViewModel);
                planetToDB.UpdateAssets(fileManager, planetAssetsFormViewModel);
                filePathRepository.RemoveFilepaths(planetToDB.FilePathsToDelete);
            }

            unitOfWork.Complete();

            planetToDB.SaveAssets(fileManager, planetAssetsFormViewModel);

            return(RedirectToAction("Index", "Planet"));
        }