Este projeto se trata de uma aplicação Fullstack Monorepo construída como parte do teste técnico para vaga na Kabum!
Trata-se de um portal gerencial para ver, editar, cadastrar e remover clientes
Possui as seguintes tecnologias
📊 Banco de dados:
- Relacional, construído com MySQL e TypeORM;
🔙 Back-end:
- Construído seguindo modelo REST, tentando ao máximo respeitar os preceitos de SOLID (principalmente L e I), sendo feito 100% em Typescript;
🐋 Docker:
- Cada camada da aplicação (front, back e db) conta com um Dockerfile, além de orquestração docker para dar conta de subir tudo junto ao mesmo tempo;
🧪 Testes:
- Por último mas não menos importante, a API conta com uma bateria de testes automatizados através da criação de um InMemory Repository, afim de 'mockar o banco de dados'!
🔙 Front-end:
- Feito em React, CSS e Bootstrap
Para rodar esse projeto, você vai precisar adicionar as seguintes variáveis de ambiente no seu .env
APP_PORT=porta que roda o servidor
JWT_SECRET=secret jwt
DB_USER=user do banco de dados
DB_PASS=senha do banco de dados
DB_NAME=nome do banco de dados
DB_PORT=port do banco de dados
DB_HOST=host do banco de dados
REACT_APP_BASE_URL=a url em que está rodando seu servidor
Atenção!
Caso vá usar o Docker, lembre-se de alterar as variáveis dos arquivos compose
Por se tratar de monorepo, recomenda-se a utilização de docker para a instalação e execução do projeto. Aqui farei o passo a passo em ambos os casos
Com Docker
Instale as dependências
npm install ou npm i
Na pasta raiz, rode o comando para realizar o compose
npm run compose:up:dev
Pronto! Agora é só esperar as camadas montarem! Pega um café enquanto isso ☕
Sem Docker
Instale as dependências
npm install ou npm i
Vá na pasta de cada camada e instale suas dependências
cd packages/server
npm i
cd packages/web
npm i
Para rodar a aplicação:
cd packages/server
npm run dev
cd packages/web
npm start
Ao intalar o projeto e rodar, o servidor irá realizar um dump no banco de dados com o primeiro usuário para poder testar a aplicação sem problemas
Credenciais
name: 'Primeiro Usuário',
email: 'usuario@email.com',
password: 'firstUserPassword'
Para rodar os testes presentes na camada de back-end, rode o seguinte comando
cd packages/server
npm run test
Registro e login
POST /register
"name": "Primeiro Usuário",
"email": "usuario@email.com",
"password": "firstUserPassword"
POST /login
"email": "usuario@email.com",
"password": "firstUserPassword"
Entidade Cliente
POST /client
"name": "Cliente",
"cpf": "07938665029",
"birthday": "16/06/1999",
"rg": "319100467",
"phone": "27994567859",
"addresses": [
{
"zipcode": "29060670",
"address": "Rua tal",
"number": "880",
"district": "Bairro Tal",
"city": "Vitória",
"state": "ES"
},
]
GET /client
GET /client/${id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
string |
Obrigatório. O ID do cliente que você quer |
PATCH /client/${id}
"name": "Cliente X",
Parâmetro | Tipo | Descrição |
---|---|---|
id |
string |
Obrigatório. O ID do cliente que você quer editar |
DELETE /client/${id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
string |
Obrigatório. O ID do cliente que você quer remover |
Entidade Endereço
POST /address
"zipcode": "29060670",
"address": "Rua tal",
"number": "880",
"district": "Bairro Tal",
"city": "Vitória",
"state": "ES"
Parâmetro | Tipo | Descrição |
---|---|---|
id |
string |
Obrigatório. ID do cliente que terá um novo endereço |
GET /address
GET /address/${id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
string |
Obrigatório. O ID do endereço que você quer |
PATCH /address/${id}
"address": "Rua fulano de tal",
"complement": "Na esquina"
Parâmetro | Tipo | Descrição |
---|---|---|
id |
string |
Obrigatório. O ID do endereço que você quer editar |
DELETE /client/${id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
string |
Obrigatório. O ID do endereço que você quer remover |