NORI PDV

NoriPdv


Este projeto baseia-se na criação de uma API RESTful para um PDV (frente de caixa) . Com ela, os usuários podem se cadastrar, cadastrar clientes e produtos e criar pedidos.

Link do deploy: nutty-twill-toad.cyclic.app

🛠️ Construído com


Neste projeto foram utilizadas as seguintes ferramentas:

Javascript Node.js Express Git GitHub PostgreSQL NPM

🔧 Autenticação

Esta API utiliza sistema Bearer Token de autenticação.

O token é obtido através do EndPoint POST /login.

Se o usuário e suas credenciais forem válidos, esta rota retorna um objeto contendo o token de validação que será exigido em todas as rotas desta API, exceto no cadastro e login de usuário, e listagem de categorias.

🚀 Começando


Essas instruções permitirão que você obtenha uma cópia do projeto em operação na sua máquina local para fins de desenvolvimento, testes e contribuição.

Consulte Implantação para saber como utilizar a API em seu projeto.


📋 Pré-requisitos


Para a execução deste projeto você precisa ter instalado em sua máquina:
- Node.js
- Terminal de sua preferência
- Insomnia

🔧 Instalação

Rodando localmente

1 - Abra o terminal na pasta em que deseja salvar o projeto.

2 - Clone este repositório

git clone git@github.com:balicoelho/NoriPDV

3 - Navegue até o diretório do projeto

cd NoriPDV

4 - Crie seu arquivo de váriáveis de ambiente (.env) a partir do arquivo de exemplo ".env.example"

PORT=
SENHA_TOKEN=

DB_HOST=
DB_USER=
DB_PASS=
DB_NAME=
DB_PORT=

BUCKET_KEY_ID=
BUCKET_KEY_NAME=
BUCKET_APP_KEY=
BUCKET_ENDPOINT=
BUCKET_NAME=

5 - Inicie o servidor do aplicativo utilizando o comando:

npm run dev

6 - Recomendamos a utilização do aplicativo Insomnia para testar as rotas. Consulte Executando os Testes para saber como realizar os testes.

📦 Implantação

Para utilizar essa API em seu projeto recomendamos utilização da ferramenta axios.

Consulte Axios para maiores informações.

baseURL: 'http://nutty-twill-toad.cyclic.app/'



🔧 Funcionalidades

Usuário:

Categorias:

Produtos:

Clientes:

Pedidos:

🔧 Endpoints

GET /categoria

Lista as categorias disponíveis no banco de dados.

Não é necessário fornecer nenhuma informação adicional na requisição.

Será retornado um objeto contendo a lista de todas as categorias cadastradas no Banco de Dados.

POST /usuario

Cadastra novo usuário no sistema, de acordo com os campos: nome, email e senha.

É necessário fornecer no body da requisição, um arquivo json contendo os seguintes campos devidamente preenchidos:

{
    "nome":,
    "email":,
    "senha":
}

Todos os campos são obrigatórios.

Se o cadastro do usuário for realizado com sucesso, será retornado um objeto contendo os dados do usuário cadastrado.

POST /login

Realiza login do usuário cadastrado.

É necessário fornecer no body da requisição, um arquivo json contendo os seguintes campos devidamente preenchidos:

{
    "email":,
    "senha":
}

Todos os campos são obrigatórios.

Se o login for realizado com sucesso, será retornado um objeto contendo os dados do usuário cadastrado e o Bearer Token de validação que será obrigatório em todas as rotas seguintes dessa API.

GET /usuario

Permite que o usúario logado visualize seu próprio perfil.

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados do usuário logado.

PUT /usuario

Permite que o usúario atualize suas informações de cadastro.

É necessário fornecer no body da requisição, um arquivo json contendo os seguintes campos devidamente preenchidos:

{
    "nome":,
    "email":,
    "senha":
}

Todos os campos são obrigatórios.

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados do usuário atualizado.

POST /produto

Permite que o usúario cadastre um produto.

É necessário fornecer no body da requisição, um arquivo json contendo os seguintes campos devidamente preenchidos:

{
    "descricao":
    "quantidade_estoque":
    "valor":
    "categoria_id":
}

Todos os campos são obrigatórios.

O id da categoria deve ser um id válido de uma categoria cadastrada no banco de dados. Para obter informações sobre as categorias cadastradas, usar rota GET /categoria .

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados do produto cadastrado.



PUT /produto/:id

Permite que o usúario atualize as informações de um produto.

É necessário fornecer como parametro da rota (req.params) o id do produto que deseja atualizar.

É necessário fornecer no body da requisição, um arquivo json contendo os seguintes campos devidamente preenchidos:

{
    "descricao":
    "quantidade_estoque":
    "valor":
    "categoria_id":
}

Todos os campos são obrigatórios.

O id da categoria deve ser um id válido de uma categoria cadastrada no banco de dados. Para obter informações sobre as categorias cadastradas, usar rota GET /categoria .

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados do produto atualizado.

GET /produto

Permite que o usúario liste todos os produtos cadastrados.

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados de todos os produtos cadastrados no banco de dados.



GET /produto/:id

Permite que o usúario detalhe informações de um produto.

É necessário fornecer como parametro da rota (req.params) o id do produto que deseja obter.

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados do produto solicitado.

DELETE /produto/:id

Permite que o usúario exclua um produto.

É necessário fornecer como parametro da rota (req.params) o id do produto que deseja excluir.

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados do produto excluído.

POST /produto/imagem/:id

Permite que o usúario adicione uma foto ao cadastro do produto.

É necessário fornecer como parametro da rota (req.params) o id do produto ao qual deseja adicionar a imagem.

É necessário fornecer na requisição um multipart-form data com um arquivo rotulado "produto_imagem".

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados do produto cadastrado.

DELETE /produto/imagem/:id

Permite que o usúario exclua a foto do cadastro de um produto.

É necessário fornecer como parâmetro da rota (req.params) o id do produto ao qual deseja excluir imagem.

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados do produto cadastrado.

POST /cliente

Permite que o usúario cadastre um cliente.

É necessário fornecer no body da requisição, um arquivo json contendo os seguintes campos devidamente preenchidos:

{
    "nome":
    "email":
    "cpf":
    "cep":
    "rua":
    "numero":
    "bairro":
    "cidade":
    "estado":
}

Os campos nome, email e cpf são obrigatórios. Os demais campos são opcionais. Os campos email e cpf não podem ser repetidos em mais de um cadastro.

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados do cliente cadastrado.

PUT /cliente/:id

Permite que o usúario atualize as informações de um cliente cadastrado.

É necessário fornecer como parametro da rota (req.params) o id do cliente que deseja atualizar.

É necessário fornecer no body da requisição, um arquivo json contendo os seguintes campos devidamente preenchidos:

{
    "nome":
    "email":
    "cpf":
    "cep":
    "rua":
    "numero":
    "bairro":
    "cidade":
    "estado":
}

Os campos nome, email e cpf são obrigatórios. Os demais campos são opcionais. Os campos email e cpf não podem ser repetidos em mais de um cadastro.

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados do cliente atualizado.

GET /cliente

Permite que o usúario liste todos os clientes cadastrados.

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados de todos os clientes cadastrados no banco de dados.

GET /cliente/:id

Permite que o usúario detalhe informações de um cliente.

É necessário fornecer como parametro da rota (req.params) o id do cliente que deseja obter.

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados de todos os clientes cadastrados no banco de dados.

POST /pedido

Permite que o usúario cadastre um novo pedido.

É necessário fornecer no body da requisição, um arquivo json contendo os seguintes campos devidamente preenchidos:

{
    {
    "cliente_id":
    "observacao":
    "pedido_produtos": [
        {
            "produto_id":
            "quantidade_produto":
        },
        {
            "produto_id":
            "quantidade_produto":
        }
        {
            "produto_id":
            "quantidade_produto":
        }
    ]
}
}

O campo cliente_id é obrigatório. Sendo pedido_produtos um array com todos os produtos e suas respectivas quantidades contidos no pedido, é exigido que pelo menos um produto exista no array pedido_produto.

O cliente_id deve ser um id válido de um cliente devidamente cadastrado no banco de dados. Para obter informações sobre os clientes cadastrados, usar rota GET /cliente.

O produto_id deve ser um id válido de um produto devidamente cadastrado no banco de dados. Para obter informações sobre os produtos cadastrados, usar rota GET /produto.

É necessário informar na requisição o Bearer Token retornado na rota de login.

Se todas as condições forem atendidas e o Bearer Token for devidamente autenticado, será retornado um objeto contendo os dados do pedido criado.



⚙️ Executando os testes

No aplicativo Insomnia:

1 - Faça a importação do DumpInsomnia para configurar todos os endpoint.

2 - No canto superior direito do Insomnia, clique na configuração de "Base Environment", adicione {"local": "https://nutty-twill-toad.cyclic.app"}

3 - Configure o Bearer Token do Insomnia para inserir o token automaticamente nas rotas em que o mesmo é obrigatório:

1 (1)



👩🏻‍💻 AUTOR

Grupo A Sociedade do Código

Colaboradoras:

• Bárbara Coelho - [@balicoelho]

• Dani Nere - [@DaniNere]

• Fernanda Pestana - [@pestanafj]

• Lizandra Gomes - [@Lizaliz0]

• Vitória Cecília - [@Vitcecilia]


Projeto criado durante Desafio Final do Curso Desenvolvimento de Software BackEnd da Cubos Academy.

Outubro 2023.