- Use Google Distroless images for all services (Go & Node.js). - Standardize documentation with [PROJECT-NAME].md. - Add .dockerignore and .gitignore to all projects. - Remove docker-compose.yml in favor of docker run instructions. - Fix Go version and dependency issues in observability, repo-integrations, and security-governance. - Add Podman support (fully qualified image names). - Update Dashboard to use Node.js static server for Distroless compatibility.
99 lines
2.9 KiB
Markdown
99 lines
2.9 KiB
Markdown
# CRM-CORE
|
|
|
|
O `crm-core` é um microserviço especializado na gestão operacional de relacionamento com o cliente (CRM) para plataformas B2B SaaS. Ele é agnóstico a regras de faturamento e foca exclusivamente no ciclo de vida de vendas e gestão de contatos.
|
|
|
|
## 📋 Visão Geral
|
|
|
|
Este serviço foi desenhado para ser integrado via API e não possui interface própria. Ele delega a autenticação para o `identity-gateway` e opera em estrito isolamento multi-tenant.
|
|
|
|
**O que ele faz:**
|
|
- ✅ Gestão de Contas (Accounts) e Contatos.
|
|
- ✅ Pipelines de Vendas, Estágios e Oportunidades (Deals).
|
|
- ✅ Registro de Atividades e Notas.
|
|
|
|
**O que ele NÃO faz:**
|
|
- ❌ Faturamento ou ERP (ver `billing-finance-core`).
|
|
- ❌ Deployment de infraestrutura (ver `automation-jobs-core`).
|
|
- ❌ Autenticação de usuários.
|
|
|
|
### Arquitetura
|
|
|
|
```mermaid
|
|
graph TD
|
|
Client[Frontend / API Gateway] -->|HTTP REST| API[CRM Core API]
|
|
API -->|Valida JWT| Identity[Identity Gateway]
|
|
|
|
subgraph CRM Domain
|
|
API --> Accounts
|
|
API --> Contacts
|
|
API --> Deals
|
|
API --> Activities
|
|
end
|
|
|
|
API --> DB[(PostgreSQL)]
|
|
```
|
|
|
|
## 🚀 Estrutura do Projeto
|
|
|
|
O projeto é escrito em **Go** e segue a Clean Architecture simplificada:
|
|
|
|
| Diretório | Descrição |
|
|
| :--- | :--- |
|
|
| `cmd/api` | Ponto de entrada da aplicação. |
|
|
| `internal/domain` | Entidades e interfaces. |
|
|
| `internal/usecase` | Regras de negócio. |
|
|
| `internal/handler` | Controladores HTTP (Chi Router). |
|
|
| `internal/repository` | Acesso a dados (pgx). |
|
|
|
|
## 🛠️ Tecnologias e Otimizações
|
|
|
|
- **Linguagem**: Go 1.23+
|
|
- **Router**: Chi
|
|
- **Database Driver**: Jackc/pgx
|
|
- **Containerização**:
|
|
- Baseada em `gcr.io/distroless/static:nonroot`.
|
|
- Binário compilado estaticamente com `-ldflags="-w -s"`.
|
|
- Imagem final ultraleve (~20MB).
|
|
|
|
## 💻 Como Executar
|
|
|
|
### Docker (Recomendado)
|
|
|
|
```bash
|
|
# Build
|
|
docker build -t crm-core .
|
|
|
|
# Run
|
|
docker run -p 8080:8080 --env-file .env crm-core
|
|
```
|
|
A API estará disponível na porta `8080`.
|
|
|
|
### Desenvolvimento
|
|
|
|
1. **Dependências**: Go 1.23+, PostgreSQL.
|
|
2. **Setup**:
|
|
```bash
|
|
cp .env.example .env
|
|
go mod tidy
|
|
```
|
|
3. **Executar**:
|
|
```bash
|
|
go run ./cmd/api/main.go
|
|
```
|
|
|
|
## 🔐 Segurança e Multi-tenancy
|
|
|
|
O serviço implementa **Row-Level Security (RLS)** lógico na aplicação:
|
|
|
|
1. **Trust**: Confia em tokens JWT assinados pelo `identity-gateway`.
|
|
2. **Contexto**: O `tenantId` é extraído do token em cada requisição.
|
|
3. **Isolamento**: Todos os repositórios injetam automaticamente `WHERE tenant_id = $1` em todas as queries.
|
|
|
|
## 🔧 Detalhes do Dockerfile
|
|
|
|
|
|
- **Builder**: Imagem `golang:1.23-alpine`. Compila o binário estático.
|
|
- **Runtime (Distroless)**: Imagem `static:nonroot` do Google.
|
|
- Sem shell (`/bin/sh`).
|
|
- Sem gerenciador de pacotes (`apk`).
|
|
- Executa como usuário não-privilegiado (UID 65532).
|