Visão Geral da Arquitetura

O Sistema de Vendas será desenvolvido com Node.js e Express, seguindo uma arquitetura organizada para separar responsabilidades (Rotas, Controladores, Modelos/Acesso a Dados). Utilizaremos o padrão de API RESTful para a comunicação e o PostgreSQL como banco de dados, conforme o `script_vendas.sql`.

+----------------------------------+
|           CLIENTE                |
|  (Browser / Frontend / Postman)  |
+----------------------------------+
              |
              | HTTP Requests (GET, POST, PUT, DELETE)
              v
+----------------------------------+
|           EXPRESS                |
|      (Servidor Node.js)          |
+----------------------------------+
              |
              v
+----------------------------------+
|           ROTAS                  |
|    (Definição dos Endpoints      |
|     /api/clientes, /api/produtos...)
+----------------------------------+
              |
              v
+----------------------------------+
|        CONTROLLERS               |
|  (Lógica de Negócio e Validação) |
|  (clienteController, produtoController...)
+----------------------------------+
              |
              v
+----------------------------------+
|    MODELS / DATA ACCESS LAYER    |
|    (Interação com BD via driver pg)|
|  (clienteModel, produtoModel...) |
+----------------------------------+
              |
              v
+----------------------------------+
|        BANCO DE DADOS            |
|         (PostgreSQL)             |
|   (Tabelas: cliente, vendedor,   |
|    pedido, produto, item_pedido)|
+----------------------------------+

Estrutura de Diretórios Sugerida

A organização dos diretórios do projeto buscará clareza e modularidade:

sistema-vendas/
├── node_modules/
├── src/
│   ├── config/
│   │   └── database.js       # Configuração da conexão PostgreSQL
│   ├── controllers/
│   │   ├── clienteController.js
│   │   ├── vendedorController.js
│   │   ├── produtoController.js
│   │   ├── pedidoController.js
│   │   └── itemPedidoController.js # (Opcional, pode ser parte do pedidoController)
│   ├── models/             # Ou 'data-access', 'repositories'
│   │   ├── clienteModel.js
│   │   ├── vendedorModel.js
│   │   ├── produtoModel.js
│   │   ├── pedidoModel.js
│   │   └── itemPedidoModel.js
│   ├── routes/
│   │   ├── clienteRoutes.js
│   │   ├── vendedorRoutes.js
│   │   ├── produtoRoutes.js
│   │   ├── pedidoRoutes.js
│   │   └── index.js          # Arquivo principal que agrega as rotas
│   ├── utils/
│   │   └── dbUtils.js        # Funções utilitárias para o BD (ex: pool de conexão)
│   └── app.js              # Arquivo principal da aplicação Express
├── .env                    # Variáveis de ambiente (DB_HOST, DB_USER, etc.)
├── .gitignore
├── package.json
├── README.md
└── server.js               # Ponto de entrada (inicia o servidor)

Descrição dos Diretórios Principais (Foco no Backend)

  • src/: Contém o código-fonte da aplicação backend.
    • config/: Configurações, como os detalhes da conexão com o PostgreSQL.
    • controllers/: Responsáveis por receber as requisições das rotas, validar dados, chamar os modelos e retornar as respostas. Cada controlador foca em uma entidade (`cliente`, `produto`, etc.).
    • models/ (ou camada de acesso a dados): Contém a lógica para interagir diretamente com o banco de dados PostgreSQL (usando o driver `pg`), executando as queries SQL para buscar, inserir, atualizar ou deletar dados das tabelas (`cliente`, `produto`, etc.).
    • routes/: Define os endpoints da API RESTful (ex: `/api/clientes`, `/api/produtos/:codigo`) e direciona as requisições para os controladores apropriados.
    • utils/: Funções auxiliares, como a configuração do pool de conexões com o PostgreSQL.
    • app.js: Configura o Express, aplica middlewares (como o `express.json()`) e conecta as rotas.
  • server.js: Importa o `app.js` e inicia o servidor HTTP para escutar as requisições.
  • .env: Armazena de forma segura as credenciais do banco de dados e outras variáveis de ambiente.

Definição das Rotas da API (Baseado no `script_vendas.sql`)

A API RESTful terá endpoints para gerenciar as cinco entidades principais do sistema:

Rotas de Clientes (`/api/clientes`)
MétodoRotaDescriçãoRetorno
GET/Lista todos os clientesArray de clientes
GET/:codigoObtém um cliente específico pelo códigoDados do cliente
POST/Cria um novo clienteCliente criado
PUT/:codigoAtualiza um cliente existenteCliente atualizado
DELETE/:codigoRemove um clienteMensagem de sucesso
Rotas de Vendedores (`/api/vendedores`)
MétodoRotaDescriçãoRetorno
GET/Lista todos os vendedoresArray de vendedores
GET/:codigoObtém um vendedor específico pelo códigoDados do vendedor
POST/Cria um novo vendedorVendedor criado
PUT/:codigoAtualiza um vendedor existenteVendedor atualizado
DELETE/:codigoRemove um vendedorMensagem de sucesso
Rotas de Produtos (`/api/produtos`)
MétodoRotaDescriçãoRetorno
GET/Lista todos os produtosArray de produtos
GET/:codigoObtém um produto específico pelo códigoDados do produto
POST/Cria um novo produtoProduto criado
PUT/:codigoAtualiza um produto existenteProduto atualizado
DELETE/:codigoRemove um produtoMensagem de sucesso
Rotas de Pedidos (`/api/pedidos`)
MétodoRotaDescriçãoRetorno
GET/Lista todos os pedidos (cabeçalho)Array de pedidos
GET/:numeroObtém um pedido específico com seus itensDados do pedido e itens
POST/Cria um novo pedido (cabeçalho)Pedido criado
PUT/:numeroAtualiza dados do cabeçalho do pedidoPedido atualizado
DELETE/:numeroRemove um pedido e seus itensMensagem de sucesso
POST/:numero/itensAdiciona um item a um pedido existenteItem adicionado
PUT/:numero/itens/:produtoCodigoAtualiza a quantidade de um itemItem atualizado
DELETE/:numero/itens/:produtoCodigoRemove um item de um pedidoMensagem de sucesso

Nota: A gestão de itens pode ser feita através de sub-rotas de pedidos ou rotas dedicadas `/api/itens_pedido`, dependendo da preferência de design da API.

Próximos Passos

Com a arquitetura e as rotas definidas, podemos iniciar o desenvolvimento passo a passo da aplicação.