maxsonferovante / pontodevenda

Desafio do curso de Desenvolvimento de Software - com foco em Backend, da Cubos Academy. O projeto foi desenvolvido em grupo, utilizando metodologias ágeis como o Scrum e o Kanban.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ponto de Venda API 🖥️

Sobre o projeto

Este projeto é resultado do Desafio do Módulo 5 (Banco de dados e API's), do curso de Backend da Cubos Academy.

A aplicação conta com diversas funcionalidades, permitindo ao usuário se cadastrar, logar, visualizar e editar o seu perfil. O sistema também conta com autenticação JWT e criptografia através do Bcrypt, o que garante segurança na transferência de informações e no armazenamento de senhas.

Tecnologias Utilizadas

My Skills

Funcionalidades

  1. Cadastrar Usuário
  2. Fazer Login
  3. Detalhar Perfil do Usuário Logado
  4. Editar Perfil do Usuário Logado
  5. Listar Categorias
  6. Cadastrar Produto
  7. Editar Dados do Produto
  8. Listar Produtos
  9. Detalhar Produto
  10. Excluir Produto
  11. Cadastrar Cliente
  12. Editar Dados do Cliente
  13. Listar Clientes
  14. Detalhar Cliente
  15. Cadastrar Pedido
  16. Listar Pedidos

Como executar o projeto

⚠️ Para a execução do projeto, é necessário ter o Node.js instalado em sua máquina.

  1. Faça um clone do projeto
git clone https://github.com/nsRenan/pontodevenda.git
  1. Abra o diretório do projeto
cd pontodevenda
  1. Instale as dependências utilizando o comando:
npm install
  1. Inicialize o servidor local:
npm run dev
  1. Rodar os testes :
npm run test

Dependências - Versões

Dependências Versão
Express 4.18.2
Nodemon 3.0.1
PG 8.11.3
Dotenv 16.3.1
Json Web Token 9.0.2
Knex 3.0.1
Joi 17.11.0
Cors 2.8.5
Bcrypt 5.1.1
Aws sdk 2.1479.0
Multer 1.4.5-lts.1
Swagger 5.0.0
Swagger AutoGen 2.23.6
Handlebars 4.7.8
Nodemailer 6.9.7
Jest 29.7.0
Supertest 6.3.3

Verificando os endpoints

  1. Cadastrar usuário

POST /usuario

Esse endpoint permite o cadastro do usuário.

Validações:

-   Validar o preenchimento dos campos obrigatórios;
-   Validar se o e-mail informado já existe;
-   Criptografar a senha antes de persistir no banco de dados;
-   Cadastrar o usuário no banco de dados.
  1. Login do usuário

POST /login

Esse endpoint realiza o login do usuário no sistema utilizando o email e senha cadastrados.

Validações:

-   Validar o preenchimento dos campos obrigatórios;
-   Verificar se o e-mail informado existe;
-   Validar e-mail e senha;
-   Criar token de autenticação com id do usuário.
  1. Detalhar usuário

GET /usuario

Esse endpoint deverá apresentar os dados do usuário logado no sistema.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   O usuário deverá ser identificado através do ID presente no token de validação;
-   Consultar o usuário no banco de dados pelo id contido no token informado;
  1. Editar perfil do usuário

PUT /usuario

Esse endpoint deve atualizar os dados do usuário logado no sistema.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   O usuário deverá ser identificado através do ID presente no token de validação;
-   Validar o preenchimento dos campos obrigatórios;
-   Validar se o novo e-mail já existe no banco de dados para outro usuário;
-   Impedir a alteração do e-mail caso o mesmo exista para outro usuário no banco de dados; (o campo de email deve ser sempre único no banco de dados);
-   Criptografar a senha antes de salvar no banco de dados;
-   Atualizar as informações do usuário no banco de dados;
  1. Listar categorias

GET /categoria

Esse endpoint deverá listar todas as categorias disponíveis para cadastrar as transações.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   O endpoint deverá responder com um array de todas as categorias cadastradas no sistema;
-  Caso não exista nenhuma categoria cadastrada, deverá responder com array vazio.
  1. Cadastrar produto

POST /produto

Esse endpoint permite o cadastro do produto.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   Validar o preenchimento dos campos obrigatórios;
-   Validar se a categoria informada existe;
-   Caso seja enviada imagem na requisição, a mesma deverá ser processada e armazenada no servidor de armazenamento Blackblaze;
-   Cadastrar o produto no banco de dados.
  1. Editar dados do produto

PUT /produto/:id

Esse endpoint deve atualizar os dados do produto do id informado como parâmetro na rota.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   Validar se existe produto para o id enviado como parâmetro na rota;
-   Validar o preenchimento dos campos obrigatórios;
-   Validar se a categoria informada existe;
-   Caso seja enviada imagem na requisição, a mesma deverá ser processada e armazenada no servidor de armazenamento Blackblaze;
-   Atualizar as informações do produto no banco de dados.
  1. Listar produtos

GET /produto

Esse endpoint deverá listar todas os produtos disponíveis, com filtro opcional de categoria.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   Caso não seja informado um id de categoria como parâmetro do tipo query, o endpoint deverá responder com todos os produtos cadastrados no sistema;
-  Caso seja informado um id de categoria como parâmetro do tipo query, o endpoint deverá responder com todos os produtos cadastrados no sistema com a categoria informada.
  1. Detalhar produto

GET /produto/:id

Esse endpoint deverá apresentar os dados do produto do id informado como parâmetro na rota.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   Validar se o id de produto informado existe;
-   Consultar o produto no banco de dados pelo id dado.
  1. Excluir produto

DELETE /produto/:id

Esse endpoint deverá excluir o produto do id informado como parâmetro na rota.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   Validar se o id de produto informado existe;
-   Validar se o produto que está sendo excluído está vinculado a algum pedido, 
-   Caso esteja vinculado a algum pedido, o produto não poderá ser excluído;
-   Caso não esteja, deletar o produto no banco de dados pelo id dado e deletar a imagem do produto(caso possua) do servidor.
  1. Cadastrar cliente

POST /cliente

Esse endpoint permite o cadastro do produto.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   Validar o preenchimento dos campos obrigatórios;
-   Validar se o e-mail e cpf informados já existem;
-   Cadastrar o cliente no banco de dados.
  1. Editar dados do cliente

PUT /cliente/:id

Esse endpoint deve atualizar os dados do cliente do id informado como parâmetro na rota.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   Validar se existe cliente para o id enviado como parâmetro na rota;
-   Validar o preenchimento dos campos obrigatórios;
-   Validar se o novo e-mail ou cpf já existem no banco de dados para outro cliente;
-   Impedir a alteração do e-mail ou cpf caso já existam para outro cliente no banco de dados; (os campos de email e cpf devem ser sempre únicos no banco de dados);
-   Atualizar as informações do cliente no banco de dados.
  1. Listar clientes

GET /cliente

Esse endpoint deverá listar todos os clientes cadastrados.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   O endpoint deverá responder com todos os clientes cadastrados no sistema.
  1. Detalhar cliente

GET /cliente/:id

Esse endpoint deverá apresentar os dados do cliente do id informado como parâmetro na rota.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   Validar se o id de cliente informado existe;
-   Consultar o cliente no banco de dados pelo id dado.
  1. Cadastrar pedido

POST /pedido

Esse endpoint permite o cadastro de pedidos.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   Validar o preenchimento dos campos obrigatórios;
-   Validar se existe cliente para o id enviado no corpo (body) da requisição;
-   Validar se existe produto para cada produto_id informado dentro do array enviado no corpo (body) da requisição;
-   Validar se existe a quantidade em estoque de cada produto existente dentro do array, de acordo com a quantidade informada no corpo (body) da requisição;
-   O pedido deverá ser cadastrado, apenas, se todos os produtos estiverem validados;
-   Enviar e-mail para o cliente notificando que o pedido foi efetuado com sucesso;
-   Cadastrar o pedido no banco de dados.
  1. Listar pedidos

GET /pedido

Esse endpoint lista os pedidos cadastrados no sistema, com filtro opcional de cliente.

Validações:

-   Validar se o token foi enviado no header da requisição (Bearer Token);
-   Verificar se o token enviado é válido;
-   Caso não seja informado um id de cliente como parâmetro do tipo query, o endpoint deverá responder com todos os pedidos cadastrados no sistema;
-  Caso seja informado um id de cliente como parâmetro do tipo query, o endpoint deverá responder com todos os pedidos cadastrados no sistema relativo ao cliente informado.

Documentação - Swagger

Este projeto foi documentado utilizando o Swagger.

Para visualizar o Swagger no servidor utilize Swagger

Para acessar a documentação localmente, inicialize o projeto com npm run dev;

Abra http://localhost:3000//api-docs no navegador para visualizar localmente.

Deploy

Para enviar mudanças ou atualizações de um ambiente de implantação para outro, da aplicação que teve seu desenvolvimento concluído,podendo ser o principal ou algum intermediário, utilizamos o https://embarrassed-kerchief-goat.cyclic.app/

Como contribuir para o projeto

  1. Faça um fork do projeto.
  2. Crie uma nova branch com as suas alterações: git checkout -b my-feature
  3. Salve as alterações e crie uma mensagem de commit contanto o que você fez: git commit -m "feature: My new feature"
  4. Envie as alterações: git push origin my-feature

Autoras

Daniel Vitor

Hélio Ribeiro

Matheus Tavares

Maxson Almeida

Renan Nobre

Licença

MIT

About

Desafio do curso de Desenvolvimento de Software - com foco em Backend, da Cubos Academy. O projeto foi desenvolvido em grupo, utilizando metodologias ágeis como o Scrum e o Kanban.


Languages

Language:JavaScript 100.0%