Deverá ser criado um sistema simples, totalmente desenvolvido em PHP, onde será possível Criar/Editar/Excluir/Listar usuários. O sistema também deve possuir a possibilidade de associar um perfil (role) ao usuário.
Seguem os atributos para cada entidade:
- Nome;
- E-mail;
- Telefone;
- Data de Nascimento;
- Cargo;
- Salário;
- Foto.
- Nome do perfil
- Descrição
A foto será um upload na parte de cadastro de usuário, que aparecerá na tela de cadastro/edição, e na listagem a foto deverá ser exibida;
- Dever ter alguma alguma dependência via composer;
- Passar no php code sniffer com PSR-2: Coding Style Guide;
- Teste unitário de pelo menos 3 funções;
- Deploy em um repositório do github ou do bitbucket.
Você poderá utilizar qualquer framework para desenvolver o projeto, lembrando que a arquitetura utilizada, você deverá defendê-la pessoalmente na nossa entrevista (caso passe no teste).
O deadline será até 25/06 (terça-feira), e qualquer dúvida pode enviada respondendo este email.
O projeto utiliza Docker e Docker Compose para criação do ambiente de desenvolvimento, caso não tenha instalado, segue o link para instalação:
Observação: A configuração do docker-compose.yml foi configurado para ser executado em uma máquina linux, caso use Windows, talvez tenha que fazer alguns ajustes.
docker-compose up --build -d
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28d6118b1b6a crud_php "docker-php-entrypoi…" 39 hours ago Up 15 minutes 0.0.0.0:80->80/tcp, 9000/tcp constanceteste_php_1
Startar um servidor MySQL de sua preferencia e configurar os dados de conexão no arquivo docker-compose.yml
- DB_CONNECTION=mysql
- DB_HOST=servidor_mysql
- DB_PORT=3306
- DB_DATABASE=projeto
- DB_USERNAME=root
- DB_PASSWORD=yakTLS&70c52
- NEW_RELIC_LICENCE=Licença-aqui
docker exec -it constanceteste_php_1 sh /home/deploy.sh
A saída do comando acima será algo semelhante:
✈︎ Deploying master on localhost
✔ Executing task deploy:prepare
✔ Executing task deploy:lock
✔ Executing task deploy:release
✔ Executing task deploy:update_code
✔ Executing task deploy:shared
✔ Executing task deploy:vendors
✔ Executing task deploy:writable
✔ Executing task artisan:storage:link
✔ Executing task artisan:view:cache
✔ Executing task artisan:config:cache
✔ Executing task artisan:optimize
✔ Executing task artisan:migrate
✔ Executing task deploy:symlink
✔ Executing task deploy:unlock
✔ Executing task cleanup
Successfully deployed!
docker exec -it constanceteste_php_1 sh /home/rollback.sh
A saída do comando acima será algo semelhante:
➤ Executing task rollback
rollback to 1 release was <success>successful</success>
✔ Ok
http://projeto.local
Foi atendida usando a biblioteca: http://image.intervention.io/getting_started/installation ("intervention/image": "2.4")
Para validar se os controllers e a Trait estão dentro dentro das definições da psr2, deve-se executar os seguintes comandos:
php ~/phpcs.phar --standard=PSR2 app/Http/Controllers/ProfileController.php
php ~/phpcs.phar --standard=PSR2 app/Http/Controllers/UserController.php
php ~/phpcs.phar --standard=PSR2 app/Http/Traits/PhotoManipulation.php
php ~/phpcs.phar --standard=PSR2 app/Http/Requests/Profiles/StoreRequest.php
php ~/phpcs.phar --standard=PSR2 app/Http/Requests/Profiles/UpdateRequest.php
php ~/phpcs.phar --standard=PSR2 app/Http/Requests/Users/StoreRequest.php
php ~/phpcs.phar --standard=PSR2 app/Http/Requests/Users/UpdateRequest.php
php ~/phpcs.phar --standard=PSR2 app/Models/ApplicationModel.php
php ~/phpcs.phar --standard=PSR2 app/Models/Profile.php
php ~/phpcs.phar --standard=PSR2 app/Models/User.php
A saída dos comandos acima deverá ser:
root@28d6118b1b6a:/var/www/html# php phpcs.phar --standard=PSR2 app/Http/Controllers/ProfileController.php
root@28d6118b1b6a:/var/www/html# php phpcs.phar --standard=PSR2 app/Http/Controllers/UserController.php
root@28d6118b1b6a:/var/www/html# php phpcs.phar --standard=PSR2 app/Http/Traits/PhotoManipulation.php
root@0ae994dfca31:/var/www/html# php phpcs.phar --standard=PSR2 app/Http/Requests/Profiles/StoreRequest.php
root@0ae994dfca31:/var/www/html# php phpcs.phar --standard=PSR2 app/Http/Requests/Profiles/UpdateRequest.php
root@0ae994dfca31:/var/www/html# php phpcs.phar --standard=PSR2 app/Http/Requests/Users/StoreRequest.php
root@0ae994dfca31:/var/www/html# php phpcs.phar --standard=PSR2 app/Http/Requests/Users/UpdateRequest.php
root@0ae994dfca31:/var/www/html# php phpcs.phar --standard=PSR2 app/Models/ApplicationModel.php
root@0ae994dfca31:/var/www/html# php phpcs.phar --standard=PSR2 app/Models/Profile.php
root@0ae994dfca31:/var/www/html# php phpcs.phar --standard=PSR2 app/Models/User.php
Foi atendido implementado a classe de teste que se encontra em tests/Unit/PhotoManipulationTest.php.
Para executar o teste, execute o comando ./vendor/bin/phpunit
dentro do container PHP
A saída do comando acima deverá ser:
root@28d6118b1b6a:/var/www/html# ./vendor/bin/phpunit
PHPUnit 6.5.14 by Sebastian Bergmann and contributors.
........ 8 / 8 (100%)
Time: 530 ms, Memory: 16.00MB
OK (8 tests, 8 assertions)
Foi atendido com código versionado no GitHub: https://github.com/tayron/constance-teste