Esta aplicação é uma solução Full Stack desenvolvida para o gerenciamento centralizado de documentos digitais. O sistema permite que usuários realizem o upload seguro de arquivos (PDF, PNG, JPG), visualizem metadados, realizem o download dos itens armazenados e mantenham um histórico de comentários vinculado a cada documento. O projeto foca em alta coesão e baixo acoplamento, utilizando arquitetura em camadas e DTOs para proteção da camada de domínio.
- Java 21
- Spring Boot
- Spring Data JPA
- PostgreSQL (Banco de Dados Principal)
- H2 Database (Exclusivo para Testes Unitários e de Integração)
- Java NIO (New I/O)
- Bean Validation
- Java Records
- HTML5
- CSS3
- JavaScript
- Maven
- Git
- Arquitetura REST: Design de API utilizando os verbos HTTP corretos e endpoints semânticos.
- Separação de Conceitos: Isolamento claro entre a camada de apresentação (Controller), regras de negócio (Service) e acesso a dados (Repository).
- Segurança de Dados: Utilização de DTOs para prevenir a exposição direta de entidades do banco de dados.
-
Gestão de Arquivos (Upload/Download):
- Upload via
MultipartFile. - Armazenamento físico na pasta local
/uploadscom renomeação via UUID para evitar conflitos. - Download de arquivos preservando o tipo de conteúdo (MIME Type).
- Upload via
-
Metadados e Organização:
- Persistência de título, descrição, nome original e data de upload.
- Listagem otimizada de documentos cadastrados.
-
Histórico e Colaboração:
- Feed de Comentários: Cada documento possui seu próprio histórico de interações.
- Integridade: Comentários estritamente vinculados ao documento pai.
- Timeline: Registro automático de data e hora da criação.
-
Visualização Inteligente (Preview):
- Detecção automática do tipo de arquivo.
- Imagens: Visualização direta na tela de detalhes.
- PDFs: Leitura incorporada via iframe.
- Outros: Fallback elegante com botão de download.
-
Colaboração:
- Feed de Comentários: Histórico de interações por documento.
- Interatividade: Adição de comentários em tempo real via API.
O projeto segue uma estrutura baseada em camadas dentro do pacote br.com.testrmh, facilitando a navegação:
teste-mrh/
├── backend/ #Módulo Servidor (Spring Boot)
│ ├── src/main/java/br/com/testrmh
│ │ ├── controller/ #Endpoints REST
│ │ ├── service/ #Regras de Negócio e I/O
│ │ ├── repository/ #Interfaces JPA
│ │ ├── model/ #Entidades (Documento, Comentario)
│ │ └── dto/ #Records (Transferência de dados)
│ └── src/main/resources/ #Configurações (application.properties)
│
├── frontend/ #Módulo Cliente (Estático)
│ ├── css/ #Estilos (styles.css, upload.css, etc.)
│ ├── scripts/ #Lógica Unificada (main.js)
│ ├── index.html #Menu Principal
│ ├── upload.html #Tela de Envio
│ ├── documentos.html #Listagem (Tabela)
│ └── detalhes.html #Visualização e Chat
│
├── uploads/ #Armazenamento físico (Gerado automaticamente)
└── banco_teste.mv.db #Arquivo de Banco de Dados (H2)
- Java JDK 21 instalado.
- Maven 3.8+ instalado.
- PostgreSQL instalado e com um banco de dados criado. (Caso queira utilizar já possui a Lib de conexão)
- Navegador Web
git clone https://github.com/Guismx/teste-mrh.git
application.properties
spring.datasource.url=jdbc:postgresql://localhost:5432/nome_do_seu_banco
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senha
spring.jpa.hibernate.ddl-auto=update
server.port=9090
Na raiz do projeto, execute:
1. Navegue até a pasta do back-end:
cd backend
Bash
2. Execute a aplicação:
mvn spring-boot:run
O servidor estará ativo em: http://localhost:080 (conferir a porta utilizada)
Como o Frontend é construído com tecnologias nativas (HTML/JS), não é necessário build.
Navegue até a pasta frontend.
Abra o arquivo index.html diretamente no seu navegador (dois cliques)
ou use uma extensão como "Live Server".
Armazenamento: Os arquivos físicos são salvos na pasta /uploads na raiz do projeto. Esta pasta é criada automaticamente no primeiro upload.
CORS: O Backend está configurado (@CrossOrigin("")) para aceitar requisições do Frontend local.