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:
| Método | Rota | Descrição | Retorno |
|---|---|---|---|
| GET | / | Lista todos os clientes | Array de clientes |
| GET | /:codigo | Obtém um cliente específico pelo código | Dados do cliente |
| POST | / | Cria um novo cliente | Cliente criado |
| PUT | /:codigo | Atualiza um cliente existente | Cliente atualizado |
| DELETE | /:codigo | Remove um cliente | Mensagem de sucesso |
| Método | Rota | Descrição | Retorno |
|---|---|---|---|
| GET | / | Lista todos os vendedores | Array de vendedores |
| GET | /:codigo | Obtém um vendedor específico pelo código | Dados do vendedor |
| POST | / | Cria um novo vendedor | Vendedor criado |
| PUT | /:codigo | Atualiza um vendedor existente | Vendedor atualizado |
| DELETE | /:codigo | Remove um vendedor | Mensagem de sucesso |
| Método | Rota | Descrição | Retorno |
|---|---|---|---|
| GET | / | Lista todos os produtos | Array de produtos |
| GET | /:codigo | Obtém um produto específico pelo código | Dados do produto |
| POST | / | Cria um novo produto | Produto criado |
| PUT | /:codigo | Atualiza um produto existente | Produto atualizado |
| DELETE | /:codigo | Remove um produto | Mensagem de sucesso |
| Método | Rota | Descrição | Retorno |
|---|---|---|---|
| GET | / | Lista todos os pedidos (cabeçalho) | Array de pedidos |
| GET | /:numero | Obtém um pedido específico com seus itens | Dados do pedido e itens |
| POST | / | Cria um novo pedido (cabeçalho) | Pedido criado |
| PUT | /:numero | Atualiza dados do cabeçalho do pedido | Pedido atualizado |
| DELETE | /:numero | Remove um pedido e seus itens | Mensagem de sucesso |
| POST | /:numero/itens | Adiciona um item a um pedido existente | Item adicionado |
| PUT | /:numero/itens/:produtoCodigo | Atualiza a quantidade de um item | Item atualizado |
| DELETE | /:numero/itens/:produtoCodigo | Remove um item de um pedido | Mensagem 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.