Sistema desenvolvido para o teste proposto pela empresa Nave.
O banco de dados possui 3 tabelas: usuarios, navers e projetos.
USUARIOS:NAVERS:
PROJETOS:
As seguintes ferramentas foram usadas na construção do projeto:
# Para instalar MySQL no Ubuntu
$ sudo apt install mysql-server
# Acessar terminal mysql
$ sudo mysql -u root
# Criar base de dados
mysql> CREATE DATABASE navedex_api;
# Criar usuario
mysql> CREATE USER 'navedex_mysql'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
# Garantir acesso ao usuario
mysql> GRANT ALL ON navedex_api.* TO 'navedex_mysql'@'%';
mysql> FLUSH PRIVILEGES;
# Ativar database
mysql> USE navedex_api;
# Criar tabelas do projeto:
# usuarios
mysql> CREATE TABLE usuarios (
-> id_usuario INT NOT NULL PRIMARY KEY AUTO_INCREMENT UNIQUE,
-> email VARCHAR(255) NOT NULL UNIQUE,
-> password VARCHAR(255) NOT NULL
-> );
# navers
mysql> CREATE TABLE navers (
-> id_naver INT,
-> firstName VARCHAR(255) DEFAULT NULL,
-> lastName VARCHAR(255) DEFAULT NULL,
-> birthDate DATE DEFAULT NULL,
-> admissionDate DATE DEFAULT NULL,
-> jobRole VARCHAR(255) DEFAULT NULL,
-> id_usuario INT PRIMARY KEY,
-> FOREIGN KEY (id_usuario) REFERENCES
-> usuarios(id_usuario) ON DELETE CASCADE ON UPDATE CASCADE
-> );
# projetos
mysql> CREATE TABLE projetos (
-> id_projeto INT NOT NULL PRIMARY KEY
-> AUTO_INCREMENT,
-> name_projeto VARCHAR(255) DEFAULT NULL,
-> id_usuario INT,
-> FOREIGN KEY (id_usuario) REFERENCES navers
-> (id_usuario) ON DELETE CASCADE ON UPDATE
-> CASCADE
-> );
Criar arquivo no diretório base chamado .env , este arquivo irá conter as informações do banco de dados.
$ nano ./.env
DATABASE = navedex_api
DATABASE_HOST = localhost
DATABASE_USER = navedex_mysql
DATABASE_PASSWORD = password
JWT_SECRET = mysupersecretpassword
JWT_EXPIRES_IN = 90d
JWT_COOKIE_EXPIRES_IN = 90
# Crie uma pasta
$ mkdir navedexAPI_nodejs
# Entre na pasta e clone o repositorio
$ cd navedexAPI_nodejs
$ git clone git@github.com:lucasdmarten/navedexAPI_nodejs.git
# Entre na pasta do projeto
$ cd navedexAPI_nodejs
# Instale todas as bibliotecas
$ npm install --save-dev nodemon
$ npm install express mysql dotenv bcryptjs cookie-parser jsonwebtoken hbs
# Runserver...
$ npm start
Registro de usuario:
# http://localhost:4000/auth/register/
$ curl --location --request POST 'http://localhost:4000/auth/register/' \
--header 'Content-Type: application/json' \
--data-raw '{
"email":"testando@gmail.com",
"password":"123",
"passwordConfirm":"123"}'
Aqui sera feito login com base no cadastro feito préviamente, e será liberado o token access.
#http://localhost:4000/auth/login/
$ curl --location --request POST 'http://localhost:4000/auth/login/' \
--header 'Content-Type: application/json' \
--data-raw '{
"email":"testando@gmail.com",
"password":"123"
}'
$ {"message":"Usuario de id:3 está conectado!","id":3,"email":"testando@gmail.com","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MywiaWF0IjoxNjE2MDMxMDE4LCJleHAiOjE2MjM4MDcwMTh9.XBpvm5XjfVEnw9CTrKFj0gV09jCrOVfpeWkqbPJjUS8"}
http://localhost:4000/register/
http://localhost:4000/login/
http://localhost:4000/auth/add_naver/
$ curl --location --request POST 'http://localhost:4000/auth/add_naver/' \
--header 'Content-Type: application/json' \
--header 'Cookie: acess-token= substituirTOKEN ; acess-token-id= substituirID' \
--data-raw '{
"firstName":"teste",
"lastName":"teste",
"birthDate":"1994-10-27",
"admissionDate":"2020-04-08",
"jobRole":"developer"
}'
# O usuario poderá criar apenas um naver, e um naver está relacionado a n projetos
http://localhost:4000/auth/list_navers
$ curl --location --request GET 'http://localhost:4000/auth/list_navers' \
--header 'Cookie: acess-token= substituirTOKEN ; acess-token-id= substituirID' \
--data-raw ''
Requer o field id_projeto e id_naver na body
# PUT - Alterar naver vinculado ao usuario autenticado
http://localhost:4000/auth/update_naver
$ curl --location --request PUT 'localhost:4000/auth/update_naver' \
--header 'Content-Type: application/json' \
--header 'Cookie: acess-token= substituirTOKEN ; acess-token-id= substituirID' \
--data-raw '{
"firstName":"TESTE",
"lastName":"ALTERANDO",
"birthDate":"1994-10-27",
"admissionDate":"2020-04-08",
"jobRole":"Developer PLENO"
}'
Requer id do naver a ser deletado
# DELETE - Deletar seu próprio naver vinculado ao usuario autenticado
http://localhost:4000/auth/delete_naver/
http://localhost:4000/auth/add_projetos/
$ curl --location --request POST 'http://localhost:4000/auth/add_projeto/' \
--header 'Content-Type: application/json' \
--header 'Cookie: acess-token= substituirTOKEN ; acess-token-id= substituirID' \
--data-raw '{
"name_projeto": "projeto_teste"
}'
# GET - Listar projetos criados pelo usuario
http://localhost:4000/auth/list_projetos
$ curl --location --request GET 'http://localhost:4000/auth/list_projetos/' \
--header 'Cookie: acess-token= substituirTOKEN ; acess-token-id= substituirID' \
--data-raw ''
# # PUT - Filtrar projeto por id do projeto, inclusive projetos criados por outros usuarios
# http://localhost:4000/auth/list_projetos_by_id/<int>
# # PUT - Filtrar projetos por id do naver, inclusive projetos criados por outros usuarios
# http://localhost:4000/auth/list_projetos_by_id_naver/<int>
# PUT - Alterar projeto vinculado ao usuario autenticado
http://localhost:4000/auth/update_projeto/<id_projeto>
curl --location --request PUT 'localhost:4000/auth/update_projeto/<id_projeto>' \
--header 'Content-Type: application/json' \
--header 'Cookie: acess-token= substituirTOKEN ; acess-token-id= substituirID' \
--data-raw '{
"name_projeto":"bar do zÉ"
}'
# PUT - Alterar naver vinculado ao usuario autenticado
http://localhost:4000/auth/delete_projeto/<int_projeto>
$ curl --location --request DELETE 'http://localhost:4000/auth/delete_projeto/<id_projeto>' \
--header 'Cookie: acess-token= substituirTOKEN ; acess-token-id= substituirID'