Skip to content

danrlleimiranda/meu-guru-challenge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Logo Meu Guru

Meu Guru

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.

Sumário 📚

  1. Visão Geral
  2. Requisitos
  3. Instalação
  4. Estrutura do Projeto
  5. Testes
  6. Rotas da API
  7. Scripts
  8. Considerações finais
  9. Contribuição

Visão Geral

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.

Requisitos

Antes de começar, certifique-se de ter as seguintes ferramentas instaladas no seu ambiente:

  • Docker
  • Docker Compose

Instalação

Clonando o Repositório

git clone [email protected]:danrlleimiranda/meu-guru-challenge.git
cd meu-guru-challenge

Iniciando o projeto

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

Realizando as migrations e populando o banco de dados.

docker exec -it app_backend sh
Uma vez dentro do container docker:
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.

Utilizando a aplicação.

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

Parando execução.

npm run compose:down

Estrutura do Projeto

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

Testes

Para executar os testes, é necessário estar na pasta backend ou frontend, logo após basta executar:

 npm run test

Rotas da API

A rota está totalmente documentada e disponibilizada através do Swagger: http://localhost:3000/api#/.

Scripts

Backend Scripts

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.

Frontend Scripts

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.

Considerações finais.

Backend

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.

Frontend

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.

Contribuição

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.

Espero que tenham gostado, estou aberto para feedbacks!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages