Este projeto é constituído por uma API (pasta backend) feita com Typescript, NodeJs, Express, MongoDb e Mongoose, o qual busca, cadastra, altera e deleta dados dos funcionários, e pelo frontend da aplicação (pasta frontend), feito com Typescript, NextJs e ChakraUi, o qual apresenta uma tabela ao usuário com as informações dos funcionários, com opções para adicionar, editar ou remover algum funcionário.
- Clone o projeto
git clone https://github.com/Igormazetti/Teste-RBR-digital.git
- Ou clone o projeto com SSH
git clone git@github.com:Igormazetti/Teste-RBR-digital.git
- Abra um terminal mo projeto e navegue até a pasta backend
cd backend
, ou clique com o botão direito em cima da pasta "backend" e selecione "Abrir no terminal Integrado" - Rode
yarn
ounpm i
para instalar os pacotes do projeto. - Rode
yarn dev
ounpm run dev
- Pronto 🎉
- Abra um terminal mo projeto e navegue até a pasta frontend
cd frontend
, ou clique com o botão direito em cima da pasta "frontend" e selecione "Abrir no terminal Integrado" - Rode
yarn
ounpm i
para instalar os pacotes do projeto. - Rode
yarn dev
ounpm run dev
- Pronto 🎉
./src
: Pasta contendo o principal conteúdo do projeto;./.eslintrc.json
: Arquivo contendo as configurações o es-lint;./.prettierrc
: Arquivo contendo as configurações do Prettier;./src/common
: Pasta para incluir serviços que podem ser utilizados pela aplicação toda;./src/common/error/CustomError.ts
: Serviço de captura de erro, utilizado para retornar os erros de forma simples. Este serviço recebe dois parâmetros, uma função e um código http, exemplo:throw new CustomError('Funcionário já cadastrado!', 422);
;./src/middleware
: Pasta que contém os middlewares utilizados na aplicação. No caso em tela utilizei somente um middleware de interceptação de erro, para que o CustomError seja utilizado na aplicação corretamente;./src/app.ts
: Arquivo com a configuração do express e conexão com o banco de dados MongoDB, utilizando mongoose../src/server.ts
: Arquivo que configura a porta e inicia o servidor. Não foram utilizadas variáveis de ambiente no projeto../src/modules
: Pasta que contém módulos de cada entidade existente no banco de dados. Cada módulo possui as camadas "models" que cria o schema daquela entidade no banco de dados, "repositories" que realiza as chamadas ao banco de dados, "services" que trata as regras de negócio e lida com caso de erros, "controllers" que são responsáveis por receber as requisições HTTP e retornar o resultado na requisição, e por fim "routes" onde são definidas as rotas e seus respectivos controllers.
./app
: É a pasta onde ficam guardadas as páginas principais do projeto;./app/page.tsx
: É a página principal do projeto, qual utiliza React-Query e Axios para buscar os dados dos funcionários e renderizá-los no componente de tabela;./app/layout.tsx
: É o arquivo do Next.js define a estrutura básica, estilos globais e metadados aplicados a todas as páginas do aplicativo, garantindo consistência visual e funcional;./app/providers.tsx
: É o arquivo onde coloco todos os providers da aplicação, para depois no arquivo layout, somente utilizar a tag<Providers>
em volta da minha aplicação, deixando o código mais limpo;./app/employees/[...actions]
: É a pasta contendo a página de adição e editão de funcionários;./app/employees/[...actions]/page.tsx
: É a página para adicionar ou editar funcionários, ela funciona via server side, o que garante uma melhor performance ao código. A página valida os parâmetros da rota, caso seja "edit", ela irá buscar os dados do funcionário pelo id passado também nos parâmetros da rota, e renderizar o componente<EmployeesForm
com os dados da requisição;./app/employees/[...actions]/components/EmployeesForm.tsx
: Componente contendo o formulário dos funcionários, que de acordo com a ação indicada nos parâmetros da rota será um formulário para adicionar ou editar um funcionário. Caso seja editar, o formulário iniciará com os dados do funcionário preenchidos;./libs/react-query/queryClient.ts
: Arquivo que instancia o react-query para utilizar no projeto;./components
: Pasta para armazenar componentes que podem ser reutilizados no projeto;<ButtonComponent>
: A ideia do componente de botão é tematizar melhor o projeto, para que ele possa servir como um adapter para qualquer padronização de design;<Dialog>
: Componente de Modal que visa padronizar os tipos de modais que possam existir no projeto;<EmployeesCard
: Componente de display dos dados de cada funcionário, somente renderizados no tamanho mobile, o qual deve receber como parãmetro as propriedades: "employee", "handleEdit" e "handleDelete", sendo a primeira os dados do funcionário daquele card, a segunda a função de editar o funcionário e por fim a função de excluir;<EmployeesTable
: Componente de tabela que recebe como props "employees", sendo um array de dados dos funcionários, e "refetch", sendo uma função para atualizar a requisição dos dados. Neste componente contém a função 'handleRemoveEmployee' que realiza a deleção de um funcionário. Além disso, contém um input de busca que filtra os dados na tabela de acordo com o que foi digitado. Por fim, o campo "Nome" na tabela, funciona como uma ordenação em ordem alfabética ao clicar;./utils
: Pasta contendo arquivos que podem ser utilizados na aplicação, tais como funções para formatar datas.