# Guia de Teste da API com Postman

Este documento explica como testar os endpoints da API do sistema **Gestão Raul** utilizando o Postman.

---

## 1. Passo 1: Obter o Token de Acesso (Login)

Como a API é protegida, você precisa primeiro de um token de autorização.

1.  Abra o **Postman** e crie uma nova aba de requisição.
2.  Mude o método para **POST**.
3.  Coloque a URL: `http://localhost:8000/api/v1/token/`
4.  Vá na aba **Body**, selecione a opção **raw** e escolha **JSON** no menu à direita.
5.  Insira suas credenciais no formato abaixo:
    ```json
    {
        "username": "seu_usuario_django",
        "password": "sua_senha_django"
    }
    ```
6.  Clique em **Send**.
7.  No resultado (JSON), copie o código que aparece no campo `"access"`.

---

## 2. Passo 2: Acessar os Endpoints da API

Agora que você tem o token, pode acessar qualquer endpoint protegido (ex: Pedidos).

1.  Crie uma nova aba de requisição no Postman.
2.  Mude o método para **GET**.
3.  Coloque a URL do endpoint que deseja testar, por exemplo:
    `http://localhost:8000/api/v1/orders/`
4.  Vá na aba **Authorization** (fica logo abaixo da URL).
5.  No campo **Type**, selecione **Bearer Token**.
6.  No campo **Token** (à direita), cole o código `"access"` que você copiou no Passo 1.
7.  Clique em **Send**.

Você deverá ver a lista de dados em formato JSON.

---

## Dicas Rápidas
- **Erro 401 Unauthorized:** Significa que o token não foi enviado corretamente ou expirou. Obtenha um novo no Passo 1.
- **CORS:** O backend está configurado para aceitar requisições de outras origens (CORS), permitindo que seu frontend se conecte normalmente.
- **Endpoints Disponíveis:**
    - `/api/v1/orders/` (Pedidos)
    - `/api/v1/products/` (Produtos)
    - `/api/v1/clients/` (Clientes)
    - `/api/v1/mesas/` (Mesas)
    - `/api/v1/comandas/` (Comandas)
    - `/api/v1/items-comanda/` (Itens de Comanda)
    - `/api/v1/categories/` (Categorias)
    - `/api/v1/payment-types/` (Tipos de Pagamento)
    - `/api/v1/payments/` (Registro de Pagamentos)

---

## 3. Ações Especiais (Custom Actions)

### Apagar/Limpar Comanda Inteira
Esta ação exclui todos os itens vinculados à comanda e muda o seu status para `CLOSED`.
- **Método:** `POST`
- **URL:** `http://localhost:8000/api/v1/comandas/{ID_DA_COMANDA}/apagar/`
- **Auth:** Bearer Token necessário.
- **Body:** Vazio.

### Apagar um Item Individual da Comanda
Esta ação exclui um único item e devolve a quantidade correspondente ao estoque.
- **Método:** `DELETE`
- **URL:** `http://localhost:8000/api/v1/items-comanda/{ID_DO_ITEM}/`
- **Auth:** Bearer Token necessário.
- **Body:** Vazio.

### Pagar e Fechar Comanda
Esta ação registra um pagamento e fecha a comanda automaticamente.
- **Método:** `POST`
- **URL:** `http://localhost:8000/api/v1/comandas/{ID_DA_COMANDA}/pagar/`
- **Auth:** Bearer Token necessário.
- **Body (JSON):**
  ```json
  {
      "value": 50.00,
      "type_pay": 1,        // ID do tipo de pagamento
      "client": null,       // ID do cliente (opcional)
      "description": "Pagamento total" // Opcional
  }
  ```

### Listar Fiados de um Cliente
Retorna todas as comandas com status `FIADO` vinculadas a um cliente específico.
- **Método:** `GET`
- **URL:** `http://localhost:8000/api/v1/clients/{ID_DO_CLIENTE}/fiados/`
- **Auth:** Bearer Token necessário.
- **Body:** Vazio.

### Pagar Múltiplos Fiados
Recebe uma lista de IDs de comandas com status `FIADO`, gera os pagamentos e fecha todas.
- **Método:** `POST`
- **URL:** `http://localhost:8000/api/v1/clients/pagar_fiados/`
- **Auth:** Bearer Token necessário.
- **Body (JSON):**
  ```json
  {
      "ids": [10, 11, 15]  // IDs das comandas que deseja pagar
  }
  ```

---

## 4. Gerenciamento de Pedidos (Orders)

### Editar Observação do Pedido
Altera as observações de um pedido específico.
- **Método:** `PATCH`
- **URL:** `http://localhost:8000/api/v1/orders/{ID_DO_PEDIDO}/`
- **Auth:** Bearer Token necessário.
- **Body (JSON):**
  ```json
  {
      "obs": "Nova observação detalhada"
  }
  ```

### Atualizar Status do Pedido
Ações para movimentar o fluxo da cozinha/atendimento.
- **Método:** `POST`
- **URLs:** 
  - `.../api/v1/orders/{ID_DO_PEDIDO}/preparing/` (Iniciar Preparo)
  - `.../api/v1/orders/{ID_DO_PEDIDO}/finish/` (Marcar como Pronto)
  - `.../api/v1/orders/{ID_DO_PEDIDO}/deliver/` (Marcar como Entregue)
  - `.../api/v1/orders/{ID_DO_PEDIDO}/cancel/` (Cancelar Pedido)
- **Auth:** Bearer Token necessário.
- **Body:** Vazio.
