public async Task <PokemonViewModel> CreatePokemon(PokemonViewModel data) { var pokemon = mapper.Map <Pokemon>(data); await CheckUniquePokemonId(pokemon.Id); await CheckUniquePokemonName(pokemon.Name); CheckAbilitiesAreDiferent(data.Abilities[0].Id, data.Abilities[1].Id); await CheckAbilityExists(data.Abilities[0].Id); await CheckAbilityExists(data.Abilities[1].Id); var photoFileName = storageProvider.SaveFile(data.PokemonPhoto); pokemon.Photo = photoFileName; pokemon = await pokemonRepository.CreatePokemon(pokemon); var stats = mapper.Map <Stats>(data.Stats); stats.PokemonId = pokemon.Id; stats = await statsRepository.CreateStats(stats); var ability = await pokemonRepository.CreatePokemonAbility( pokemon.Id, data.Abilities[0].Id ); var hiddenAbility = await pokemonRepository.CreatePokemonAbility( pokemon.Id, data.Abilities[1].Id ); var abilities = await abilitiesRepository.FindByPokemonId(pokemon.Id); var pokemonViewModel = mapper.Map <PokemonViewModel>(pokemon); pokemonViewModel.Stats = mapper.Map <StatsViewModel>(stats); pokemonViewModel.Abilities = mapper .Map <List <AbilityViewModel> >(abilities); return(pokemonViewModel); }