Skip to the content.

Abaixo está a estrutura completa do nosso projeto “Gestão de Estoques”, detalhada com comentários que explicam o propósito de cada diretório e arquivo principal.


🗺️ Estrutura de Pastas e Arquivos do Projeto

A organização do nosso projeto segue as convenções do Maven e as melhores práticas para uma aplicação Spring Boot com uma API REST desacoplada e um frontend SPA.

Visão Geral da Estrutura

gestaodeestoques/
├── .mvn/                                  // Arquivos do Maven Wrapper
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── br/com/aula/gestaodeestoques/
│   │   │       ├── GestaodeestoquesApplication.java    // Ponto de entrada da aplicação Spring Boot
│   │   │       ├── config/
│   │   │       │   ├── CustomAuthenticationSuccessHandler.java // (Não utilizado na versão API REST, mas mantido para referência de estudos)
│   │   │       │   ├── DataSeeder.java                     // Popula o banco de dados com dados iniciais
│   │   │       │   ├── OpenApiConfig.java                  // Configuração global do Swagger/OpenAPI
│   │   │       │   └── SecurityConfig.java                 // Configuração principal do Spring Security (stateless com JWT)
│   │   │       │   └── security/
│   │   │       │       ├── JwtAuthenticationFilter.java    // O "segurança" que valida o token em cada requisição
│   │   │       │       └── JwtTokenProvider.java           // Classe utilitária para criar e validar tokens JWT
│   │   │       ├── controller/
│   │   │       │   ├── AdminController.java                // Endpoint de exemplo para administradores
│   │   │       │   ├── AuthenticationController.java       // Endpoint para login (/api/auth/login)
│   │   │       │   ├── CategoriaController.java            // Endpoints para /api/categorias
│   │   │       │   ├── FornecedorController.java           // Endpoints para /api/fornecedores
│   │   │       │   └── ProdutoController.java              // Endpoints para /api/produtos
│   │   │       ├── dto/
│   │   │       │   ├── CategoriaDTO.java
│   │   │       │   ├── ErrorResponseDTO.java               // DTO para padronizar respostas de erro
│   │   │       │   ├── FornecedorDTO.java
│   │   │       │   ├── ProdutoDTO.java                     // DTO para exibir produtos
│   │   │       │   ├── ProdutoFormDTO.java                 // DTO para receber dados de formulários de produto
│   │   │       │   └── auth/
│   │   │       │       ├── JwtAuthenticationResponse.java  // DTO para a resposta de login com o token
│   │   │       │       └── LoginRequest.java               // DTO para a requisição de login
│   │   │       ├── exception/
│   │   │       │   ├── GlobalExceptionHandler.java         // Handler global para tratar exceções da API
│   │   │       │   └── ResourceNotFoundException.java      // Exceção customizada para erros 404
│   │   │       ├── mapper/
│   │   │       │   ├── CategoriaMapper.java
│   │   │       │   ├── FornecedorMapper.java
│   │   │       │   └── ProdutoMapper.java
│   │   │       ├── model/
│   │   │       │   ├── Categoria.java
│   │   │       │   ├── Fornecedor.java
│   │   │       │   ├── Papel.java
│   │   │       │   ├── Produto.java
│   │   │       │   └── Usuario.java
│   │   │       ├── repository/
│   │   │       │   ├── CategoriaRepository.java
│   │   │       │   ├── FornecedorRepository.java
│   │   │       │   ├── PapelRepository.java
│   │   │       │   ├── ProdutoRepository.java
│   │   │       │   └── UsuarioRepository.java
│   │   │       └── service/
│   │   │           ├── DatabaseUserDetailsService.java     // Carrega dados do usuário para o Spring Security
│   │   │           ├── CategoriaService.java, FornecedorService.java, ProdutoService.java // Interfaces dos serviços
│   │   │           └── impl/
│   │   │               └── CategoriaServiceImpl.java, FornecedorServiceImpl.java, ProdutoServiceImpl.java // Implementações
│   │   └── resources/
│   │       ├── application.properties                      // Configurações principais (H2, JWT secret)
│   │       ├── application-prod.properties                 // Configurações para o ambiente de produção (PostgreSQL)
│   │       ├── schema.sql                                  // Script de criação das tabelas para o H2
│   │       └── static/                                     // <-- Raiz de todos os arquivos do Frontend (SPA)
│   │           ├── css/
│   │           │   └── style.css
│   │           ├── js/
│   │           │   ├── api.js                              // Módulo para centralizar as chamadas à API
│   │           │   ├── auth.js                             // Módulo para gerenciar autenticação (token, login, logout)
│   │           │   └── router.js                           // Módulo para roteamento no lado do cliente
│   │           ├── index.html                              // A "casca" principal da SPA
│   │           └── login.html                              // Página de login estática
│   └── test/
│       └── java/
│           └── br/com/aula/gestaodeestoques/
│               ├── GestaodeestoquesApplicationTests.java
│               ├── controller/
│               │   └── ProdutoControllerTest.java          // Teste de integração para o controller de produtos
│               └── service/
│                   └── impl/
│                       └── ProdutoServiceImplTest.java     // Teste unitário para o serviço de produtos
├── .gitignore                                 // Arquivos e pastas a serem ignorados pelo Git
├── Dockerfile                                 // Receita para construir a imagem Docker da aplicação
├── docker-compose.yml                         // Orquestrador para subir a API e o banco PostgreSQL
├── mvnw                                       // Executável do Maven Wrapper para Unix/Linux
├── mvnw.cmd                                   // Script do Maven Wrapper para Windows
└── pom.xml                                    // O coração do projeto Maven: dependências e build

### Análise das Responsabilidades de cada Diretório

Esta estrutura não é aleatória; ela segue o princípio da Separação de Responsabilidades para manter o projeto organizado e escalável.

📁 src/main/java/br/com/aula/gestaodeestoques/ - O Coração do Backend

📁 src/main/resources/ - Configurações e o Frontend

📁 Raiz do Projeto (/) - Ferramentas de Build e Deploy

Esta estrutura clara e bem definida é a marca de um projeto profissional, tornando-o mais fácil de entender, manter e escalar no futuro.