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