Estrutura de Diretórios
Esta página documenta a organização de pastas e arquivos do projeto Divino Alimento versão Mercados, facilitando a navegação e compreensão do código.
Visão Geral do Projeto
O projeto está dividido em duas partes principais:
- Backend (Node.js): API GraphQL, lógica de negócio e integração com banco de dados
- Frontend (Next.js): Interface de usuário moderna com React e TypeScript
Backend (Node.js)
Estrutura Completa
app/
├── config/ # Configurações da aplicação
│ ├── database.js # Configuração Sequelize
│ ├── passport.js # Estratégias de autenticação
│ └── apollo.js # Configuração Apollo Server
│
├── graphql/ # Camada GraphQL
│ ├── schema/ # Definições de tipos GraphQL
│ │ ├── index.js # Schema principal
│ │ ├── mercado.graphql # Tipos relacionados a mercados
│ │ ├── produto.graphql # Tipos relacionados a produtos
│ │ ├── ciclo.graphql # Tipos relacionados a ciclos
│ │ ├── user.graphql # Tipos relacionados a usuários
│ │ └── pedido.graphql # Tipos relacionados a pedidos
│ │
│ ├── resolvers/ # Resolvers para queries e mutations
│ │ ├── index.js # Agregador de resolvers
│ │ ├── mercado.js # Resolvers de mercados
│ │ ├── produto.js # Resolvers de produtos
│ │ ├── ciclo.js # Resolvers de ciclos
│ │ ├── user.js # Resolvers de usuários
│ │ └── pedido.js # Resolvers de pedidos
│ │
│ └── directives/ # Directives customizadas
│ ├── auth.js # Directive de autenticação
│ └── hasRole.js # Directive de autorização por papel
│
├── models/ # Modelos Sequelize (ORM)
│ ├── index.js # Configuração e associações
│ ├── user.js # Modelo de Usuário
│ ├── profile.js # Modelo de Perfil
│ ├── mercado.js # Modelo de Mercado
│ ├── produto.js # Modelo de Produto
│ ├── categoria.js # Modelo de Categoria
│ ├── ciclo.js # Modelo de Ciclo
│ ├── preco-mercado.js # Modelo de Preço por Mercado
│ ├── pre-mercado.js # Modelo de Pré-Mercado
│ ├── ponto-entrega.js # Modelo de Ponto de Entrega
│ ├── oferta.js # Modelo de Oferta
│ ├── pedido.js # Modelo de Pedido
│ └── item-pedido.js # Modelo de Item de Pedido
│
├── services/ # Lógica de negócio
│ ├── auth-service.js # Serviços de autenticação
│ ├── user-service.js # Serviços de usuários
│ ├── mercado-service.js # Serviços de mercados
│ ├── produto-service.js # Serviços de produtos
│ ├── ciclo-service.js # Serviços de ciclos
│ ├── oferta-service.js # Serviços de ofertas
│ ├── pedido-service.js # Serviços de pedidos
│ └── relatorio-service.js # Serviços de relatórios
│
├── middlewares/ # Middlewares Express
│ ├── auth.js # Verificação de autenticação
│ ├── error-handler.js # Tratamento de erros
│ └── logger.js # Logging de requisições
│
├── utils/ # Funções utilitárias
│ ├── validators.js # Validadores customizados
│ ├── formatters.js # Formatadores de dados
│ ├── date-helpers.js # Helpers de datas
│ └── email.js # Envio de emails
│
├── migrations/ # Migrações do banco de dados
│ ├── 20251122000001-create-mercado.js
│ ├── 20251122000002-add-mercadoId-to-ponto-entrega.js
│ ├── 20251122000003-create-preco-mercado.js
│ └── ...
│
├── seeders/ # Seeds para dados iniciais
│ ├── 20250101000001-demo-users.js
│ ├── 20250101000002-demo-produtos.js
│ └── ...
│
├── tests/ # Testes automatizados
│ ├── unit/ # Testes unitários
│ │ ├── services/ # Testes de services
│ │ └── models/ # Testes de models
│ │
│ ├── integration/ # Testes de integração
│ │ ├── graphql/ # Testes de queries/mutations
│ │ └── api/ # Testes de endpoints REST
│ │
│ └── e2e/ # Testes end-to-end
│ └── scenarios/ # Cenários de teste
│
├── features/ # Testes BDD (Cucumber)
│ ├── mercado.feature # Especificações de mercado
│ ├── ciclo.feature # Especificações de ciclo
│ └── step_definitions/ # Implementações dos steps
│
├── .env.example # Exemplo de variáveis de ambiente
├── .gitignore # Arquivos ignorados pelo Git
├── docker-compose.yml # Configuração Docker Compose
├── Dockerfile # Imagem Docker do backend
├── package.json # Dependências Node.js
├── .sequelizerc # Configuração Sequelize CLI
└── server.js # Ponto de entrada da aplicação
Descrição das Pastas Backend
config/
Arquivos de configuração da aplicação, incluindo banco de dados, autenticação OAuth e Apollo Server.
graphql/
Toda a camada GraphQL do projeto, dividida em:
- schema/: Definições de tipos, queries e mutations em arquivos .graphql
- resolvers/: Implementações que conectam o schema às funções de negócio
- directives/: Diretivas customizadas para autenticação e autorização
models/
Modelos Sequelize que representam as tabelas do banco de dados e seus relacionamentos.
services/
Camada de lógica de negócio. Contém as regras e processos da aplicação, chamados pelos resolvers.
middlewares/
Funções intermediárias do Express para autenticação, tratamento de erros e logging.
utils/
Funções auxiliares reutilizáveis em toda a aplicação.
migrations/
Scripts de migração do banco de dados versionados, executados via Sequelize CLI.
seeders/
Scripts para popular o banco com dados iniciais ou de teste.
tests/
Testes automatizados organizados por tipo (unitários, integração, e2e).
features/
Especificações BDD escritas em Gherkin para testes Cucumber.
Frontend (Next.js + React)
Estrutura Completa
frontend/
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── layout.tsx # Layout principal
│ │ ├── page.tsx # Página inicial
│ │ ├── globals.css # Estilos globais
│ │ │
│ │ ├── (auth)/ # Grupo de rotas de autenticação
│ │ │ ├── login/
│ │ │ │ └── page.tsx # Página de login
│ │ │ └── callback/
│ │ │ └── page.tsx # Callback OAuth
│ │ │
│ │ ├── (dashboard)/ # Grupo de rotas protegidas
│ │ │ ├── layout.tsx # Layout do dashboard
│ │ │ ├── mercados/ # Seção de mercados
│ │ │ │ ├── page.tsx # Lista de mercados
│ │ │ │ ├── [id]/
│ │ │ │ │ └── page.tsx # Detalhes do mercado
│ │ │ │ └── novo/
│ │ │ │ └── page.tsx # Criar mercado
│ │ │ │
│ │ │ ├── produtos/ # Seção de produtos
│ │ │ │ ├── page.tsx # Lista de produtos
│ │ │ │ ├── [id]/
│ │ │ │ │ └── page.tsx # Detalhes do produto
│ │ │ │ └── novo/
│ │ │ │ └── page.tsx # Criar produto
│ │ │ │
│ │ │ ├── ciclos/ # Seção de ciclos
│ │ │ │ ├── page.tsx # Lista de ciclos
│ │ │ │ ├── [id]/
│ │ │ │ │ └── page.tsx # Detalhes do ciclo
│ │ │ │ └── novo/
│ │ │ │ └── page.tsx # Criar ciclo
│ │ │ │
│ │ │ └── pedidos/ # Seção de pedidos
│ │ │ ├── page.tsx # Lista de pedidos
│ │ │ └── [id]/
│ │ │ └── page.tsx # Detalhes do pedido
│ │ │
│ │ └── api/ # API Routes (opcional)
│ │ └── graphql/
│ │ └── route.ts # Proxy GraphQL
│ │
│ ├── components/ # Componentes React
│ │ ├── ui/ # Componentes shadcn/ui
│ │ │ ├── button.tsx # Botão
│ │ │ ├── input.tsx # Input
│ │ │ ├── select.tsx # Select
│ │ │ ├── dialog.tsx # Modal/Dialog
│ │ │ ├── table.tsx # Tabela
│ │ │ ├── card.tsx # Card
│ │ │ ├── badge.tsx # Badge
│ │ │ └── ... # Outros componentes base
│ │ │
│ │ ├── forms/ # Componentes de formulários
│ │ │ ├── mercado-form.tsx # Formulário de mercado
│ │ │ ├── produto-form.tsx # Formulário de produto
│ │ │ ├── ciclo-form.tsx # Formulário de ciclo
│ │ │ └── pedido-form.tsx # Formulário de pedido
│ │ │
│ │ ├── layout/ # Componentes de layout
│ │ │ ├── header.tsx # Cabeçalho
│ │ │ ├── sidebar.tsx # Barra lateral
│ │ │ ├── footer.tsx # Rodapé
│ │ │ └── nav.tsx # Navegação
│ │ │
│ │ ├── mercados/ # Componentes de mercados
│ │ │ ├── mercado-card.tsx # Card de mercado
│ │ │ ├── mercado-list.tsx # Lista de mercados
│ │ │ └── mercado-filters.tsx # Filtros de mercados
│ │ │
│ │ ├── produtos/ # Componentes de produtos
│ │ │ ├── produto-card.tsx # Card de produto
│ │ │ ├── produto-list.tsx # Lista de produtos
│ │ │ └── produto-table.tsx # Tabela de produtos
│ │ │
│ │ └── shared/ # Componentes compartilhados
│ │ ├── loading.tsx # Indicador de carregamento
│ │ ├── error-boundary.tsx # Tratamento de erros
│ │ └── empty-state.tsx # Estado vazio
│ │
│ ├── lib/ # Utilitários e configurações
│ │ ├── apollo-client.ts # Configuração Apollo Client
│ │ ├── utils.ts # Funções utilitárias
│ │ ├── mercado-helpers.ts # Helpers de mercados
│ │ ├── mercado-formatters.ts # Formatadores de mercados
│ │ ├── precomercado-helpers.ts # Helpers de pré-mercado
│ │ └── validators.ts # Validadores Zod
│ │
│ ├── graphql/ # Queries e Mutations GraphQL
│ │ ├── queries/ # Queries
│ │ │ ├── mercados.ts # Queries de mercados
│ │ │ ├── produtos.ts # Queries de produtos
│ │ │ ├── ciclos.ts # Queries de ciclos
│ │ │ └── pedidos.ts # Queries de pedidos
│ │ │
│ │ └── mutations/ # Mutations
│ │ ├── mercados.ts # Mutations de mercados
│ │ ├── produtos.ts # Mutations de produtos
│ │ ├── ciclos.ts # Mutations de ciclos
│ │ └── pedidos.ts # Mutations de pedidos
│ │
│ ├── hooks/ # Custom Hooks React
│ │ ├── use-mercados.ts # Hook para mercados
│ │ ├── use-produtos.ts # Hook para produtos
│ │ ├── use-ciclos.ts # Hook para ciclos
│ │ ├── use-auth.ts # Hook de autenticação
│ │ └── use-toast.ts # Hook de notificações
│ │
│ ├── types/ # Tipos TypeScript
│ │ ├── mercado.ts # Tipos de mercado
│ │ ├── produto.ts # Tipos de produto
│ │ ├── ciclo.ts # Tipos de ciclo
│ │ ├── ciclo-mercado.ts # Tipos de ciclo-mercado
│ │ ├── user.ts # Tipos de usuário
│ │ └── api.ts # Tipos da API
│ │
│ ├── data/ # Dados estáticos
│ │ └── mercados-locais.ts # Lista de mercados locais
│ │
│ └── styles/ # Estilos adicionais
│ └── tailwind.css # Customizações Tailwind
│
├── public/ # Arquivos estáticos
│ ├── images/ # Imagens
│ ├── icons/ # Ícones
│ └── favicon.ico # Favicon
│
├── test/ # Testes frontend
│ ├── lib/ # Testes de utilitários
│ │ ├── mercado-formatters.test.js # Testes de formatadores
│ │ └── precomercado-helpers.test.js # Testes de helpers
│ │
│ └── components/ # Testes de componentes
│ └── ...
│
├── .env.local.example # Exemplo de variáveis de ambiente
├── .gitignore # Arquivos ignorados pelo Git
├── next.config.js # Configuração Next.js
├── tailwind.config.js # Configuração Tailwind CSS
├── tsconfig.json # Configuração TypeScript
├── postcss.config.js # Configuração PostCSS
├── components.json # Configuração shadcn/ui
└── package.json # Dependências frontend
Descrição das Pastas Frontend
src/app/
Sistema de rotas do Next.js 14+ (App Router). Organizado por grupos de rotas como (auth) e (dashboard).
src/components/
Componentes React organizados por funcionalidade:
- ui/: Componentes base do shadcn/ui
- forms/: Formulários específicos de domínio
- layout/: Componentes de estrutura da página
- mercados/, produtos/: Componentes específicos de cada domínio
- shared/: Componentes reutilizáveis gerais
src/lib/
Configurações e utilitários, incluindo Apollo Client e funções auxiliares.
src/graphql/
Definições de queries e mutations GraphQL organizadas por domínio.
src/hooks/
Custom hooks React para lógica reutilizável e integração com GraphQL.
src/types/
Definições de tipos TypeScript para type-safety em todo o projeto.
public/
Arquivos estáticos servidos diretamente pelo Next.js.
test/
Testes do frontend, incluindo testes de componentes e utilitários.
Arquivos de Configuração Importantes
Backend
.env: Variáveis de ambiente (não versionado).env.example: Modelo de variáveis de ambientedocker-compose.yml: Orquestração de containersDockerfile: Imagem Docker do backend.sequelizerc: Configuração de paths do Sequelize CLIserver.js: Ponto de entrada da aplicação
Frontend
.env.local: Variáveis de ambiente locais (não versionado)next.config.js: Configuração do Next.jstailwind.config.js: Customizações do Tailwind CSStsconfig.json: Configuração do TypeScriptcomponents.json: Configuração do shadcn/ui
Convenções de Nomenclatura
Arquivos
- Componentes React: PascalCase (
MercadoCard.tsx) - Arquivos utilitários: kebab-case (
mercado-helpers.ts) - Models Sequelize: kebab-case (
preco-mercado.js) - Services: kebab-case (
mercado-service.js) - Testes: mesmo nome do arquivo +
.testou.spec
Pastas
- kebab-case: Para todas as pastas (
step_definitions,mercados,graphql)
Variáveis e Funções
- camelCase: Para variáveis e funções JavaScript/TypeScript
- PascalCase: Para componentes React e classes
- UPPER_SNAKE_CASE: Para constantes
Próximos Passos
- Configuração do Ambiente - Configure seu ambiente seguindo esta estrutura
- Arquitetura do Sistema - Entenda como essas pastas se relacionam
- Como Contribuir - Comece a contribuir respeitando esta organização