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);
        }