/bildvitta

Backend Challenge A NAVE bild vitta

Primary LanguagePHP

Coin Conversion

CurrencyTests

Requerimentos

  • PHP v8.
  • GIT v2
  • Composer v2.
  • Banco de dados: MySql, SQLite, PostgreSQL, SQLServer.

Descrição

Esse ‘software’ tem o intuito de fazer a conversão de moedas pré-cadastradas, é possível informar a quantidade também.

Para instalar e testar o projeto siga os passos a seguir:

Moedas disponíveis para conversão

Moeda Código
BRL Real Brasileiro
USD Dólar Americano
ARS Peso Argentino
EUR Euro
GBP Libra
BTC Bitcoin

Instalação

Clonando o projeto.

git clone git@github.com:SOSTheBlack/bildvitta.git

Acesse a pasta do projeto.

cd bildvitta

Instale as dependências.

composer install

Criar arquivo de configuração.

Execute o comando abaixo para criar o seu arquivo .env.

cp .env.example .env

Após a criação do seu .env edite as suas configurações de banco de dados para prosseguirmos ao próximo passo.

Gere a chave de segurança do ‘software’.

php artisan key:generate

Criando as tabelas no banco de dados.

php artisan migrate

Nesse momento está sendo criado a tabela que irá conter as moedas disponíveis para conversão.

Cadastrando as moedas que estarão disponíveis para conversão.

php artisan db:seed

As moedas para conversão estão na tabela coin_conversions.

Inicializando o software.

php artisan serve

Utilização

Para utilizar a API, segue esse cURL de exemplo. Atenção a porta que está sendo rodado o ‘software’ no seu sistema.

curl -L -X GET "http://127.0.0.1:8000/api/coins/conversions?coin_from=USD&coin_to=GBP&quantity=10" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Token: d812b49499b6b3e6b24a70cece02f2f7'

O endpoint da API é um GET e os paramatros deve ser enviado por query string.

Parâmetros da API

Segue os parâmetros da nossa API.

Query String

Key Obrigatório Descrição
coin_from SIM Moeda de origen(De)
coin_to SIM Modera de destino(Para)
quantity SIM Quantidade de moedas a serem convertidas

Headers

Key Value Obrigatório Descrição
Token config('services.api.token') SIM Quantidade de moedas a serem convertidas
Accept application/json NÃO Tipo de conteúdo enviado a API
Content-Type application/json NÃO Tipo de conteúdo retornado da API

Resposta da API

200 - Sucesso

Exemplo de response segundo o cURL anexado acima.

{
    "data": {
        "coin_from": "USD",
        "coin_to": "GBP",
        "quantity": 10,
        "price": 7.8
    }
}

422 - Unprocessable Entity

{
    "message": "The given data was invalid.",
    "errors": {
        "quantity": [
            "The quantity field is required."
        ],
        "coin_from": [
            "The coin from field is required."
        ],
        "coin_to": [
            "The coin to field is required."
        ]
    }
}

401 - Unauthorized

Ausência do header Token.

{
    "message": "missing token, is has required"
}

Token inválido

{
    "message": "invalid token"
}

Erros do Software

\App\Exceptions\Api\TokenException

Código Mensagem
1001 missing token, is has required.
1002 invalid token.

\App\Exceptions\Repositories\ModelNotFoundException

Código Mensagem
1001 no results for model.

\App\Exceptions\Repositories\QueryException

Código Mensagem
1001 error when inserting database.

Rodando testes

Execute o comando abaixo:

php artisan test

Você deve visualizar algo semelhante a isso:

   PASS  Tests\Feature\Api\Coins\ConversionTest
  ✓ coin conversion with success
  ✓ coin conversion with success with data set #1
  ✓ coin conversion with success with data set #2
  ✓ coin conversion with success with data set #3
  ✓ coin conversion with success with data set #4
  ✓ coin conversion with success with data set #5
  ✓ coin conversion with success with data set #6
  ✓ coin conversion with success with data set #7
  ✓ coin conversion with success with data set #8
  ✓ coin conversion with success with data set #9
  ✓ coin conversion with success with data set #10
  ✓ has validation inputs
  ✓ has validation inputs with data set #1
  ✓ has validation inputs with data set #2
  ✓ has validation inputs with data set #3
  ✓ has validation inputs with data set #4
  ✓ has validation inputs with data set #5
  ✓ has validation inputs with data set #6if coin exists in database
  ✓ if coin exists in database with data set #1if coin exists in database with data set #2if coin exists in database with data set #3if coin exists in database with data set #4if coin exists in database with data set #5if coin exists in database with data set #6if coin exists in database with data set #7if coin exists in database with data set #8if coin exists in database with data set #9if coin exists in database with data set #10if coin exists in database with data set #11if coin exists in database with data set #12if coin exists in database with data set #13if coin exists in database with data set #14if coin exists in database with data set #15if coin exists in database with data set #16if coin exists in database with data set #17if coin exists in database with data set #18if coin exists in database with data set #19if coin exists in database with data set #20if coin exists in database with data set #21