Skip to content

GustavoTorres94/trybesmith

Repository files navigation

TrybeSmith 🔨

Badge em Desenvolvimento

Descrição

Uma aplicação Back-End que tem como objetivo de gestão de uma loja, com gestão e verficação de Login, Procura e inserção de produtos e criação de Pedidos.
A aplicação possui poucas funcionalidades no momento, criação e pesquisa. Pretendo dar continuidade para completar o CRUD.
A arquitetura de software escolhida para essa aplicação foi o Model Services Controller (MSC).
Foi um prohjeto da Trybe, desenvolvido por mim.

Índice

Como Usar

  1. Clone este repositório.
  2. Entre no diretório criado.
  3. Intale as dependências da aplicação.
    npm install
    
  4. Utilize o seguinte comando para "subir" os containers do Docker
    docker compose up -d --build
    
  5. Utilize o script para iniciar o database.
    npm run db:reset
    
  6. Utilize o script de desnvolvimento para rodar a aplicação ou o de start para inicializar a aplicação
    npm run dev
    ou
    npm start
    
  7. Utlize um software de auxílio, insomnia ou semelhante, ou uma extensão do vscode, thunderclient ou semelhante, para realizar as requisições para os endpoints. Projeto clonado podes fazer requisições para
      localhost:3001/{endpoint}
    

Funcionalidades

Endpoints:
/login - { post }
/orders = { get, post }
/products - { get, post }
Testes

/login

Sistema de Autenticação com JWT e Bcrypt Este endpoint apresenta uma implementação básica de um sistema de autenticação usando JSON Web Tokens (JWT) para gerenciar a autenticação de usuários e a criptografia de senhas utilizando a biblioteca bcryptjs.

Funcionalidades Principais

  1. Autenticação de Usuários { Post }
    • A função validateLogin é responsável por validar o login de usuários com base em seus nomes de usuário e senhas.
    • Ela verifica se os campos de nome de usuário e senha são fornecidos e correspondem aos registros do banco de dados.
    • Se a autenticação for bem-sucedida, a função retorna um token JWT para ser usado em requisições subsequentes como forma de autenticação.
    • Exemplo de corpo da Requisição:
        {
          "username": "string",
          "password": "string"
        }
      
  2. Geração de Tokens JWT
    • A função payloadToken gera um token JWT com base nas informações do usuário autenticado.
    • Este token contém informações específicas do usuário, como ID e nome de usuário, e é assinado com uma chave secreta definida no ambiente (JWT_SECRET) ou, caso não definida, usa uma chave padrão.

/orders

Este endpoint apresenta funções para gerenciar pedidos e produtos no sistema de e-commerce da Trybesmith, utilizando Sequelize como ORM para interação com o banco de dados(MySQL).

Funcionalidades Principais

  1. Obter Todos os Pedidos { Get }
    • A função validateGetAllOrders é responsável por buscar todos os pedidos no banco de dados.
    • Ela retorna uma lista de pedidos, incluindo os IDs dos produtos associados a cada pedido.
  2. Criar um Novo Pedido { Post }
    • A função validateCreateOrder permite criar um novo pedido associado a um usuário e a uma lista de produtos.
    • Antes de criar o pedido, ela valida se o usuário tem permissão para realizar a operação.
    • Após criar o pedido, ela associa os produtos ao pedido no banco de dados.
    • Exemplo de corpo da Requisição em JSON:
        [
          {
            "id": 1,
            "userId": 2,
            "productIds": [1, 2]
          },
          {
            "id": 2,
            "userId": 1,
            "productIds": [3, 4]
          }
        ]
      

/products

Este endpoint oferece funcionalidades para o gerenciamento de produtos, utilizando Sequelize como ORM para interagir com o banco de dados(MySQL).

Funcionalidades Principais

  1. Inserir um Novo Produto { Post }
    • A função validateInsertProduct permite inserir um novo produto no banco de dados com base nas informações fornecidas.
    • Ela recebe um objeto ProductxablauType contendo o nome (name), preço (price) e ID do pedido (orderId) do produto a ser inserido.
    • Após a inserção bem-sucedida, a função retorna os dados do produto inserido, incluindo o ID gerado no banco de dados.
    • Exemplo de corpo da Requisição
        {
          "name": "Martelo de Thor",
          "price": "30 peças de ouro",
          "orderId": 4
        }
      
  2. Obter Todos os Produtos { Get }
    • A função validateGetAllProducts busca todos os produtos existentes no banco de dados.
    • Ela retorna uma lista de objetos Product, contendo os dados de todos os produtos encontrados no banco de dados.

Testes

A aplicação foi testada utilizando o Jest, Mocha e Chai. Os testes são unitários e estão no diretório de testes.
Os comandos para testar a aplicação são os seguintes:

npm run test:local
npm run test:coverage

Tecnologias

Neste projeto utilizei as seguintes ferramentas:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors