Skip to content

Este repositório provê uma aplicação cliente, onde é possível realizar as ações de conversão de moeda, visualizar histórico de conversões, etc. O repositório provê também uma API para busca das cotações de moedas para conversão.

Notifications You must be signed in to change notification settings

ovalves/currency-converter

Repository files navigation

Desafio de Conversão Monetária


Introdução

Este repositório provê uma aplicação cliente, onde é possível realizar as ações de conversão de moeda, visualizar histório de conversões, etc. O repositório provê também uma API para busca das cotações de moedas para conversão.


Tecnologias utilizadas

  • PHP 8.1
  • Framework PHP Selene.
  • Mysql
    • Guarda os dados de criação de usuários
    • Guarda os dados de sessão
  • MongoDB
    • Guarda os dados das conversões realizadas
    • Guarda o histórico das conversões
    • Guarda as taxas aplicadas nas conversões
    • Guarda os códigos das moedas para a realização das conversões
  • nginx
  • PHP-FPM
  • Docker
  • HTML5
  • CSS3
  • Javascript (Jquery)

Como rodar o projeto

PS.: Utilize os comando do Make para rodar o projeto mais facilmente

  • Copie o arquivo .env.example para .env
  • Use o comando make start-with-db no seu terminal
    • Este comando irá criar a base de dados do mysql e irá subir todos os serviços do docker
  • Crie as collections (currency_codes, payment e tax) do MongoDB. As collections estão localizadas em data/mongo-collections
  • Acesse o projeto no seu navegador http://localhost:8000

Para rodar o dump do mysql sem usar o makefile

docker exec -i ID_DO_CONTAINER mysql -uroot -proot < data/db/dumps/selene.sql

Conceitos

Como definição para a resolução do problema de conversão monetária. Temos:

  • Deve ser possível escolher uma moeda estrangeira entre pelo menos 2 opções
  • O seu valor de compra deve ser maior que R$ 1.000 e menor que R$ 100.000,00
  • Deve ter formas de pagamento em boleto ou cartão de crédito
  • Deve exibir no final da operação: O valor que será adquirido na moeda de destino e as taxas aplicadas;

Regras do desafio

Usabilidade

  • Usuário deve informar 3 informações em tela
  • moeda de destino
  • valor para conversão
  • forma de pagamento.
  • A nossa moeda nacional BRL será usada como moeda base na conversão.

Regras de négocio

  • Moeda de origem BRL;
  • Informar uma moeda de compra que não seja BRL (exibir no mínimo 2 opções);
  • Valor da Compra em BRL (deve ser maior que R$ 1.000,00 e menor que R$ 100.000,00)
  • Formas de pagamento (taxas aplicadas no valor da compra e aceitar apenas as opções abaixo)
    • Para pagamentos em boleto, taxa de 1,45%
    • Para pagamentos em cartão de crédito, taxa de 7,63%
  • Aplicar taxa de 2% pela conversão para valores abaixo de R$ 3.000,00 e 1% para valores maiores que R$ 3.000,00, essa taxa deve ser aplicada apenas no valor da compra e não sobre o valor já com a taxa de forma de pagamento.

Instalação

Antes de instalar o projeto, certifique-se de possuir os seguintes pré-requisitos.

Pré-requisitos.

Os seguintes requisitos devem estar instalados em sua máquina:


Imagens utilizadas neste projeto

As seguintes portas são utilizadas neste projeto:

Server Port
MySQL 8989
MongoDB 27017
PHPMyAdmin 8080
Nginx 8000
Nginx SSL 3000

Clonando o projeto

O código do repositório será baixado do GitHub.

Acesse Git, faça o download e instale seguindo as instruções:

git clone git@github.com:ovalves/selene-project-a.git

Acesse o diretório do projeto:

cd selene-project-a

Estrutura do projeto

├── data
│   ├── db
│   │   ├── dumps
│   │   └── mysql
│   └── mongo-collections
├── etc
│   ├── nginx
│   │   ├── default.conf
│   │   └── default.template.conf
│   ├── php
│   │   └── php.ini
│   └── ssl
├── storage
│   └── logs
├── web
│   ├── app
│   │   ├── composer.json
│   │   ├── phpunit.xml
│   │   ├── .php-cs-fixer.php
│   │   ├── src
│   │   │   ├── Actions
│   │   │   ├── Config
│   │   │   ├── Controllers
│   │   │   ├── Events
│   │   │   ├── Exceptions
│   │   │   ├── Gateway
│   │   │   ├── Mails
│   │   │   ├── Models
│   │   │   ├── Notifications
│   │   │   ├── Services
│   │   │   └── Storage
│   │   │   └── Tasks
│   │   │   └── Tests
│   │   │   └── Traits
│   │   └── tests
│   │       └── Api
│   ├── conf
│   │   └── .env
│   └── public
│       ├── Views
│       └── index.php
├── docker-compose.yml
├── .php-cs-fixer.php
├── .editorconfig
├── .env
├── Makefile
└── README.md

Comandos do make

Os seguintes comandos estão disponíveis através do make:

Name Description
phpdoc Gerador de documentação de do código PHP
clean Rodar o Code Sniffer no código PHP (PSR2)
code-sniff Limpar os diretórios necessários para reiniciar os containers
composer-up Atualizar as dependências do PHP utilizando o composer
start Iniciar todos os serviços
stop Parar todos os serviços
logs Visualizar os logs dos serviços
mysql-dump Criar backup de todos os bancos de dados
mysql-restore Restaurar o backup de todos os bancos de dados
phpmd Rodar o PHP Mess Detector no código PHP
test Rodar os testes da aplicação

Executando a aplicação e rodando o dump do banco de dados do desafio

Executando a aplicação:

make start-with-db

Executando a aplicação com banco de dados padrão

make start

Verificando os logs da aplicação

```sh
make logs
```

Acessando a aplicação no navegador


Parando a aplicação e limpando os serviços

make stop # Talvez você tenha que rodar este comando usando o sudo

Comandos do docker

Instalando pacotes com composer

docker run --rm -v $(pwd)/web/app:/app composer require symfony/dotenv

Atualizando dependências PHP com composer

docker run --rm -v $(pwd)/web/app:/app composer update

Gerando documentações com PHPDOC

docker run --rm -v $(pwd):/data phpdoc/phpdoc -i=vendor/ -d /data/web/app/src -t /data/web/app/doc

Testando a aplicação com o phpunit

docker-compose exec -T php ./app/vendor/bin/phpunit --colors=always --configuration ./app

Ajustando o código-fonte com o padrão da PSR2

docker-compose exec -T php ./app/vendor/bin/phpcbf -v --standard=PSR2 ./app/src

Analisando o código-fonte com PHPCS

docker-compose exec -T php ./app/vendor/bin/phpcs -v --standard=PSR2 ./app/src

Analisando o código-fonte com PHPMD

docker-compose exec -T php ./app/vendor/bin/phpmd ./app/src text cleancode,codesize,controversial,design,naming,unusedcode

Verificando as extensões do PHP instaladas

docker-compose exec php php -m

Manipulando o banco de dados

Acesso ao MySQL

docker exec -it mysql bash

e

mysql -u "$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD"

Criando um backup de todos os bancos de dados

mkdir -p data/db/dumps
source .env && docker exec $(docker-compose ps -q mysqldb) mysqldump --all-databases -u "$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" > "data/db/dumps/db.sql"

Restaurando um backup de todos os bancos de dados

source .env && docker exec -i $(docker-compose ps -q mysqldb) mysql -u "$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" < "data/db/dumps/db.sql"

Criando um backup de um único banco de dados

source .env && docker exec $(docker-compose ps -q mysqldb) mysqldump -u "$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" --databases YOUR_DB_NAME > "data/db/dumps/YOUR_DB_NAME_dump.sql"

Restaurando um backup de um único banco de dados

source .env && docker exec -i $(docker-compose ps -q mysqldb) mysql -u "$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" < "data/db/dumps/YOUR_DB_NAME_dump.sql"

About

Este repositório provê uma aplicação cliente, onde é possível realizar as ações de conversão de moeda, visualizar histórico de conversões, etc. O repositório provê também uma API para busca das cotações de moedas para conversão.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published