Skip to content

Commit e00667a

Browse files
Create README.md
1 parent 692d519 commit e00667a

1 file changed

Lines changed: 130 additions & 0 deletions

File tree

README.md

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
# API de Gerenciamento de CRM - Virtus
2+
Esta é uma API RESTful completa desenvolvida em Java com Spring Boot 3.
3+
Ela serve como backend para um sistema de CRM e gerenciamento de vendas (Virtus), permitindo o controle de usuários (administradores, supervisores, colaboradores), clientes, propostas, vendas e metas.
4+
5+
A API é projetada para ser robusta, segura e escalável, utilizando autenticação baseada em JWT, gerenciamento de banco de dados com Flyway e funcionalidades avançadas como importação de planilhas Excel para clientes e vendas.
6+
7+
## 🚀 Tecnologias Utilizadas
8+
Este projeto utiliza um conjunto de tecnologias modernas para garantir performance e manutenibilidade:
9+
10+
* **Core:**
11+
* Java 17
12+
* Spring Boot 3.5.0
13+
14+
* **Acesso a Dados:**
15+
* Spring Data JPA (Hibernate)
16+
* MySQL (Driver `mysql-connector-j`)
17+
18+
* **Migrações de Banco:**
19+
* Flyway
20+
21+
* **Segurança:**
22+
* Spring Security 6
23+
* JWT (JSON Web Tokens) - via `auth0/java-jwt`
24+
25+
* **Web:**
26+
* Spring Web (para APIs RESTful)
27+
28+
* **Utilitários:**
29+
* Lombok (redução de boilerplate)
30+
* MapStruct (mapeamento eficiente de DTOs)
31+
* Apache POI (leitura e escrita de arquivos Excel `.xlsx`)
32+
33+
* **Validação:**
34+
* Spring Boot Starter Validation (Jakarta Bean Validation)
35+
36+
* **Build:**
37+
* Apache Maven
38+
39+
* **Testes:**
40+
* JUnit 5 (via `spring-boot-starter-test`)
41+
* H2 (banco de dados em memória para testes)
42+
43+
## ✨ Principais Funcionalidades
44+
A API oferece um conjunto completo de funcionalidades para gerenciamento de vendas:
45+
46+
* **Autenticação e Autorização:**
47+
* Sistema de login seguro baseado em JWT (Email/Senha).
48+
* Controle de acesso baseado em papéis (RBAC) com 3 níveis: `ADMIN`, `SUPERVISOR`, e `USER` (Colaborador).
49+
50+
* **Gerenciamento de Usuários:**
51+
* CRUD completo para Administradores, Supervisores e Colaboradores (disponível apenas para `ADMIN`).
52+
53+
* **Gestão de Clientes:**
54+
* CRUD completo de clientes.
55+
* Listagem de clientes filtrada por permissão (Colaborador vê apenas os seus, Supervisor vê os da sua equipe, Admin vê todos).
56+
* Funcionalidade de importação de clientes em lote via planilha Excel (`.xlsx`).
57+
* Reatribuição de clientes entre colaboradores.
58+
59+
* **Gestão de Vendas e Propostas:**
60+
* Registro de Propostas de Venda.
61+
* Registro de Vendas efetivadas (com cálculo de comissão baseado no regime de contratação - CLT/MEI).
62+
* Importação de Vendas e Propostas em lote via planilhas.
63+
64+
* **Metas e Performance:**
65+
* Definição e acompanhamento de Metas de vendas, que podem ser individuais (por Colaborador) ou de equipe (por Supervisor).
66+
67+
* **Dashboards e Relatórios:**
68+
* Endpoints para popular dashboards com KPIs (taxa de conversão, clientes ativos, valor vendido, progresso da meta).
69+
* Relatórios filtráveis (vendas por período, por banco, comissões).
70+
71+
* **Gestão de Carteiras:**
72+
* Visualização da carteira de clientes e performance de vendas por Supervisor e sua respectiva equipe.
73+
74+
## 🔑 Segurança: Autenticação e Papéis
75+
A segurança da API é gerenciada pelo Spring Security. O acesso aos endpoints é protegido e requer um token JWT válido, que deve ser enviado no header `Authorization` (ex: `Bearer <token>`).
76+
O acesso é diferenciado por papéis (Roles), definidos centralmente em `SecurityConfig.java`:
77+
78+
* **`ROLE_ADMIN`:**
79+
* Acesso total ao sistema.
80+
* Pode gerenciar (CRUD) Administradores, Supervisores e Colaboradores.
81+
* **`ROLE_SUPERVISOR`:**
82+
* Acesso aos seus próprios dados e aos dados de toda a sua equipe (Colaboradores).
83+
* Pode acessar relatórios, dashboards da equipe e gerenciar metas.
84+
* Pode importar planilhas de clientes.
85+
* **`ROLE_USER` (Colaborador):**
86+
* Acesso restrito apenas aos seus próprios dados.
87+
* Pode gerenciar seus clientes, propostas e vendas.
88+
89+
## 🗃️ Banco de Dados e Migrações
90+
91+
O esquema do banco de dados é gerenciado pelo **Flyway**. As migrações são executadas automaticamente na inicialização da aplicação.
92+
93+
* **Localização dos Scripts:** `src/main/resources/db.migrations`
94+
* **Banco de Dados:** O projeto está configurado para **MySQL**.
95+
* **Principais Tabelas:**
96+
* `TBL_ADMINISTRADOR`
97+
* `TBL_SUPERVISOR`
98+
* `TBL_COLABORADOR`
99+
* `TBL_CLIENTES_DADOS`
100+
* `TBL_VENDA`
101+
* `TBL_PROPOSTA_VENDA`
102+
* `TBL_META`
103+
104+
## ⚙️ Configuração e Variáveis de Ambiente
105+
Para executar a aplicação, é necessário configurar as seguintes variáveis de ambiente. Elas são lidas a partir do arquivo `application.properties`.
106+
107+
* `STORAGE_ACESS_LINK`: A URL de conexão JDBC completa do banco de dados. (Ex: `jdbc:mysql://servidor:3306/meu_banco`)
108+
* `STORAGE_USER`: O nome de usuário para conexão com o banco.
109+
* `STORAGE_PASS`: A senha para conexão com o banco.
110+
* `TOKENPASS`: A chave secreta utilizada para assinar e validar os tokens JWT.
111+
112+
## 📦 Build (Gerando o .jar)
113+
Para gerar o arquivo `.jar` executável:
114+
115+
```bash
116+
./mvnw clean package
117+
```
118+
119+
O arquivo final estará em `target/demo-0.0.1-SNAPSHOT.jar`.
120+
121+
## 🔄 CI/CD - Implantação Contínua
122+
O projeto está configurado com um fluxo de CI/CD usando **GitHub Actions**, definido em `.github/workflows/deploy.yml`.
123+
124+
* **Gatilho:** Qualquer `push` na branch `dev`.
125+
* **Ações:**
126+
1. Checkout do código.
127+
2. Configuração do Java 17.
128+
3. Build do projeto com Maven (`mvn clean package`).
129+
4. Login no Azure.
130+
5. Deploy automático do `.jar` gerado para o **Azure Web App** configurado.

0 commit comments

Comments
 (0)