|
| 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