rspindola / challenge-bravo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

HU Desafio Bravo

wakatime

Indíce

Sobre

Construa uma API, que responda JSON, para conversão monetária. Ela deve ter uma moeda de lastro (USD) e fazer conversões entre diferentes moedas com cotações de verdade e atuais.

A API deve, originalmente, converter entre as seguintes moedas:

  • USD
  • BRL
  • EUR
  • BTC
  • ETH

Requisitos

  • PHP >= 7.3
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • php-curl extension
  • php-sqlite extension
  • Mbstring PHP Extension
  • composer
  • docker-compose (caso use container)

Docker Setup

Configure o arquivo .env seguindo as configurações do .env.example (para funcionar, basta copiar e colar o conteúdo).

Suba o container:

composer docker

Instale as dependências e gere o banco inicial:

docker-compose run webserver composer install && composer migrate

Configure o arquivo .env com base no .env.example (opcional).

A aplicação estará disponível no endereço: http://localhost:8000.

Setup

Instale as dependências:

composer install

Configure o arquivo .env: *

nano .env

*Se o arquivo não for criado automaticamente depois do composer install, faça uma cópia do .env.example.

Rode as migrations e seeds:

composer migrate

Inicie a aplicação:

composer start

A aplicação estará disponível no endereço: http://localhost:8000.

Funcionamento

Converter Moeda

Requisição para realizar a conversão entre 2 moedas:

  • from: Moeda de origem.
  • to: Moeda para qual o valor será convertido.
  • amount: Valor da moeda de origem que será convertido.
curl 'http://localhost:8000/api/currencies?from=BTC&to=EUR&amount=123.45'

Login

Requisição para obter um token de acesso que permite usar as rotas para adicionar e remover moedas:

  • email: usuário cadastrado no banco (padrão do .env.example é: admin@hurbchallenge.com).
  • password: senha do usuário (padrão do .env.example é: secret123).

OBS.: Se alguma dessas informações for mudada no .env, será necessário mudar na requisição também.

curl 'http://localhost:8000/api/auth/login' -d 'email=admin@hurbchallenge.com&password=secret123'

Adicionar Moeda

Requisição para adicionar moeda:

  • name: Moeda a ser adicionada.
  • usd_value: Valor da moeda equivalente a 1 dólar americano (USD).
  • {token}: Token gerado no endpoint /login.
curl 'http://localhost:8000/api/currencies' -X 'POST' -d 'currency=CAD&usd_value=1.26' -H 'Authorization: Bearer {token}'

Remover Moeda

Requisição para remover moeda:

  • {currency}: Código da moeda a ser removida.
  • {token}: Token gerado no endpoint /login.
curl 'http://localhost:8000/api/currencies/{currency}' -X 'DELETE' -H 'Authorization: Bearer {token}'

Comandos do Composer

Rodar testes:

composer tests

Iniciar projeto utilizando php-cli:

composer start

Configurar/Limpar banco:

composer migrate:fresh --seed

Iniciar container:

composer docker

Estrutura do Projeto

Os arquivos mencionados foram os que eu criei ou manipulei no framework:

├── app - Contém o código-fonte principal do projeto.
│   ├── Http - Scripts para criar as tabelas do banco de dados.
│   ├──── Controllers - Controladores do sistema.
│   ├────── AuthController - Controlador de autenticação.
│   ├────── CurrencyController - Controlador de cotações.
│   │
│   ├──── Models - Modelos do sistema.
│   ├────── User - Modelo de autenticação.
│   ├────── Currency - Modelo de cotações.
│   │
│   ├──── Repositories - Repositórios do sistema.
│   ├────── AuthRepository - Repositório de autenticação.
│   ├────── CurrencyRepository - Repositório de cotações.
│   │
│   ├──── Services - Classes de serviços para auxiliar na lógica extra.
│   └────── CurrencyService - Validações na logica de cotações.
│
├── bootstrap - A instância $app principal do projeto.
│   └── app - Configurações do projeto.
│
├── database - Arquivos do banco de dados.
│   ├── factories - Factories para incluir dados ao realizar testes.
│   ├── migrations - Migrations para criação de tabelas no banco.
│   └── seeders - Seeders para popular o banco na instação do projeto.
│
├── routes - Arquivos de rota.
│   └── web - Rotas da API.
│
├── docker-compose - Arquivos de configuração do container.
│   └── apache2 - Arquivos de configuração do apache2.
|
├── tests - Testes do sistema.
│   ├── Feature - Testes dos endpoints da API.
│

Endpoints

POST /login
GET /currencies
POST /currencies
DELETE /currencies/{currency}

Teste de Estresse

stress test

Informações adicionais

O sistema de autenticação está usando JWT (Json Web Token), os tokens são gerados na rota /api/auth/login.


About


Languages

Language:PHP 98.1%Language:Dockerfile 1.1%Language:Shell 0.8%