Skip to content

B0NATES/API-PDV

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistema de frente de caixa

API com a finalidade de admnistrar um comércio. Esse Projeto foi desenvolvido em node.js com PostgreSQL, Futuras mudanças envonvem aplicar um front para o projeto.

Rodando o Projeto na sua máquina

  • Realize o Fork do projeto
  • Execute o comando npm install para instalar as dependências
  • Crie o arquivo .env na raiz do projeto e configure as variáveis de ambiente de acordo com o .env.example
  • No caminho src/database/schema.sql está a configuração do banco de dados

Funcionalidades

Listar categorias

GET /categoria

Essa é a rota que será chamada quando o usuário quiser listar todas as categorias cadastradas.

Cadastrar usuário

POST /usuario

Essa é a rota que será utilizada para cadastrar um novo usuário no sistema.

Critérios de aceite:

    {
        "nome",
        "email",
        "senha"
    }
Efetuar login do usuário

POST /login

Essa é a rota que permite o usuário cadastrado realizar o login no sistema.

Critérios de aceite:

{
    "email",
    "senha"
}

ATENÇÃO: Todas as funcionalidades (endpoints) a seguir, a partir desse ponto, exigirão um token de autenticação do usuário logado, recebendo no header com o formato Bearer Token.

Detalhar perfil do usuário logado

GET /usuario

Essa é a rota que permite o usuário logado a visualizar os dados do seu próprio perfil, de acordo com a validação do token de autenticação.

Editar perfil do usuário logado

PUT /usuario

Essa é a rota que permite o usuário logado atualizar informações de seu próprio cadastro, de acordo com a validação do token de autenticação.

Critérios de aceite:

{
    "nome",
    "email",
    "senha"
}
Cadastrar Produto

POST /produto

Essa é a rota que permite o usuário logado cadastrar um novo produto no sistema.

Critérios de aceite:

{
    "descricao",
    "quantidade_estoque",
    "valor",
    "categoria_id"
}
Editar dados do produto

PUT /produto/:id

Essa é a rota que permite o usuário logado a atualizar as informações de um produto cadastrado.

Critérios de aceite:

{
    "descricao",
    "quantidade_estoque",
    "valor",
    "categoria_id"
}
Listar Produtos

GET /produto

Essa é a rota que será chamada quando o usuário logado quiser listar todos os produtos cadastrados.

Critérios de aceite:

- Caso seja enviado o parâmetro do tipo query (categoria_id), vai filtrar os produtos de acordo com a categoria, caso o id de categoria informada exista.
- Caso não seja informado o parâmetro do tipo query (categoria_id) todos os produtos cadastrados deverão ser retornados.
Detalhar Produto

GET /produto/:id

Essa é a rota que permite o usuário logado obter um de seus produtos cadastrados.

Critérios de aceite:

-   Validar se existe produto para o id enviado como parâmetro na rota.
Excluir Produto por ID

DELETE /produto/:id

Essa é a rota que será chamada quando o usuário logado quiser excluir um de seus produtos cadastrados.

Critérios de aceite:

-   Validar se existe produto para o id enviado como parâmetro na rota.
Cadastrar Cliente

POST /cliente

Essa é a rota que permite usuário logado cadastrar um novo cliente no sistema.

Critérios de aceite:

{   
    "nome",
    "email",
    "cpf"
}    
Editar dados do cliente

PUT /cliente/:id

Essa é a rota que permite o usuário realizar atualização de um cliente cadastrado.

Critérios de aceite:

{    
    "nome",
    "email",
    "cpf"
}
Listar Clientes

GET /cliente

Essa é a rota que será chamada quando o usuário logado quiser listar todos os clientes cadastrados.

Detalhar Cliente

GET /cliente/:id

Essa é a rota que será chamada quando o usuário logado quiser obter um de seus clientes cadastrados.

Critérios de aceite:

-   Validar se existe cliente para o id enviado como parâmetro na rota.
Cadastrar Pedido

POST /pedido

  • Essa é a rota que será utilizada para cadastrar um novo pedido no sistema.

  • Cada pedido deverá conter ao menos um produto vinculado.

Atenção: As propriedades produto_id e quantidade_produto devem ser informadas dentro de um array e para cada produto deverá ser criado um objeto neste array, como ilustrado no objeto de requisição abaixo. Só deverá ser cadastrado o pedido caso todos produtos vinculados ao pedido realmente existão no banco de dados.

// Corpo da requisição para cadastro de pedido (body)
{
    "cliente_id": 1,
    "observacao": "Em caso de ausência recomendo deixar com algum vizinho",
    "pedido_produtos": [
        {
            "produto_id": 1,
            "quantidade_produto": 10
        },
        {
            "produto_id": 2,
            "quantidade_produto": 20
        }
    ]
}
Listar Pedidos

GET /pedido

Essa é a rota que será chamada quando o usuário logado quiser listar todos os pedidos cadastrados.

Deveremos incluir um parâmetro do tipo query cliente_id para que seja possível consultar pedidos por clientes, de modo, que serão filtrados de acordo com o id de um cliente.

// Resposta para listagem de pedido (body)
[
    {
        "pedido": {
            "id": 1,
            "valor_total": 230010,
            "observacao": null,
            "cliente_id": 1
        },
        "pedido_produtos": [
            {
                "id": 1,
                "quantidade_produto": 1,
                "valor_produto": 10,
                "pedido_id": 1,
                "produto_id": 1
            },
            {
                "id": 2,
                "quantidade_produto": 2,
                "valor_produto": 230000,
                "pedido_id": 1,
                "produto_id": 2
            }
        ]
    }
]

Critérios de aceite:

- Caso seja enviado o parâmetro do tipo query **cliente_id**, filtrar os pedidos de acordo com o cliente, caso o id do cliente informado exista.
- Caso não seja informado o parâmetro do tipo query **cliente_id** todos os pedidos cadastrados deverão ser retornados.
Aplicar validação na exclusão de produto

Deverá ser aplicada uma regra de negócio que não permitirá exclusão de produto que tenha sido registrado em algum pedido.

Critérios de aceite:

- Validar se o produto que está sendo excluído não está vinculado a nenhum pedido, caso estiver, não poderá ser excluído e deverá ser retornada uma mensagem indicando o motivo.
Aprimorar cadastro/atualização de produto

Deverão ser aprimorados o cadastro e a atualização de produto para permitir vincular uma imagem a um produto. Deverá ser criada uma coluna produto_imagem para que seja possível efetuar o vínculo entre a imagem e o produto.

Critérios de aceite:

- O campo `produto_imagem` é opcional, mas, em caso de ser enviado no corpo da requisição deveremos processar a imagem vinculada a essa propriedade e armazenar a imagem em um servidor de armazenamento (Supabase, Blackblaze, etc...)
- Armazenar na coluna `produto_imagem` a URL que possibilita visualizar a imagem que foi efetuada upload para o servidor de armazenamento.

ATENÇÃO: Abaixo segue o exemplo de uma URL fictícia, mas que no caso, ilustra o que o serviço de armazenamento do Blackblaze retornaria após upload efetuado com sucesso, portanto essa seria no caso a URL que armazaremos na coluna produto_imagem no banco de dados.

// Resposta cadastro/atualização de produto (body)
{
    "descricao": "Motorola moto g9 plus",
    "quantidade_estoque": 100,
    "valor": 15000,
    "categoria_id": 2,
    "produto_imagem": "https://s3.us-east-005.backblazeb2.com/desafio-final.jpg"
}
Aprimorar exclusão de produto

Deverá ser aprimorada a exclusão de produto para que quando o produto for excluído também seja removida a imagem vinculada a ele na servidor de armazenamento.

Critérios de aceite:

- Na exclusão do produto a imagem vinculada a este produto deverá ser excluída do servidor de armazenamento.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published