Sistema de Gestão de Requisição de Material de Escritório com Spring Boot e Vue 3

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 ApiResponse gené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.

Tags: Spring Boot Vue 3 MyBatis-Plus pinia Element Plus

Publicado em 6-15 18:43 por Thomas