Docker e docker-compose instalados.
Para permitir persitência de dados do mysql ao subir e derrubar os container é necessário criar uma pasta vazia.
Crie o diretório mysql-data na raíz do projeto.
Em seguida, também na raíz do projeto executar:
docker-compose up --build
Nao raiz do projeto executar composer install
Copiar arquivo .env.example para .env
Existe um comando customizado para criar o banco de dados inicial: php artisan db:create que pega as informações do .env e cria o banco.
Executar php artisan migrate:fresh --seed
Executar na raíz do projeto:
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache
Referência: https://laracasts.com/discuss/channels/general-discussion/laravel-framework-file-permission-security
Para autenticação foi utilizado o Passport , biblioteca mantida pela equipe do laravel.
Nas migrations suas tabelas base serão criadas. Após isso basta executar:
php artisan passport:install
Onde a saída irá gerar duas chaves, que deverão ser guardadas e usadas na requisição de autenticação.
client_id e client_secret do item Password grant
Exexplo:
` php artisan passport:install
Encryption keys generated successfully.
Personal access client created successfully.
Client ID: 1
Client secret: sT7ordadNmPz34pc5XQBygmP9oPkHYHSONNTZAKG
Password grant client created successfully.
Client ID: 2
Client secret: xyhLnUVx9kBUCH4sZ0tqNk2OxEjx0DPUTB8yFKld `
Para facilitar o comsumo da API , existe um arquivo de collections do Postman na pasta postman do projeto.
Referência: https://learning.postman.com/docs/postman/collection-runs/working-with-data-files/
A API permite criar usuários , mas já contém 1 padrão para testes.
username: loxas@loxas.com.br
password: 123mudar!@
http://localhost:8080/ deve mostrar a página de instalação do laravel se tudo ocorreu corretamente.
https://laravel.com/docs/5.8/passport
https://github.com/spatie/laravel-query-builder
https://github.com/spatie/laravel-json-api-paginate
Seeds (criar baseado no banco): https://github.com/orangehill/iseed
Migrations (criar baseado no banco) : https://github.com/Xethron/migrations-generator
Adotei uma solução própria para criar esta feature.
Acredito que atendi os requistos solicitados mas ainda gostaria de implementar algumas melhorias. A autenticação é a mesma para as duas versões da API e seria interessante uma api_key para isolar os acessos.
Há 25 anos no mercado, a Veus Technology é uma empresa brasileira ligada ao segmento de saúde com foco na inovação tecnológica. É responsável por vários projetos pioneiros e estratégicos na área laboratorial, médica e recentemente hospitalar.
Você deve implementar uma API utilizando PHP > 7.0. Nós recomendamos que você tente manter o seu códgo o mais simples possível utilizando os frameworks Laravel, Lumen ou Synfony. Se você precisar de qualquer informação adicional ou esclarecimento, você pode nos contatar pelo e-mail: sistemas@veus.com.br.
Vamos imaginar que a sua empresa possua um e-commerce e venda alguns produtos para laboratórios e hospitais...
Sua tarefa é desenvolver um CRUD de Produtos e implementar um serviço de buscas desses produtos. Um produto possui nome, marca, preço e quantidade em estoque. A API deve requerer autenticação e permitir search query através do método GET e suportar filtros opcionais nos campos do produto.
Por exemplo: Um cliente deve conseguir buscar todas as seringas da marca BUNZL fazendo a seguinte requisição:
https://example.com/api/v1/products?q=seringa&filter=brand:BUNZL
A API também deve suportar pagination, versioning e sorting.
Sinta-se livre para usar qualquer library ou framework da sua preferência mas a regra de negócio deve estar o mais desaclopada possível deles.
Por favor, não se esqueça de providenciar uma pequena documentação de como levantar e testar o seu projeto.
Bônus:
- Docker
- Unit Test
- User Interface
Você será avaliado de acordo com a senioridade da posição a qual está aplicando. Ao finalizar o desafio você deve submeter o Pull Request com o seu código para a avaliação, após isso nos entrarem em contato com você através do e-mail passando um feedback do seu projeto.