Tech assessment para Bliss Apps
🌍 Available languages: Português | English
O enunciado completo está disponível aqui.
Este projeto implementa os requisitos do desafio técnico Bliss Apps, utilizando SwiftUI, arquitetura MVVM, Core Data para persistência local, e networking assíncrono com async/await.
- Ao clicar no botão, um emoji aleatório é selecionado e mostrado em destaque no topo do ecrã.
- Os emojis são obtidos da API pública do GitHub (https://api.github.com/emojis) utilizando uma chamada assíncrona com tratamento de erros.
- Os dados recebidos são mostrados numa grid com SwiftUI.
- O utilizador pode remover emojis da memória temporária clicando nele.
- Um gesto de pull-to-refresh permite restaurar a lista completa de emojis.
- A lista de emojis é guardada localmente com Core Data.
- Ao abrir a app, se houver dados persistidos, eles são carregados automaticamente.
- O utilizador pode buscar avatares do GitHub pelo nome de utilizador.
- A busca utiliza a API do GitHub e mostra o avatar correspondente, com tratamento de erros para utilizadores inexistentes.
- Avatares buscados são guardados localmente (cache em Core Data), evitando requisições repetidas desnecessárias.
- Caso o avatar já esteja guardado, a app mostra a versão em cache.
- Todos os avatares buscados são listados num ecrã dedicado.
- O utilizador pode remover avatares individualmente da base de dados local ao clicar e confirmando no diálogo.
- A app lista os repositórios públicos da Apple no GitHub, utilizando a API de busca de repositórios.
- O ecrã de repositórios implementa paginação: ao fazer scroll até ao fim da lista, novas páginas de repositórios são carregadas automaticamente.
- Persistência: Core Data é utilizado para armazenar emojis e avatares localmente.
- UI: SwiftUI é usado para todas as ecrãs, com NavigationStack para navegação.
- Networking: Todas as requisições são feitas com async/await, incluindo tratamento de erros e estados de carregamento.
- Cache: Avatares buscados ficam guardados localmente para acelerar buscas futuras.
- Refinamentos de UI: Uso de bordas, espaçamentos, grid e layouts adaptativos.
- Arquitetura: MVVM, separando regras de negócio (ViewModels), serviços de rede, e stores de persistência.
O projeto segue a arquitetura MVVM, com separação clara entre responsabilidades. Serviços de rede e persistência (Core Data) são desacoplados das views. O uso de SwiftUI e NavigationStack facilita a navegação e organização das ecrãs. O código é modular, facilitando manutenção e extensões futuras.