Assista o vídeo de demonstração.
Meu Guru Challenge é uma aplicação full-stack que utiliza ferramentas como NestJS, NextJS e Docker Compose, além de diversas bibliotecas para ganhar produtividade e aprimorar visualmente a experiência do usuário. Este documento fornece uma visão geral do projeto, bem como instruções detalhadas sobre como configurá-lo, executá-lo e contribuir para ele.
- Visão Geral
- Requisitos
- Instalação
- Estrutura do Projeto
- Testes
- Rotas da API
- Scripts
- Considerações finais
- Contribuição
Essa é uma aplicação moderna desenvolvida utilizando várias tecnologias de ponta para oferecer uma solução robusta e escalável. Ele é composto por um backend desenvolvido em NestJS e Prisma, um frontend em NextJS, oferencendo o melhor do react e o aprimorando, e Docker Compose para orquestração de contêineres, algumas bibliotecas interessantes foram usadas no frontend, sendo elas a useHookForm, tansteck query, shadcn e tailwind como as mais importantes, tendo também todas as rotas documentadas com o Swagger e foi realizado como um desafio técnico para a empresa Meu Guru.
Nessa aplicação, é possível criar uma conta, realizar login e acessar uma página de usuários cadastrados no banco de dados, onde usuários com papel de administrador, podem apagar e editar as informações contidas dos outros usuários, enquanto usuários comuns só conseguem visualizar os dados. Além disso, é possível filtrar por email e nome, diretamente do banco de dados.
Antes de começar, certifique-se de ter as seguintes ferramentas instaladas no seu ambiente:
- Docker
- Docker Compose
git clone [email protected]:danrlleimiranda/meu-guru-challenge.git
cd meu-guru-challenge
O arquivo .env é essencial para inicialização, basta modificar o nome de .env.example para .env e está pronto para ser utilizado com o docker-compose. Nesse mesmo arquivo possui instruções caso queira rodar a aplicação localmente sem o uso do docker, porém o foco aqui é utilizar o que há de melhor no docker.
npm run compose:up
docker exec -it app_backend sh
npm run seed
Obs: Ainda será necessário encontrar uma forma de fazer isso, assim que os containers forem orquestrados, pois não é possível fazer durante o build da imagem do backend, já que muitas vezes o container do postgres ainda não está disponível.
Para ter acesso a todas as funcionalidades, basta acessar com essa conta com acessos de administrador:
{
login: [email protected],
password: senhadificil
}
A partir da primeira inicialização, você pode iniciar apenas com:
docker-compose up
npm run compose:down
meu-guru/
│
├── backend/ # Código do backend NestJS
| ├── prisma/
│ ├── src/
│ │ ├── user/
│ │ ├── auth/
│ │ ├── exceptions/
│ │ ├── log/
│ │ ├── app.module.ts
│ │ ├── main.ts
│ ├── test/
│ ├── Dockerfile
│ └── package.json
│ └── package-lock.json
├── frontend/ # Código do frontend NextJS
│ ├── src/
│ │ ├── __tests__/
│ │ ├── __mocks__/
│ │ ├── api/
│ │ ├── app/
│ │ ├── components/
│ │ ├── lib/
│ ├── Dockerfile
│ └── package.json
│
├── package.json
├── package-lock.json
├── docker-compose.yml # Configuração do Docker Compose
└── README.md # Documentação do projeto
Para executar os testes, é necessário estar na pasta backend ou frontend, logo após basta executar:
npm run test
A rota está totalmente documentada e disponibilizada através do Swagger: http://localhost:3000/api#/.
Os principais scripts disponíveis no backend são:
build: Compila o projeto NestJS.
format: Formata o código usando Prettier.
start: Inicia o servidor NestJS.
start:dev: Inicia o servidor NestJS em modo de desenvolvimento com hot-reload.
start:debug: Inicia o servidor NestJS em modo de depuração com hot-reload.
start:prod: Inicia o servidor NestJS em modo de produção.
lint: Executa o lint do código usando ESLint.
test: Executa os testes unitários usando Jest.
test:watch: Executa os testes unitários em modo de observação.
seed: Executa o script de seed para popular o banco de dados.
Os principais scripts disponíveis no frontend são:
dev: Inicia o servidor de desenvolvimento Next.js na porta 3001.
build: Compila o projeto Next.js.
start: Inicia o servidor Next.js em modo de produção.
lint: Executa o lint do código usando ESLint.
test: Executa os testes e logo após finaliza.
test:watch: Executa os testes e continua escutando novas mudanças.
Este projeto ainda tem muitas oportunidades de expansão e aprimoramento. Há várias funcionalidades que podem ser adicionadas, como o gerenciamento eficiente de filas para lidar com múltiplas requisições de um único usuário, assim como requisições simultâneas de diversos usuários.
Além disso, os testes podem ser refinados para serem mais específicos e assertivos, garantindo uma maior cobertura e confiabilidade do sistema. A autenticação e autorização implementadas atualmente são básicas, o que abre espaço para a adição de sessões e cookies para um armazenamento seguro e eficiente dos dados de acesso dos usuários.
Desenvolver esta API foi uma experiência extremamente enriquecedora. Enfrentei alguns desafios ao longo do caminho, mas cada obstáculo superado proporcionou um grande aprendizado. Estou satisfeito com o resultado final e ansioso para continuar aprimorando minhas habilidades, fazendo parte da equipe Meu Guru.
Alguns pontos importantes a serem considerados incluem a atual cobertura limitada de testes. Enfrentei desafios ao testar a aplicação, especialmente devido à escolha do Axios para gerenciar requisições, que revelou ser mais complexo do que o esperado quando integrado ao Jest. Esse aprendizado destacou a necessidade de aprofundar meus conhecimentos em testes automatizados, particularmente no contexto do Next.js.
Além disso, ainda há funcionalidades a serem implementadas. Por exemplo, a capacidade para administradores criarem novos usuários está pendente; atualmente, o sistema só permite a edição e exclusão de usuários existentes, porém essa rota de criação já está implementada e pronta para ser utilizada.
Faça um fork do repositório. Crie uma branch para sua feature:
git checkout -b feature/nova-feature
Commit suas alterações:
git commit -m 'Adiciona nova feature'
Envie para o repositório remoto:
git push origin feature/nova-feature
Abra um Pull Request.