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
- 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.
- 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 NamespaceSystem.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
eMovie
para auxiliar na manipulação dos dados da API.
- 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 pacoteSystem.Drawing.Common
.
- Centralizar o texto na figurinha.
- Colocar outra fonte como a
Comic Sans
ou aImpact
, 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.
- Usar API da NASA.
- Refatorar código seguindo o Paradigma da Orientação à Objetos.
-
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 comostatic 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 pacoteMicrosoft.Extensions.Configuration.UserSecrets
- 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 namespaceSystem.Text.Json
.
- Construir API REST que armazena as logos das linguagens de programação, que pode ser usada na aplicação de criar stickers.
- Imagens usadas do repositório Programming Languages Logos.
- Conectar a API ao banco de dados NoSQL MongoDB.
- 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.
- Criar uma imagem Docker da API das linguagens
- Fazer o deploy da API usando o Fly.io
-
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
- Acessar a lista de linguagens já adicionadas, por meio do endereço
- Ao executar o container é possível:
Além das aulas da imersão, os conteúdos que me ajudaram a construir os projetos:
- Documentação Namespace System.Drawing
- Documentação Classe HttpClient
- Efficient api calls with HttpClient and JSON.NET
- Using Windows.Web.Http's HttpClient for Image Download: A Guide
- How to download an online file and store it on file system with C#
- C# vs Java Enum (for those new to C#)
- Java like Enums in C#
- Documentação How to use a JSON document object model in System.Text.Json
- Create a web API with ASP.NET Core and MongoDB
- Joining Collections in MongoDB with .NET Core and an Aggregation Pipeline
- Curso de Docker: criando e gerenciando containers
- Tutorial: Colocar um aplicativo .NET em contêiner