Skip to content

Projetos desenvolvidos em C# e .NET 6 a partir da Imersão Java Alura

Notifications You must be signed in to change notification settings

MPoleto/imersao-alura-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Imersão (Backend) Alura

Projetos desenvolvido em C# e .NET 6 a partir da Imersão Java Alura, neste evento foram desenvolvidos 2 projetos:

  • Projeto em console Stickers que pega uma imagem, adiciona um texto e salva como uma nova imagem para ser usada como sticker nas redes sociais.
  • Projeto web API Languages e conexão com o banco de dados MongoDB para cadastro das linguagens de programação e endereço da logo da linguagem

Descrição

1º Dia

  • Fazer chamada da API, método GET.
    • Usar API mockada do top 250 filmes do IMDB.
  • Armazenar a resposta em uma variável do tipo string
  • Criar uma classe com um método que usa expressões regulares para transformar e organizar as informações da resposta em um dicionário, com o nome e o valor do atributo.
  • Exibir somente as informações selecionadas: título, link da imagem e nota dos filmes.

🚀 Desafios do 1º dia

  • Consumir o endpoint de filmes mais populares da API do IMDB. Procure também, na documentação da API do IMDB, o endpoint que retorna as melhores séries e o que retorna as séries mais populares.
  • Colocar a chave da API do IMDB em algum lugar fora do código como um arquivo de configuração (p. ex, um arquivo .properties) ou uma variável de ambiente.

    Usei a API mockada, por isso não houve necessidade de usar a chave de segurança.

  • Usar sua criatividade para deixar a saída dos dados mais bonitinha: usar emojis com código UTF-8, mostrar a nota do filme como estrelinhas, decorar o terminal com cores, negrito e itálico usando códigos ANSI, e mais!
  • Mudar o JsonParser para usar uma biblioteca de parsing de JSON

    Usei a Classe JsonSerializer do Namespace System.Text.Json.

  • Desafio supremo: criar alguma maneira para você dar uma avaliação ao filme, puxando de algum arquivo de configuração ou pedindo a avaliação para o usuário digitar no terminal.

Para resolver os desafios criei as classes MoviesList e Movie para auxiliar na manipulação dos dados da API.

2º Dia

  • Criar classe com método para ler, editar e salvar imagem.
    • Testar usando imagem salva no computador.
    • Testar usando endereço de imagem da internet.
  • Adicionar parâmetros ao método: para o endereço da imagem e para o nome final da figurinha pronta.

Para fazer a figurinha usei o namespace System.Drawing que é específica para Windows. Sendo necessário instalar o pacote System.Drawing.Common.

🚀 Desafios do 2º dia

  • Centralizar o texto na figurinha.
  • Colocar outra fonte como a Comic Sans ou a Impact, a fonte usada em memes.
  • Colocar contorno (outline) no texto da imagem.

    Fiz esse desafio fazendo a sobreposição de textos, modificando a posição e a cor.

  • Criar diretório de saída das imagens, se ainda não existir.
  • Tratar as imagens retornadas pela API do IMDB para pegar uma imagem maior ao invés dos thumbnails. Opções: pegar a URL da imagem e remover o trecho mostrado durante a aula ou consumir o endpoint de posters da API do IMDB (mais trabalhoso), tratando o JSON retornado.
  • Fazer com que o texto da figurinha seja personalizado de acordo com as classificações do IMDB.

    Para esse desafio, adicionei mais um parâmetro no método de criar o sticker: string texto, que vai ser adicionada a imagem.

  • Desafio supremo: usar alguma biblioteca de manipulação de imagens como OpenCV pra extrair imagem principal e contorná-la.

3º Dia

  • Usar API da NASA.
  • Refatorar código seguindo o Paradigma da Orientação à Objetos.

🚀 Desafios do 3º dia

  • Transformar a classe que representa os conteúdos em um Record.

  • Criar as suas próprias exceções e usá-las na classe que implementa o cliente HTTP.

  • Usar recursos do Java 8 e posterior, como Streams.

    Em C# usei LINQ e Lambdas para mapear uma lista em uma outra.

  • Criar uma Enum que une, como configurações, a URL da API e o extrator utilizado.

    Em C# não é possível usar enum como é usado em Java. Por isso, fiz uma classe com os campos private readonly, criei os objetos como static readonly, para deixar o mais parecido possível com um enum em Java.

  • Desafio supremo: consumir outras APIs que contém imagens, como a da Marvel, que é bem diferente.

    A API utilizada foi a Pexels que precisa adicionar uma chave de acesso - Photos provided by Pexels.
    Utilizei o endpoint de curadoria, que são fotos selecionadas pela equipe da Pexels e são atualizadas de hora em hora.
    A chave foi salva separadamente em um arquivo Secrets (gerenciador de secredos), para isso, instalei o pacote Microsoft.Extensions.Configuration.UserSecrets

Além dos desafios:

  • Separei parte do método CreateSticker, que estava muito longo, em outros métodos:
    • GetImage que pega a imagem da internet.
    • CalculateWordSpace para calcular o espaço para adicionar o texto, dependendo da altura e comprimento da imagem.
    • AddTextToSticker para toda a parte do código de criar e adicionar o texto.
    • SaveSticker para a parte do código que salva o sticker.
  • Alterei a forma que a deserialização das API (Parse) estava sendo feita, deixei de usar o arquivo criado durante a imersão que usa expressões regulares, e passei a usar as funcionalidades disponíveis no namespace System.Text.Json.

4º Dia

  • Construir API REST que armazena as logos das linguagens de programação, que pode ser usada na aplicação de criar stickers.
  • Conectar a API ao banco de dados NoSQL MongoDB.

🚀 Desafios do 4º dia

  • Finalizar o CRUD (Create, Read, Update e Delete) para que se possa atualizar e excluir uma linguagem cadastrada;
  • Devolver a listagem ordenada pelo ranking;
  • Criar na sua API um modelo de entidade com nomes diferentes de title e image ou, manter com o nome title e image e traduzir para que seja retornado como título e imagem através do uso de DTO (Data Transfer Object);
  • Retornar o status 201 quando um recurso (linguagem, no nosso caso) for cadastrado através do POST;
  • Criar seu próprio extrator de figurinhas personalizado;
  • Desafio supremo: Aplicar modificações parciais no recurso através do método PATCH, por exemplo, modificando o número de votos ou de pessoas que utilizam cada linguagem de programação.

    Inicialmente o rank das linguagens foi atribuído seguindo o Top das linguagens usadas em 2022 do GitHub.
    O método PATCH adiciona mais um voto na contagem da linguagem escolhida e atualiza o rank das linguagens a partir da contagem de votos.

5º Dia

  • Criar uma imagem Docker da API das linguagens
  • Fazer o deploy da API usando o Fly.io

🚀 Desafios do 5º dia

  • Sem desafios para essa aula.

  • Fiz a imagem da API das linguagens, que tendo o Docker instalado, pode ser baixada e executada pelo comando:

    docker run -p 8080:80 mpoleto/programming-languages-api:1.0
    
    • Ao executar o container é possível:
      • Acessar a lista de linguagens já adicionadas, por meio do endereço http://localhost:8080/languages
      • Acessar todas os endpoints por meio do Swagger UI http://localhost:8080/swagger/index.html

Referências

Além das aulas da imersão, os conteúdos que me ajudaram a construir os projetos:

About

Projetos desenvolvidos em C# e .NET 6 a partir da Imersão Java Alura

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published