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/Daaaiii/PDV-PowerPuffGirls.git
- Abra o diretório do projeto
cd PDV-PowerPuffGirls
- Instale as dependências utilizando o comando:
npm i
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 |
- Inicialize o servidor local:
npm run dev
Desafio Final.postman_collection.json
no Postman ou Insomnia, ou utilizar a extensão do Postman no VsCode.
- 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.
Este projeto foi documentado utilizando o Swagger.
Para acessar a documentação, inicialize o projeto com npm run dev
;
Abra http://localhost:3000/doc
no navegador para visualizar localmente.
Para visualizar o Swagger no servidor utilize https://faithful-bonnet-elk.cyclic.app/doc
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://faithful-bonnet-elk.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