- Introdução
- Tecnologias utilizadas
- Como rodar o projeto
- Conceitos
- Instalação
- Pré-requisitos.
- Imagens utilizadas neste projeto
- Clonando o projeto
- Estrutura do projeto
- Comandos do make
- Executando a aplicação e rodando o dump do banco de dados do desafio de busca
- Executando a aplicação com banco de dados padrão
- Verificando os logs da aplicação
- Acessando a aplicação no navegador
- Parando a aplicação e limpando os serviços
- A API de busca
- Endpoints
- Parâmetros de URL
- Comandos do docker
- Instalando pacotes com composer
- Atualizando dependências PHP com composer
- Gerando documentações com PHPDOC
- Testando a aplicação com o phpunit
- Ajustando o código-fonte com o padrão da PSR2
- Analisando o código-fonte com PHPCS
- Analisando o código-fonte com PHPMD
- Verificando as extensões do PHP instaladas
- Manipulando o banco de dados
- Acesso ao MySQL
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.
- 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)
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
- Acessando como admin
- email: admin@test.com.br
- senha: admin
- Acessando como cliente
- email: cliente@test.com.br
- senha: cliente
- Acessando como admin
docker exec -i ID_DO_CONTAINER mysql -uroot -proot < data/db/dumps/selene.sql
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;
- 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.
- 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.
Antes de instalar o projeto, certifique-se de possuir os seguintes pré-requisitos.
Os seguintes requisitos devem estar instalados em sua máquina:
As seguintes portas são utilizadas neste projeto:
Server | Port |
---|---|
MySQL | 8989 |
MongoDB | 27017 |
PHPMyAdmin | 8080 |
Nginx | 8000 |
Nginx SSL | 3000 |
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
├── 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
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:
make start-with-db
make start
```sh
make logs
```
- http://localhost:8000
- https://localhost:3000
- http://localhost:8080 PHPMyAdmin (username: dev, password: dev)
make stop # Talvez você tenha que rodar este comando usando o sudo
docker run --rm -v $(pwd)/web/app:/app composer require symfony/dotenv
docker run --rm -v $(pwd)/web/app:/app composer update
docker run --rm -v $(pwd):/data phpdoc/phpdoc -i=vendor/ -d /data/web/app/src -t /data/web/app/doc
docker-compose exec -T php ./app/vendor/bin/phpunit --colors=always --configuration ./app
docker-compose exec -T php ./app/vendor/bin/phpcbf -v --standard=PSR2 ./app/src
docker-compose exec -T php ./app/vendor/bin/phpcs -v --standard=PSR2 ./app/src
docker-compose exec -T php ./app/vendor/bin/phpmd ./app/src text cleancode,codesize,controversial,design,naming,unusedcode
docker-compose exec php php -m
docker exec -it mysql bash
e
mysql -u "$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD"
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"
source .env && docker exec -i $(docker-compose ps -q mysqldb) mysql -u "$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" < "data/db/dumps/db.sql"
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"
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"