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.
- Clone este repositório.
- Entre no diretório criado.
-
Intale as dependências da aplicação.
npm install -
Utilize o seguinte comando para "subir" os containers do Docker
docker compose up -d --build -
Utilize o script para iniciar o database.
npm run db:reset -
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 -
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}
Endpoints:
/login - { post }
/orders = { get, post }
/products - { get, post }
Testes
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
- 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" } - 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.
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
- 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.
- 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] } ]
Este endpoint oferece funcionalidades para o gerenciamento de produtos, utilizando Sequelize como ORM para interagir com o banco de dados(MySQL).
Funcionalidades Principais
- 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 } - 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.
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
Neste projeto utilizei as seguintes ferramentas: