Esse projeto foi desenvolvido como resposta ao teste técnico requisitado pela Allugator no seu processo seletivo. Decidi criar a API em NodeJS com Express e o Frontend com React.
Busquei organizar o backend de forma a permitir que fosse fácil de escalar e adicionar novas features.
Já no frontend, busquei fazer o melhor que pude no tempo disponibilizado. Meu objetivo era criar um layout bonito e eficiente que facilitasse o uso da aplicação.
-
NodeJS versão 12 ou maior - Você pode encontrar as informações e arquivos necessários para instalação nesse link.
-
Yarn - Com o NodeJS instalado, execute o seguinte comando no terminal para que o yarn seja instalado na sua máquina:
$ npm install -g yarn
-
Docker Caso ainda não tenha o Docker instalado na sua máquina, você pode seguir o seguinte tutorial para efetuar a instalação seguindo seu SO: Link
- Com todos os requisitos acima instalados, vamos criar um container com a imagem do PostgreSQL que foi utilizado como Banco de Dados dessa API. Para isso, vamos executar o seguinte comando no terminal:
$ sudo docker run --name postgres -e POSTGRES_PASSWORD=docker -p 5432:5432 -d postgres
Assim que o comando acima finalizar sua execução, é necessário criar um banco de dados com o nome "allugator". Para isso, utilizaremos uma ferramenta chamada DBeaver que pode ser encontrada para download nesse link: DBeaver
Após a instalação do DBeaver, vamos criar uma conexão com nosso container do Docker.
Clique no ícone de tomada no canto esquerdo superior do DBeaver.
Selecione Postgres e depois clique em next
Preencha os campos de conexão com os seguintes dados:
- Host: localhost
- Database: postgres
- Port: 5432
- Username: postgres
- Password: docker
Agora selecione a opção PostgreSQL do menu acima e depois marque a caixa Show all databases e em seguida clique em Finish.
Vamos criar o banco de dados com o nome allugator agora. Para isso, clique com o botão direito em cima da conexão postgres que foi criada. Selecione Create e depois Database.
Na tela de criação de bando de dados, coloque os seguintes dados:
- Database name: allugator e clique em ok
Com as dependências instaladas e com o nosso banco de dados allugator criado, clone esse repositório na sua máquina(caso não tenha clonado ainda) e acesse a pasta backend.
Dentro da pasta backend execute o seguinte comando no terminal para instalar todas as libs de dependência da API:
$ yarn
Agora precisamos configurar nosso arquivo de conexão com o banco de dados. Renomeie o arquivo ormconfig.EXAMPLE.json que está na pasta backend para ormconfig.json. Preencha o arquivo json com as informações do postgres que utilizamos na criação do container no Docker. Caso você tenha seguido todos os passos sem fazer alterações, seu json deverá estar dessa forma:
{
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "postgres",
"password": "docker",
"database": "allugator",
"migrations": [
"./src/shared/infra/typeorm/migrations/*.ts"
],
"entities": ["./src/modules/**/infra/typeorm/entities/*.ts"],
"cli": {
"migrationsDir": "./src/shared/infra/typeorm/migrations"
}
}
Caso tenha feito alguma alteração em algum passo durante o processo de instalação, faça as devidas alterações aqui e nos outros passos.
Feito isso, precisamos executar as migrations da API para que a tabela de collaborators seja criada no nosso BD. Para isso, vamos executar o seguinte comando no terminal:
$ yarn typeorm migration:run
Caso você tenha concluído todos os passos até aqui, já temos nossa aplicação clonada, com o banco de dados criado e todas as dependências do backend instaladas. Que tal importarmos os dados de exemplo do desafio no nosso banco de dados? Para isso, você precisa procurar pela tabela de collaborators.
Agora clique com o botão direito do mouse em cima da tabela collaborators e clique em Import Data. Na tela que aparecerá, selecione CSV e clique em next.
Navegue até a pasta resources desse projeto e selecione o arquivo chamado db.csv. Agora continue clicando em next em todas as telas que aparecerão. Por fim, aparecerá a seguinte tela. Clique em Start
Pronto! Nosso backend já está pronto e configurado. Sempre que quisermos iniciar a API basta executar o seguinte comando no terminal na pasta backend:
$ yarn dev:server
Abra uma nova janela/aba do terminal, navegue até a pasta frontend e execute o seguinte comando para instalar todas as libs de dependência do frontend(executar apenas na primeira vez):
$ yarn
Agora podemos iniciar nosso frontend com o seguinte comando no terminal:
$ yarn start
Pronto! Aplicação rodando!
# Caso ainda não tenha executado a API, entre na pasta backend e execute:
$ yarn dev:server
# Agora abra uma nova aba/janela do terminal, navegue até a pasta frontend e execute:
$ yarn start
-
GET /api-docs
: Documentação da API feita usando o Swagger. -
POST /collaborators
: A rota deve recebername
,cpf
,job
,signUpDate
,uf
,salary
,status
dentro do corpo da requisição, sendo oname
(string) o nome do funcionário a ser cadastrado,cpf
(string) seu CPF,job
(string) o seu cargo,signUpDate
(string) a sua data de cadastro,uf
(string) seu estado,salary
seu salário (number) estatus
(string) como seu status. Caso o usuário já exista, seus dados serão atualizados com os informados na requisição. Será retornado o funcionário recém cadastrado. Exemplo dessa requisição:
{
"name": "Paulo",
"cpf": "00011122238",
"job": "dev",
"signUpDate": "17/02/1996",
"uf": "GO",
"salary": 475.89,
"status": "INACTIVE"
}
Exemplo de resposta da API:
{
"name": "Paulo",
"job": "dev",
"cpf": "00011122238",
"uf": "GO",
"salary": 475.89,
"status": "INACTIVE",
"signUpDate": "17/02/1996",
"id": "d030fd69-ae8b-4eac-9cef-56ce75418c5e",
"created_at": "2020-11-13T04:28:48.082Z",
"updated_at": "2020-11-13T04:28:48.082Z"
}
-
GET /collaborators
: A rota retorna todos os funcionários cadastrados. -
GET /collaborators/:cpf
: A rota recebe o CPF do funcionário como parâmetro e o retorna como response. -
DELETE /collaborators/:cpf
: A rota recebe o CPF do funcionário como parâmetro e o deleta do banco de dados. -
GET /collaborators/list
: Essa rota recebe query params como filtro dos funcionários que serão retornados. As possíveis querys são:name
para procurar por nome,job
para procurar por cargo,signUpDate
para procurar por data de cadastro,uf
para procurar por unidade federativa,min
emax
para procurar funcionários dentro dessa faixa salarial estatus
para procurar por status.
Para executar a suíte de testes, basta acessar a pasta backend e tendo todas as dependências instaladas(Conferir Pré-requisitos), executar o seguinte comando no terminal:
yarn test
👤 Paulo Victor da Silva
- Github: @twistershark
- LinkedIn: @paulovictorsilva