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

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 ambiente
  • docker-compose.yml: Orquestração de containers
  • Dockerfile: Imagem Docker do backend
  • .sequelizerc: Configuração de paths do Sequelize CLI
  • server.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.js
  • tailwind.config.js: Customizações do Tailwind CSS
  • tsconfig.json: Configuração do TypeScript
  • components.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 + .test ou .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