Repositorio para o desafio bravo
Após Clonar o repositório, dentro do diretório onde existe o arquivo Dockerfile execute o comando a baixo para criar a imagem docker:
docker image build -t php-redis:1 .
Com a imagem criada rode o seguinte comando para subir o container e criar o servidor php:
docker run -d -p 127.0.0.1:8000:8000 -v $(pwd):/var/www/html --name php-redis php-redis:1 php -S 0.0.0.0:8000 -t /var/www/html/currency/public
Entre no container e rode os comandos para criar as tabelas necessária para a aplicação e subir o servidor do redis:
docker exec -it php-redis bash
# Inicia o servidor do redis
service redis-server start
# Diretório - var/www/html/currency
composer install
# ou
composer update
# Cria .env
php -r "file_exists('.env') || copy('.env.example', '.env');"
php artisan migrate
Obs: Verificar se o arquivo .env existe e esta com os parametros corretos.
# Diretório - var/www/html/currency
vendor/bin/phpunit
Para cotação das moedas existentes (USD, BRL, EUR, BTC, ETH) vai ser consultada a api externa https://economia.awesomeapi.com.br/ para o dia atual. A apliação vai permitir o cadastro de novas moedas seguindo o mesmo padrão da api externa.
Api - Gerenciamento das moedas e cotações.
POST /api/currency (Cria nova quotação para a moeda)
Cada inserção nesse endpoint criar um registro na base que vai servir de histórico do valor da moeda.
name rule data type description code min:3, max:5, required (USD) string Código da moeda de lastro (padrão USD) code_in min:3, max:5, required (D&D) string Código da moeda description min:10, max:100, required string Descrição da Moeda (Dolar Americano / D&D Peça de ouro) bid required float (10,4) Valor de compra da moeda (1 unidade - 1$) ask required float (10,4) Valor de venda da moeda (1 unidade - 1$)
name value Accept application/json Content-type application/json
{
"code": "USD",
"code_in": "D&D",
"description": "Dolar Americano/D&D Peça de ouro",
"bid": 2.2500,
"ask": 2.2500
}
HTTP Code Content-Type Body 201 application/json 422 application/json [{"ask":["The ask field is required."],"bid":["The bid field is required."],"code":["The code field is required."],"code_in":["The code in field is required."],"description":["The description field is required."]}]
GET /api/currency/{:code-:code_in} (Consulta cotação da moeda)
Consulta a cotação das moedas informadas na url.
name rule data type description code min:3, max:5, required (D&D) string Código da moeda - de lastro (padrão USD) code_in min:3, max:5, required (D&D) string Código da moeda
http://localhost:8000/currency/USD-D&D
HTTP Code Content-Type Body 200 application/json [{"code":"USD","code_in":"D&D","name":"Dólar Americano/D&D$ peça de ouro","high":"6.0708","low":"5.9935","varBid":"0.0064","pctChange":"0.11","bid":"6.0558","ask":"6.0568","timestamp":"1737118799","create_date":"2025-01-17 09:59:59"}] 500 application/json {"error": {"message": "Erro interno"}}
DELETE /api/currncy/{:code} (Deleta a Moeda e suas quotações)
Remove da base da aplicação todos os registros referente a moeda informada.
name rule data type description code min:3, required (D&D ou D&D-USD) string Código da moeda. Ou combinação de Codigos
http://localhost:8000/currency/D&D
http://localhost:8000/currency/D&D-USD
http://localhost:8000/currency/D&D-BRL
HTTP Code Content-Type Body 200 application/json {"from": "USD", "to": "D&D", "amount": 2.00, "change": 4.00} 422 application/json {"error": {"message": "Atributo x é obrigatório"}} 500 application/json {"error": {"message": "Erro interno"}}
GET /convert?from={:from}&to={:to}&amount={:amount} (Conversão de valores)
Converte o valor do parametro amount da moeda from para a moeda to. O valor informado vai ser convertido de acordo com a ultima cotação da :from-:to.
name rule data type description from min:3, max:5, required (D&D) string Código da moeda - de lastro (padrão USD) to min:3, max:5, required (D&D) string Código da moeda amount min:0, required flaot (10, 4) Valor para conversão
http://localhost:8000/convert?from=USD&to=D%26D&amount=2.00
HTTP Code Content-Type Body 200 application/json {"from": "USD", "to": "D&D", "amount": 2.00, "change": 4.00} 422 application/json {"error": {"message": "Atributo x é obrigatório"}} 500 application/json {"error": {"message": "Erro interno"}}