Skip to content

NONATO-03/drinks-api-cli

Repository files navigation

Drinks Menu

🇧🇷 Português · 🇺🇸 English

Drinks Menu CLI

Tela inicial do projeto

Exemplar da tela inicial do projeto

Contexto

Este projeto é o resultado de um desafio concluído. O desafio consistia em um aplicativo que conecta numa API e externa através de pedidos HTTPS usando a biblioteca da classe .NET. Link para o desafio: https://thecsharpacademy.com/project/15/drinks

De acordo com o que o desafio solicitava eu produzi um aplicativo de console interativo que permite à equipe de um restaurante navegar por um catálogo de drinks servido por uma API externa

API Externa utilizada: TheCocktailDB(https://www.thecocktaildb.com/). Escrito em C# / .NET

De acordo com a solicitação do desafio: o usuário escolhe uma categoria, depois um drink, e vê seus detalhes. Campos vazios nunca vão ser exibidos e o aplicativo continua funcionando mesmo que a API esteja fora do ar

Funcionalidades

  • Navegação categoria → drink → detalhes, usando Spectre.Console para a interface do terminal.

Exemplar de como é exibido as categorias em produção:

Categorias em produção

  • Campos opcionais são renderizados apenas quando a API os retorna de modo que nenhum cartão de detalhes exibe valores em branco

  • As chamadas de rede são encapsuladas e então um timeout ou uma indisponibilidade mostra uma mensagem em vez de um stack trace

Funcionalidades extras de acordo com desafio:

  • Favoritos: opção de salvar drinks localmente como favoritos

  • Contagem de visualizações: rastreia quantas vezes cada drink é aberto e então salva localmente

  • Um link clicável para a imagem de cada drink

Exemplar de como as informações do drink aparece em produção:

Detalhes do drink em produção

  • O desafio não exigia SQL então os favoritos e contagens de visualização ficam em um arquivo local userdata.json.

Arquitetura

O projeto é dividido em camadas e cada uma com uma única responsabilidade:

Program.cs            Raiz de composição (configuração da injeção de dependências)
Models/               Objetos de dados simples (DTOs da API + dados salvos do usuário)
Services/             Camada de negócio e de I/O
  ├─ IDrinksApiService / DrinksApiService   HTTP + JSON (TheCocktailDB)
  ├─ IUserDataService  / UserDataService    Persistência local em JSON
  └─ DrinksApiException                     Um único tipo de erro para a UI capturar
UI/
  └─ MenuUI           Somente a apresentação (Spectre.Console)

Notas técnicas

  • IHttpClientFactory + cliente tipado. A factory reaproveita e recicla os handlers subjacentes, o que evita o esgotamento de sockets que ocorre ao criar um novo HttpClient por requisição.
  • System.Text.Json. Nativo, rápido e sem dependência extra.
  • [JsonExtensionData] para os ingredientes. A API retorna 15 pares planos de strIngredient/strMeasure. Capturá-los em um único dicionário mantém o modelo Drink enxuto e reconstrói uma lista limpa sob demanda.
  • Um único DrinksApiException. A UI captura um único tipo, então qualquer falha de rede termina em uma mensagem em vez de um crash.
  • Interfaces entre as camadas. Cada camada pode ser substituída ou testada de forma independente.
  • Arquivo JSON para armazenamento. O desafio não exigia SQL, então um arquivo local guarda os dados.

Como executar

Requer o .NET SDK 8.0 ou superior.

dotnet run -c Release

No Windows, caso o dotnet não esteja no seu PATH:

& "C:\Program Files\dotnet\dotnet.exe" run -c Release

Endpoints da API

Ação Endpoint
Listar categorias list.php?c=list
Drinks de uma categoria filter.php?c={category}
Detalhes completos do drink lookup.php?i={id}

About

C# / .NET console app to browse a drinks catalog using TheCocktailDB API.

Topics

Resources

Stars

Watchers

Forks

Releases

Contributors

Languages