Skip to content

Projeto técnico para vaga de desenvolvedor na Onfly

Notifications You must be signed in to change notification settings

gabriellaporte/onfly

Repository files navigation

cgapp logo
Onfly Rest | API Rest

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.




☄ Filosofia do projeto

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.


💻 Tech Stack


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.

⚡️ Como Instalar


🐱‍💻 Se você estiver procurando por uma instalação via CLI, no Ubuntu por exemplo, você pode encontrar aqui.

🐱‍💻 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.


📃 Documentação e API


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á.

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! 🚀


👋 Considerações Finais


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.


💙 Agradecimentos


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.

About

Projeto técnico para vaga de desenvolvedor na Onfly

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published