A arquitetura de um sistema corporativo para controle de materiais de escritório exige uma separação clara entre a interface do usuário e a lógica de negócios. Esta implementação utiliza uma stack moderna baseada em Java e JavaScript, garantindo escalabilidade e manutenção simplificada através de uma API RESTful e uma Single Page Application (SPA).
Stack Tecnológico
Camada de Serviços (Backend)
- Framework: Spring Boot 2.7.x
- ORM: MyBatis-Plus 3.5.x
- Banco de Dados Relacional: MySQL 8.0+
- Cache e Sessão: Redis 6.0+
- Segurança: JSON Web Tokens (JWT)
- Gerenciador de Depandências: Maven
Interface do Usuário (Frontend)
- Framework: Vue.js 3.3+ (Composition API)
- Roteamento: Vue Router 4.x
- Gerenciamento de Estado: Pinia 2.x
- UI Library: Element Plus 2.3.x
- Build Tool: Vite 4.x
- Pré-processador CSS: SCSS
Estrutura de Diretórios
O repositório segue uma organização monolítica modular, facilitando o versionamento e o fluxo de CI/CD:
corporate-supply-platform/
├── sql-scripts/ # Scripts de migração e seed
│ └── schema_setup.sql
├── client-app/ # Aplicação Vue.js
│ ├── src/
│ │ ├── services/ # Camada de comunicação HTTP
│ │ ├── ui-components/ # Componentes reutilizáveis
│ │ ├── core-layouts/ # Estrutura visual base
│ │ ├── navigation/ # Definição de rotas
│ │ ├── state/ # Stores do Pinia
│ │ ├── pages/ # Views principais
│ │ └── assets/ # Estilos globais e imagens
│ ├── package.json
│ └── vite.config.ts
├── server-api/ # Aplicação Spring Boot
│ └── src/main/
│ ├── java/com/corp/supplies/
│ │ ├── exceptions/ # Tratamento global de erros
│ │ ├── security/ # Configuração JWT e filtros
│ │ ├── endpoints/ # REST Controllers
│ │ ├── models/ # Entidades JPA/MyBatis
│ │ ├── repositories/ # Mappers de dados
│ │ └── business/ # Regras de negócio
│ └── resources/
│ └── application.yaml
└── pom.xml
Provisionamento e Execução
Configuração do Banco de Dados
Inicialize o esquema relacional executando os seguintes comandos no terminal MySQL:
CREATE DATABASE corp_inventory_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE corp_inventory_db;
SOURCE sql-scripts/schema_setup.sql;
Em seguida, atualize as credenciais de conexão no arquivo application.yaml do servidor.
Inicialização dos Serviços
Para compilar e iniciar a API na porta padrão:
cd server-api
mvn clean compile
mvn spring-boot:run
Para o ambiente de desenvolvimento da interface gráfica:
cd client-app
npm install
npm run dev
Módulos Funcionais
Portal do Colaberador
- Autenticação e controle de sessão.
- Catálogo de itens disponíveis para solicitação.
- Submissão de requisições de materiais.
- Acompanhamento de status de aprovações.
- Atualização de preferências de perfil.
Painel Administrativo
- Gerenciamento de contas de usuários e setores.
- CRUD de categorias e cadastro de insumos.
- Fluxo de aprovação de requisições pendentes.
- Controle de entrada, saída e níveis de estoque.
Contratos de API REST
A comunicação entre cliente e servidor segue o padrão REST, utilizando JSON como formato de intercâmbio.
Módulo de Identidade
POST /api/v1/identity/authenticate- Geração de token de acesso.POST /api/v1/identity/register- Criação de novo colaborador.GET /api/v1/identity/profile- Recuperação de dados da sessão.
Módulo de Inventário
GET /api/v1/inventory/items- Listagem paginada de materiais.GET /api/v1/inventory/items/{itemId}- Detalhes de um insumo específico.POST /api/v1/inventory/items- Adição de novo material ao catálogo.PUT /api/v1/inventory/items- Atualização de metadados do material.DELETE /api/v1/inventory/items/{itemId}- Remoção lógica de item.
Módulo de Requisições
GET /api/v1/requests- Histórico paginado de solicitações.POST /api/v1/requests- Envio de nova demanda de materiais.PUT /api/v1/requests/evaluate/{requestId}- Ação gerencial (aprovar/rejeitar).
Diretrizes de Engenharia
Práticas no Backend
- Abstração de persistência através do MyBatis-Plus para operações CRUD eficientes.
- Padronização de respostas HTTP utilizando um objeto
ApiResponsegenérico. - Implementação de interceptadores para validação de tokens JWT em rotas protegidas.
- Uso de soft-delete para preservar histórico de auditoria no banco de dados.
Práticas no Frontend
- Adoção estrita da Composition API do Vue 3 para melhor reutilização de lógica através de composables.
- Estado global reativo gerenciado via Pinia, evitando o fluxo excessivo de propriedades entre componentes.
- Integração com Element Plus para construção de formulários complexos e tabelas de dados.
- Layouts adaptáveis utilizando SCSS e media queries para diferentes resoluções.
Estratégia de Deploy
Serviço Java
Gere o artefato executável e inicie o processo em background no servidor de aplicação:
mvn clean package -DskipTests
java -jar target/supply-platform-2.0.jar
Aplicação Web
Compile os assets estáticos otimizados para o ambiente de produção:
npm run build
O diretório dist resultante deve ser servido através de um servidor web reverso, como Nginx, configurado adequadamente para redirecionar chamadas com prefixo /api para o backend.
Considerações Operacionais
- Verifique a disponibilidade e conectividade dos clusters Redis e MySQL antes da inicialização da aplicação.
- Configure as políticas de CORS no Spring Security para permitir requisições apenas de domínios confiáveis.
- Substitua variáveis de ambiente e credenciais padrão por segredos gerenciados dinamicamente em ambientes produtivos.
- Exija tráfego criptografado via TLS/SSL para todas as rotas expostas publicamente na rede.