Este projeto é uma Pokédex interativa, permitindo que os usuários explorem e visualizem detalhes sobre diferentes espécies de Pokémon. O design está disponível no Figma, e o desenvolvimento está em andamento para oferecer uma experiência amigável e intuitiva aos amantes de Pokémon.
- Design do Projeto
- Requisitos
- Arquitetura
- Tecnologias Utilizadas
- Design e Interface do Usuário
- Camada de Dados
- Considerações de Segurança
- Documentação de APIs
- Escalabilidade e Desempenho
- Fluxo de Integração Contínua (CI/CD)
- Fluxo de Requisições e Armazenamento em Cache
- Anexos
O design do aplicativo pode ser visualizado diretamente no Figma: Link para o design no Figma
- Buscar Pokémons: Permitir ao usuário buscar informações detalhadas de pokémons utilizando a PokeAPI.
- Filtros por Tipo: Possibilitar que o usuário filtre os pokémons por tipo (água, fogo, planta, etc.).
- Detalhamento dos Pokémons: Exibir informações detalhadas, como nome, habilidades, estatísticas e evolução.
- Navegação Intuitiva: Interface amigável que permita uma navegação fácil entre pokémons e filtros.
- Favoritos: Possibilidade de marcar pokémons favoritos.
- Escalabilidade: Suportar um número elevado de usuários simultâneos.
- Desempenho: Carregar rapidamente as informações dos pokémons com uma experiência de navegação fluida.
- Segurança dos Dados: Garantir que os dados dos usuários estejam seguros.
- Offline First: Opção de armazenamento offline para pokémons já visualizados pelo usuário.
O aplicativo segue uma arquitetura modular, dividida em camadas para facilitar manutenção e evolução:
- Apresentação (Frontend): Interface do usuário, responsável pela navegação, exibição dos dados e interação com o usuário.
- Serviços (API): Conexão com a PokeAPI, onde as informações dos pokémons são buscadas.
- Persistência de Dados: Uso de cache para dados acessados recentemente, possibilitando um modo offline para pokémons já visualizados.
[ Usuário ]
|
[ Interface Mobile ]
|
[ Serviço de Dados - PokeAPI ]
|
[ Camada de Persistência - Cache Local ]
- Frontend: React Native com Expo
- Backend: Integração direta com a PokeAPI
- Persistência Local: AsyncStorage (para cache)
- Linguagem: TypeScript
- Ferramentas de UI: React Navigation, Context API para gerenciamento de estado
- Autenticação: Clerk (para login e favoritos)
- Testes: Jest, Testing Library
O design foi criado para oferecer uma navegação intuitiva:
- Tela Inicial: Lista de pokémons com a possibilidade de aplicar filtros de tipos.
- Detalhes do Pokémon: Exibe dados como habilidades, estatísticas e evoluções.
- Favoritos: Tela para salvar e visualizar pokémons marcados como favoritos.
A aplicação utiliza a PokeAPI para buscar dados dos pokémons. O cache local é implementado com AsyncStorage, permitindo acesso offline a pokémons previamente visualizados.
interface Pokemon {
id: number;
name: string;
types: string[];
abilities: string[];
stats: {
hp: number;
attack: number;
defense: number;
speed: number;
};
evolution: string[];
}
- Autenticação: Implementação via Clerk para login e favoritos.
- Segurança dos Dados: Dados sensíveis são criptografados. Utilizamos SSL para comunicações seguras com a PokeAPI.
- Offline Cache: Dados são armazenados de forma segura e só incluem informações de pokémons visualizados.
Endpoint: https://pokeapi.co/api/v2/
Exemplo de Requisição para Pokémons: /pokemon/{id}
Exemplo de Requisição para Tipo: /type/{id}
A documentação completa dos endpoints da PokeAPI pode ser acessada aqui.
- Caching Local: AsyncStorage é usado para dados visualizados recentemente.
- Pagination: Listagem de pokémons com paginação para otimizar carregamento.
- Balanceamento de Carga: Planejamento para o uso de CDN, otimizando o tempo de resposta.
Ferramentas: GitHub Actions e Expo
Processo:
- Build Automático: O app é construído automaticamente para cada PR.
- Testes Automatizados: Testes unitários e de integração executados no CI.
- Publicação: Versão beta disponibilizada no Expo para testes.
O fluxo de requisições e o gerenciamento de cache no aplicativo foram planejados para oferecer uma experiência rápida e responsiva ao usuário, mesmo em situações de conectividade limitada. Este fluxo é responsável por realizar requisições à PokeAPI, processar os dados recebidos e armazená-los em cache para acessos futuros.
-
Acesso Inicial à PokeAPI:
- Quando o usuário abre o aplicativo ou acessa a lista de pokémons pela primeira vez, é feita uma requisição à PokeAPI para buscar os dados básicos de todos os pokémons.
-
Requisição de Detalhes do Pokémon:
- Ao selecionar um pokémon, o aplicativo faz uma requisição de detalhes para obter habilidades, estatísticas e evoluções.
-
Aplicação de Filtros:
- Requisições são feitas para listar pokémons de tipos específicos. Se já requisitados, os dados são retornados do cache.
O armazenamento em cache usa AsyncStorage para melhorar a performance e possibilitar navegação offline.
- Dados Básicos: Lista de pokémons é salva com a chave
pokemonListCache
. - Dados Detalhados: Detalhes individuais são armazenados com chave
pokemonDetailCache_{id}
. - Dados de Filtros: Lista filtrada de pokémons é salva com chave
pokemonTypeCache_{type}
.
- Cada entrada de cache contém um timestamp, e entradas são atualizadas a cada 24 horas para evitar desatualização dos dados.
[Cache Local (AsyncStorage)]
|
|- Lista de Pokémons (pokemonListCache)
|- Detalhes do Pokémon (pokemonDetailCache_{id})
|- Filtros de Tipo (pokemonTypeCache_{type})
- Link do Protótipo: Figma
- Documentação Completa PokeAPI: Documentação PokeAPI