A arquitetura foi planejada para deixar a aplicação o mais desacoplada possível, tornando mais fácil de manipular alterações e trocar de framework frontend se necessário. Sendo assim, na camada domain fica a interface do caso de uso SearchPokemon. Na canada data temos a classe RemoteSearch que implementa a interface SearchPokemon e chama o metodo get da classe que implementa a interface HttpGetClient. Na aplicação está sendo usado o Axios, porém pode ser alterada simplesmente na camada de infra, sem interferir no resto da aplicação. O React fica na camada presentation, responsável só por executar o frontend e fazer as chamadas necessárias pra executados especificações já definidas nas camadas desacopladas no react. Por fim, a camada main é o ponto de partida da aplicação.
Eu preferi por nao usar o create-react-app e sim criar tudo desacoplado, configurando webpack e tudo mais, pra tornar a escalabilidade mais fácil.
- Pesquisar Pokemon, se existir vai retornar o pokemon buscado, senão vai retornar uma mensagem de não encontrado.
- Adicionar Pokemon a uma lista de favoritos (Usei o próprio Context do React, pois achei desnecessário instalar as bibliotecas pro redux pra uma funcionalidade simples de se resolver com o Context)
- Remover Pokemon da lista de Favoritos
- Responsividade