Um teste técnico com backend (Laravel), ambiente de desenvolvimento facilitado (Docker, Sail), requisições prontas e documentação impecável (Postman).
Código limpo, bem feito, bem documentado e performático! É tudo isso e mais um pouco.
O Onfly Rest foi desenvolvido como um teste técnico para a empresa Onfly, para concorrer à vaga de Desenvolvedor Pleno backend.
A proposta é uma API, seguindo a arquitetura REST, que deverá conter um CRUD simples de despesas relacionadas a um usuário.
E isso qualquer um faz. O diferencial do projeto, é que ele desenvolvido e pensado totalmente em: usar Design Patterns, seguir as boas práticas de Clean Code (SOLID, Object Calisthenics, etc.) e muito mais. Um outro foco do projeto foi fazer a documentação e a aplicação de comentários de forma organizada, tanto no código, quanto neste README que você está acessando, quanto em outros locais, como o Postman (documentação da API, requests prontos), etc.
Aqui está uma breve visão geral de alto nível da Tech Stack utilizada no projeto:
- Este projeto utiliza o framework Laravel. Laravel é um framework backend em PHP poderosíssimo que segue a arquitetura MVC, deixando o desenvolvedor livre do fardo de lidar com "pequenos detalhes" de uma aplicação.
- Como banco de dados, o projeto utiliza o MySQL, mas pode facilmente ser adaptado a outros RDBMS.
- Para os testes, é utilizado o PHPUnit, que já está incluido no Laravel.
- Para o versionamento, foi utilizado o CVS Git.
- Para o set-up no ambiente de desenvolvimento, foi utilizado o Docker com o Sail (já incluso no Laravel)
- Para o servidor de e-mail, foi utilizado o MailHog.
- Claramente, devido à necessidade de ferramentas de alto-nível, foi utilizado o Linux, com a distro Ubuntu.
- Para gerar documentação e ter uma Collection pronta para uso da API, foi utilizado o Postman.
- Primeiramente, instale o PHP 8^.
🐱💻 Se você estiver procurando por uma instalação via CLI, no Ubuntu por exemplo, você pode encontrar aqui.
- Baixe e instale, também, o Composer como gerenciador de dependências.
🐱💻 Como dito acima, se você procura algo mais específico e rápido para CLI, você pode encontrar um tutorial aqui.
- Acesse algum diretório de sua preferência e baixe o projeto, usando:
git clone https://github.com/gabriellaporte/onfly.git .
🎈 Se você tiver problemas com a autenticação do Github (o token), você pode ver um tutorial aqui.
- Agora que os arquivos foram devidamente baixados para o seu diretório, configure o seu arquivo .env com base no arquivo .env.example:
cp .env.example .env
- Instale todas as dependências e pacotes necessários para o projeto poder rodar:
composer update
- Gere uma chave (APP_KEY) no seu .env
php artisan key:generate
- Se você estiver no Linux, MacOS ou no WSL2 pelo Windows, você pode facilmente ligar o projeto utilizando:
sail up -d
⏳ Isto pode levar algum tempo para buildar as imagens, caso você não tenha usado o Docker antes. Não se preocupe, acabará antes que você perceba.
🤔 Note que, daqui em diante, comandos PHP serão substituídos por "sail" (
alias sail="./vendor/bin/sail"
) , porém se você não usar Docker, utilize "php" mesmo.
- Crie as tabelas e popule elas com as Seeds de factories do Laravel, usando migrations:
sail artisan migrate --seed
- Lembre-se de deixar um "worker" rodando para o envio de e-mail assíncrono 🚨
sail artisan queue:work
📩 Você pode acessar o envio de e-mails aqui, com o Docker/Sail. Ou sinta-se livre para configurar um novo em .env.
✅ Pronto! Agora você está pronto para usar o projeto na sua máquina com essas etapas simples.
O uso do Postman é extremamente encorajado, uma vez que a documentação e os recursos prontos estão disponíveis de modo fácil e rápido lá.
- Toda a documentação está disponível em https://documenter.getpostman.com/view/25007742/2s93K1pzYM, e você pode acessá-la para entender um pouco mais de como o sistema funciona.
- Clique aqui para baixar os recursos já pré-definidos e prontos no Postman. Importe o arquivo no seu cliente ou na web.
Se você tem alguma dúvida sobre o import/export no Postman, você pode consultar este guia.
Os scripts já estão devidamente configurados para setar os headers, token, ID de usuário, data atual, etc. de maneira automática. É só baixar e usar! 🚀
Os requisitos do projeto foram poucos, por ser uma API Rest bastante enxuta e com poucas necessidades. No entanto, o projeto teve o máximo de capricho e utilizou de ferramentas/técnicas como (clique nos links para ver o processo de desenvolvimento):
- Whimiscal para planejamento do schema de banco de dados;
- PHPUnit para testes unitários e de features (
sail artisan test
); - Trello para metodologia ágil Kanban;
- Clean Code e Clean Architecture (SOLID, Object Calisthenics, etc.);
- Design Patterns (Builder, Facade, Strategy, Repository, etc.);
- API Resources;
- Route Resources;
- Middlewares;
- Policies para ACL;
- Events e Listeners;
- Notifications;
- Queues;
- Exception Handlers;
- Traits;
- Form Requests;
- Providers (EventServiceProvider e RouteServiceProvider customizados)
- Muito mais... 🚀
❌ Alguns outros conceitos como Services, Factory, etc. poderiam ser aplicados, mas não houve a necessidade. Saiba um pouco mais de overengineering e o porquê de evitar a aplicação de alguns conceitos desnecessários.
🔎 Além do mais, na API, poderíamos ter usado filtros, paginação, ordenação (sort) etc. facilmente com pacotes como o Laravel Query Builder by Spatie; porém não foi informado como requisito no Teste Técnico.
Em primeiro lugar, a Deus. SDG! Em segundo lugar, à minha melhor amiga e amada noiva: Ana. Em terceiro lugar, à minha família e amigos. Todos me deram o devido suporte em cada etapa, incluindo todo o desenvolvimento deste Teste Técnico.
Também, aos funcionários da Onfly: por me "emprestarem" o seu precioso tempo em analisar esse projeto (agradecimentos especiais à Selena, que tão gentilmente me incluiu no processo).
💡 "O gênio é 1% de inspiração e 99% de transpiração" - Thomas Edison.