Olá, este repositório foi feito baseado no desafio proposto pela Klever.
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
- 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
-
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.
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
Currency Coin Service Started
2022/04/26 05:20:11 Listening on 0.0.0.0:50051
Starting Server...
Para checar se a aplicação está funcionando devidamente, rode na raiz do projeto o comando: make test
Abra o Insomnia e clique no botão Create e logo em seguida no botão Request Collection
Defina o nome de preferência ou deixe como padrão. Logo em seguida, clique Create.
Aperte no botão + e depois em New Request
Defina o nome de preferência ou deixe como padrão. Logo em seguida, clique em GET e selecione gRPC.
Clique no botão Add Proto File e selecione o arquivo service.proto, localizado em ./proto
referente a raiz onde o projeto foi clonado.
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.
- /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!
}
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.