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.
- Cadastrar Usuário
- Fazer Login
- Detalhar Perfil do Usuário Logado
- Editar Perfil do Usuário Logado
- Listar Categorias
- Cadastrar Produto
- Editar Dados do Produto
- Listar Produtos
- Detalhar Produto
- Excluir Produto
- Cadastrar Cliente
- Editar Dados do Cliente
- Listar Clientes
- Detalhar Cliente
- Cadastrar Pedido
- Listar Pedidos
- Faça um clone do projeto
git clone https://github.com/nsRenan/pontodevenda.git
- Abra o diretório do projeto
cd pontodevenda
- Instale as dependências utilizando o comando:
npm install
- Inicialize o servidor local:
npm run dev
- Rodar os testes :
npm run test
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 |
- Cadastrar usuário
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.
- Login do usuário
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.
- Detalhar usuário
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;
- Editar perfil do usuário
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;
- Listar categorias
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.
- Cadastrar 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.
- Editar dados do produto
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.
- Listar produtos
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.
- Detalhar produto
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.
- Excluir produto
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.
- Cadastrar 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.
- Editar dados do cliente
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.
- Listar clientes
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.
- Detalhar cliente
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.
- Cadastrar 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.
- Listar pedidos
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.
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/
- Faça um fork do projeto.
- Crie uma nova branch com as suas alterações:
git checkout -b my-feature
- Salve as alterações e crie uma mensagem de commit contanto o que você fez:
git commit -m "feature: My new feature"
- Envie as alterações:
git push origin my-feature