core/crm-core/CRM-CORE.md
Tiago Yamamoto a52bd4519d refactor: optimize Dockerfiles and documentation for core services
- 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.
2025-12-30 13:22:34 -03:00

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