lucasdmarten / navedexAPI_nodejs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Navedex Api (EM DESENVOLVIMENTO)

Sistema desenvolvido para o teste proposto pela empresa Nave.

💻 Sobre o projeto

O banco de dados possui 3 tabelas: usuarios, navers e projetos.

USUARIOS:
  • podem criar apenas um naver.
  • podem alterar ou deletar apenas o seu naver e os projetos que estão ligados a ele.
  • podem visualizar todos navers e seus projetos.??

  • NAVERS:
  • id do usuario é usado para criação do naver.
  • está vinculado ao usuario pelo id.
  • podem participar de N projetos.

  • PROJETOS:
  • estão vinculados a um naver.

  • 🔨 Tecnologias

    As seguintes ferramentas foram usadas na construção do projeto:


    Como configurar o banco de dados MySQL:


    # 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
    


    Como rodar este projeto:


    # 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



    AUTENTICAÇÃO:

    Rota para cadastro:

    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"}'

    Rota para login:

    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"}

    O registro e o login também podem ser feitos a partir de uma interface web:

    http://localhost:4000/register/
    http://localhost:4000/login/

    APÓS LOGIN CRIE UM NAVER E ALGUNS PROJETOS!





    NAVERS:


    Comece criando seu naver!

    (STORE) - Rota para criar navers:

    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"
           }'
    

    (INDEX) - Rota para mostrar o naver criado pelo usuario autenticado:

    # 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 ''

    (UPDATE) - Rota para alterar o naver do usuario autenticado:

    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"
    }'

    AO DELETAR TODOS OS PROJETOS DO SEU NAVER TAMBÉM SERÃO EXCLUIDOS


    (DELETE) - Rota para deletar o naver do usuario autenticado:

    Requer id do naver a ser deletado

    # DELETE - Deletar seu próprio naver vinculado ao usuario autenticado
    http://localhost:4000/auth/delete_naver/




    PROJETOS:


    Registre os projetos que o seu naver já participou

    (STORE) - Rota para criar projetos:

    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"
           }'



    (INDEX) - Rota para listar todos os projetos:

    # 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>
    

    (UPDATE) - Rota para alterar apenas os projetos do usuario autenticado:

    # 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É"
    }'

    (DELETE) - Rota para alterar o projetos do usuario autenticado:

    # 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'

    Dificuldades:

    EM DESENVOLVIMENTO

    About


    Languages

    Language:Handlebars 53.0%Language:JavaScript 46.1%Language:CSS 0.5%Language:Shell 0.4%