public function transform(Pokemon $pokemon)
 {
     $number = str_pad($pokemon->id, 3, '0', STR_PAD_LEFT);
     return ['number' => $number, 'name' => $pokemon->identifier, 'types' => $pokemon->types->map(function (Type $type) {
         return $type->identifier;
     }), 'sprite' => $number, 'type-defenses' => $this->efficacyComparator->getDefences($pokemon->types), 'stats' => $this->statRepository->getStatsFor($pokemon)];
 }
 public function find()
 {
     if (Input::exists('search')) {
         $search = Input::get('search');
         $result = $this->pokemonRepository->findByPartialName($search);
         if (!$result) {
             return $this->blankSuccess();
         }
         $result = $this->pokemonTransformer->transform($result);
         return $this->success($result);
     } else {
         // instruct calculators to eager load
         $this->typeEfficacyComparator->preloadAllData();
         $this->statRepository->preloadStats();
         $result = $this->pokemonRepository->getAll()->map(function (Pokemon $pokemon) {
             return $this->pokemonTransformer->transform($pokemon);
         });
         return $this->success($result);
     }
 }