Pular para o conteúdo principal
Versão: Versão Mercados

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