Arquitetura do Sistema
Esta página descreve a arquitetura geral do Sistema Divino Alimento, incluindo suas principais camadas, componentes e tecnologias.
Visão Geral da Arquitetura
A versão Mercados do Divino Alimento utiliza uma arquitetura moderna em camadas, integrando React no frontend, GraphQL como camada de API, e mantendo o backend Node.js com Express e PostgreSQL.
┌─────────────────────────────────────────┐
│ FRONTEND (Views) │
│ React + TypeScript + Next.js │
│ shadcn/ui + Tailwind CSS │
└──────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ API LAYER (GraphQL) │
│ Apollo Server / GraphQL │
│ Queries, Mutations, Subscriptions │
└──────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ BACKEND (Controllers) │
│ Node.js + Express.js │
│ Resolvers + Business Logic │
└──────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ MODELS (ORM) │
│ Sequelize + PostgreSQL │
└─────────────────────────────────────────┘
Camadas da Aplicação
1. Camada de Apresentação (Frontend)
Tecnologias:
- React 18+ com TypeScript
- Next.js (App Router)
- shadcn/ui (componentes)
- Tailwind CSS (estilização)
- React Hook Form + Zod (validação)
- Apollo Client (GraphQL)
- Recharts (visualizações)
Responsabilidades:
- Renderizar interfaces de usuário modernas e responsivas
- Validação de formulários com schemas Zod
- Gerenciamento de estado local e global
- Comunicação com API GraphQL via Apollo Client
- Experiência de usuário otimizada
2. Camada de API (GraphQL)
Tecnologias:
- Apollo Server
- GraphQL (schema, queries, mutations)
- DataLoader (otimização de queries)
Estrutura de Schema:
type Query {
mercados: [Mercado!]!
mercado(id: ID!): Mercado
produtos: [Produto!]!
ciclos: [Ciclo!]!
# ... outras queries
}
type Mutation {
criarMercado(input: MercadoInput!): Mercado!
atualizarMercado(id: ID!, input: MercadoInput!): Mercado!
# ... outras mutations
}
Responsabilidades:
- Definir schema GraphQL
- Resolver queries e mutations
- Validar dados de entrada
- Otimizar consultas com DataLoader
- Autenticação e autorização em nível de resolver
3. Camada de Aplicação (Backend)
Tecnologias:
- Node.js
- Express.js (framework web)
- Passport.js (autenticação OAuth)
- Sequelize (ORM)
Estrutura de Services:
services/
├── auth-service.js # Autenticação e sessões
├── user-service.js # Gestão de usuários
├── produto-service.js # Gestão de produtos
├── mercado-service.js # Gestão de mercados
├── ciclo-service.js # Gestão de ciclos
├── oferta-service.js # Ofertas de fornecedores
├── pedido-service.js # Pedidos
└── relatorio-service.js # Geração de relatórios
Responsabilidades:
- Lógica de negócio
- Processamento de dados
- Autorização e controle de acesso
- Integração com banco de dados
- Geração de relatórios
4. Camada de Dados (Models)
Tecnologias:
- PostgreSQL (banco de dados relacional)
- Sequelize ORM (Object-Relational Mapping)
Principais Modelos (Versão Mercados):
models/
├── User.js # Usuários do sistema
├── Profile.js # Perfis (Fornecedor, Consumidor, Admin, AdminMercado)
├── Mercado.js # Mercados locais
├── Product.js # Produtos comercializados
├── Category.js # Categorias de produtos
├── Ciclo.js # Ciclos de comercialização
├── PrecoMercado.js # Preços por mercado
├── PreMercado.js # Pré-mercados (planejamento)
├── PontoEntrega.js # Pontos de entrega
├── Oferta.js # Ofertas de produtos
├── Pedido.js # Pedidos
└── ItemPedido.js # Itens dos pedidos
Fluxo de Dados
Exemplo: Criar um Mercado (Versão Mercados)
1. Usuário (Admin) → Preenche formulário React com validação Zod
2. Frontend → Apollo Client executa mutation GraphQL
3. GraphQL → Mutation criarMercado(input: MercadoInput)
4. Resolver → Valida autenticação e permissões
5. Resolver → Chama mercado-service.criar(data)
6. Service → Aplica lógica de negócio
7. Service → Model Mercado.create() via Sequelize
8. PostgreSQL → INSERT INTO mercados
9. PostgreSQL → Retorna mercado criado
10. Service → Retorna dados formatados
11. Resolver → Retorna tipo Mercado para GraphQL
12. Apollo Client → Atualiza cache e estado
13. Frontend → Exibe feedback de sucesso
Banco de Dados
Esquema Relacional Simplificado (Versão Mercados)
users (id, email, name, google_id)
│
├─► user_profiles (user_id, profile_id)
│
profiles (id, name: 'Fornecedor'|'Consumidor'|'Administrador'|'AdminMercado')
mercados (id, nome, descricao, ativo, admin_id)
│
├─► pontos_entrega (id, mercado_id, nome, endereco)
│
└─► preco_mercados (id, mercado_id, produto_id, preco, ativo)
produtos (id, nome, categoria_id, unidade_medida)
│
categorias (id, nome)
ciclos (id, mercado_id, nome, status, data_inicio, data_fim)
│
├─► pre_mercados (id, ciclo_id, produto_id, quantidade_estimada)
│
├─► ofertas (id, ciclo_id, fornecedor_id, produto_id, quantidade)
│
└─► pedidos (id, ciclo_id, consumidor_id, status, total)
│
└─► itens_pedido (id, pedido_id, produto_id, quantidade, preco_unitario)
Próximos Passos
- Tecnologias e Ferramentas - Conheça todas as tecnologias utilizadas no projeto
- Estrutura de Diretórios - Entenda a organização de pastas e arquivos
- Padrões de Design - Aprenda os padrões de design utilizados no projeto
- Autenticação e Autorização - Entenda como funciona o sistema de autenticação
- Configuração do Ambiente - Configure seu ambiente de desenvolvimento
- Como Contribuir - Saiba como começar a contribuir