- Sobre
- Requisitos
- Docker Setup
- Setup
- Setup de Sincronização
- Funcionamento
- Comandos do Composer
- Estrutura do Projeto
- Endpoints
- Teste de Estresse
- Informações Adicionais
Este projeto foi criado através do desafio proposto pelo hurb, seu objetivo é fazer conversão monetária entre duas moedas.
Moedas iniciais suportadas:
- USD
- BRL
- EUR
- BTC
- ETH
- PHP 7.3 ou mais recente
- php-curl extension
- php-sqlite extension
- composer
- docker-compose (caso use container)
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
Dê as permissões necessárias no banco criado, para que o apache possa escrever:
chmod 666 database/hurb-challenge.db
Configure o arquivo .env com base no .env.example (opcional).
A aplicação estará disponível no endereço: http://localhost:8000.
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.
Crie um cron para sincronizar as taxas de câmbio de tempos em tempos:
crontab -e
Configure um cron de hora em hora no editor:
0 * * * * cd /caminho/do/projeto && docker-compose exec webserver composer sync
0 * * * * cd /caminho/do/projeto && composer sync >/dev/null 2>&1
Dependendo das configurações, será necessário definir o caminho completo dos comandos.
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/currencies?from=USD&to=BRL&amount=30'
Requisição para obter um token de acesso que permite usar as rotas para adicionar e remover moedas:
- username: usuário cadastrado no banco (padrão do .env.example é: admin).
- password: senha do usuário (padrão do .env.example é: HuRbCh4113ng3#bR4v0).
OBS.: Se alguma dessas informações for mudada no .env, será necessário mudar na requisição também.
curl 'http://localhost:8000/login' -d 'username=admin&password=HuRbCh4113ng3#bR4v0'
Requisição para adicionar moeda:
- currency: 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/currencies' -X 'POST' -d 'currency=CAD&usd_value=1.26' -H 'Authorization: Bearer {token}'
Requisição para remover moeda:
- {currency}: Código da moeda a ser removida.
- {token}: Token gerado no endpoint /login.
curl 'http://localhost:8000/currencies/{currency}' -X 'DELETE' -H 'Authorization: Bearer {token}'
Rodar testes:
composer tests
Iniciar projeto utilizando php-cli:
composer start
Configurar/Limpar banco:
composer migrate
Sincronizar taxas de câmbio:
composer sync
Iniciar container:
composer docker
├── database - Arquivos de banco de dados.
│ ├── migrations - Scripts para criar as tabelas do banco de dados.
│ └── seeds - Scripts para criar registros iniciais no banco de dados.
│
├── docker-compose - Arquivos de configuração do container.
│ └── apache2 - Arquivos de configuração do apache2.
│
├── public - Pasta pública.
│ └── docs - Arquivos com a documentação da API.
│
├── src - Arquivos do sistema.
│ ├── Controllers - Controladores do sistema.
│ ├── Models - Modelos do sistema.
│ ├── Repositories - Repositórios do sistema.
│ ├── routes - Rotas do sistema.
│ └── Services - Classes de serviços para auxiliar na lógica extra.
│
├── sync - Arquivos de sincronização.
|
├── tests - Testes do sistema.
│ ├── API - Testes dos endpoints da API.
│ └── Unit - Testes unitários com componentes do sistema.
(doc)GET / (HTML)
POST /login
GET /currencies
POST /currencies
DELETE /currencies/{currency}