Skip to content

LuizFJP/currency-coin

Repository files navigation

Klever API Challenge

Seja bem-vindo(a)!

Olá, este repositório foi feito baseado no desafio proposto pela Klever.

Descrição e requisitos do projeto:

The Technical Challenge consists of creating an API with Golang using gRPC with stream pipes that exposes an upvote service endpoints.

Technical requirements:

  • Keep the code in Github

API:

  • The API must guarantee the typing of user inputs. If an input is expected as a string, it can only be received as a string.
  • The structs used with your mongo model should support Marshal/Unmarshal with bson, json and struct
  • The API should contain unit test of methods it uses

Extra:

  • Deliver the whole solution running in some free cloud service

Utilizando a aplicação

Clone o Repositório

  • Faça o clone do repositório na sua máquina por meio da chave SSH, basta rodar o comando:
git clone git@github.com:LuizFJP/KLEVER-CHALLENGE-currency-coin.git

Instalação do Insomnia

  • O que é? Uma ferramenta cliente de API REST, como o Postman, mas tem alguns recursos adicionais, como suporte a GraphQL, gRPC, entre outros.

  • Por quê? Para ter acesso ao server da aplicação, faz-se necessário a utilização de um client como meio de envio das requisições.

    Site oficial para a instalação


Setup e server

Rode em sequência os comandos:

Para instalar as bibliotecas necessárias da aplicação, rode na raiz do projeto o comando: make mod

Para "buildar" o servidor, rode na raiz do projeto o comando: make build

Para inicializar o servidor, rode na raiz do projeto o comando: make server

Perfeito!!! Seu servidor já está pronto. É esperada a seguinte mensagem:

Currency Coin Service Started
2022/04/26 05:20:11 Listening on 0.0.0.0:50051
Starting Server...

Testes

Para checar se a aplicação está funcionando devidamente, rode na raiz do projeto o comando: make test


Setup do Insomnia

Abra o Insomnia e clique no botão Create e logo em seguida no botão Request Collection


step-one

Defina o nome de preferência ou deixe como padrão. Logo em seguida, clique Create.


step-one

Aperte no botão + e depois em New Request


step-one

Defina o nome de preferência ou deixe como padrão. Logo em seguida, clique em GET e selecione gRPC.


step-one

Clique no botão Add Proto File e selecione o arquivo service.proto, localizado em ./proto referente a raiz onde o projeto foi clonado.


step-one

No local indicado na seta 1, insira o valor localhost:50051, fazendo isso o client do Insomnia conseguirá se conectar com o nosso server. Por fim, selecione um dos métodos da aplicação gRPC e estará pronto para uso.


step-one


Sobre os métodos

  • /CurrencyCoinService/createCoin

Responsável pela criação de uma moeda. Envia uma requisição com nome e preço. O retorno deve ser o nome, preço e a quantidade de votos (não informado pelo usuário, moedas criadas recebem o valor 0 aos votos automaticamente).

Exemplo de requisição:

{
	"name": "BITCOIN",
	"price": 5.467
}

Exemplo de response:

{
	"name": "BITCOIN",
	"price": 5.467,
  "vote": 0
}
  • /CurrencyCoinService/ListCoins

Responsável pelo retorno de todas as moedas. Envia uma requisição vazia e será retornado todas as moedas.

Exemplo de requisição:

{}

Exemplo de response:

{
	"name": "BITCOIN",
	"price": 5.467,
  "vote": 0
}

Exemplo de response:

{
	"name": "Ethereum",
	"price": 942.78,
  "vote": 91
}

Exemplo de response:

{
	"name": "Shiba",
	"price": 00000.1,
  "vote": 4984
}
  • /CurrencyCoinService/UpvoteCoin

Responsável por aumentar o número de votos em 1. O corpo da requisição deve ser o nome da moeda e o retorno será o nome, preço e voto atualizado. ATENÇÃO: A API diferencia letras maiúsculas e minúsculas, por isso é importante inserir o nome da mesma forma como está cadastrado

Exemplo de requisição:

{"name":"BITCOIN"}

Exemplo de response:

{
	"name": "BITCOIN",
	"price": 5.467,
  "vote": "1"
}
  • /CurrencyCoinService/DownvoteCoin

Responsável por decrementar o número de votos em 1. O corpo da requisição deve ser o nome da moeda e o retorno será o nome, preço e voto atualizado. ATENÇÃO: A API diferencia letras maiúsculas e minúsculas, por isso é importante inserir o nome da mesma forma como está cadastrado

Exemplo de requisição:

{"name":"BITCOIN"}

Exemplo de response:

{
	"name": "BITCOIN",
	"price": 5.467,
  "vote": 0
}
  • /CurrencyCoinService/Delete

Responsável por deletar uma moeda. O corpo da requisição deve ser o nome da moeda e o retorno será uma mensagem confirmando a deleção. ATENÇÃO: A API diferencia letras maiúsculas e minúsculas, por isso é importante inserir o nome da mesma forma como está cadastrado

Exemplo de requisição:

{"name":"BITCOIN"}

Exemplo de response:

{
	"message": "BITCOIN was deleted successful!
}

Fontes de estudo:

Documentação do mongoDB
Documentação do gRPC
Documentação do GO
Documentação do mongodb driver
Indispensável mencionar o uso de diversos tutoriais no Youtube, StackOverFLow, GitHub e o Médium.


Sugestões e feedbacks serão sempre bem-vindos :)

About

CRUD API para um sistema upvote e downvote de criptomoedas, utilizando a linguagem Go e gRPC.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published