Backend API desenvolvido com NestJS para o projeto Pro4Tech, utilizando arquitetura modular, Prisma ORM para gerenciamento de banco de dados e Docker para containerização.
- Visual Studio Code - Editor de código
- Node
- PostgreSQL e MongoDB (para execução sem Docker)
- Docker - (Opcional)
Você pode rodar o backend de duas formas principais:
-
Clone o repositório
git clone https://github.com/seu-usuario/pro4tech-backend.git cd pro4tech-backend -
Configure as variáveis de ambiente
cp .env.example .env # Edite o arquivo .env conforme necessário # DATABASE_URL="postgresql://seu_usuario:sua_senha@localhost:5432/seu_banco_de_dados?schema=public" # MONGO_URI="mongodb://localhost:27017/orbita-chat"
-
Suba os bancos via Docker
docker-compose up -d postgres mongo # Esse comando sobe os DOIS serviços nomeados: postgres e mongo. # Se quiser subir apenas um, passe somente o nome dele (ex.: docker-compose up -d mongo). # docker-compose down para finalizar
-
Inicie o backend localmente
npm install npx prisma generate npx prisma migrate deploy npx prisma db seed # Popular o banco com dados iniciais (opcional) npm run start:dev -
Acessar a documentação da API: http://localhost:3333/api
Repita os passos 1 e 2 da Opção 1 para clonar o repositório e configurar as variáveis de ambiente.
-
Certifique-se de que PostgreSQL e MongoDB estão rodando localmente
- Configure
DATABASE_URLeMONGO_URIno.envconforme seu ambiente local.
- Configure
-
Gere o Prisma Client e inicie o backend
npm install npx prisma generate npx prisma migrate deploy npx prisma db seed # Popular o banco com dados iniciais (opcional) npm run start:dev -
Acessar a documentação da API: http://localhost:3333/api
pro4tech-backend/
│
├── 📂 .devcontainer/ # Configuração Dev Containers
├── 📂 docs/ # Documentação
│ ├── comandos.md # Comandos e guias detalhados
│ ├── security.md # Guias de segurança
│ └── chat/
│ └── chat-module.md # Guia do chat em tempo real
│
├── 📂 prisma/ # Prisma ORM
│ ├── schema.prisma # Schema do banco de dados
│ ├── seed.ts # Script de seed (dados iniciais)
│ └── migrations/ # Histórico de migrations
│
├── 📂 generated/
│ └── prisma/ # Prisma Client gerado
│
├── 📂 src/ # Código fonte
│ ├── main.ts # Entry point e configuração global
│ ├── app.module.ts # Módulo raiz (agregação de módulos)
│ ├── 📂 common/ # Código compartilhado
│ │ ├── decorators/ # Decoradores customizados
│ │ ├── dtos/ # DTOs globais
│ │ ├── filters/ # Filtros de exceção
│ │ └── interceptors/ # Interceptadores
│ ├── 📂 database/ # Camada de banco de dados
│ │ └── prisma/ # Módulo Prisma
│ └── 📂 modules/ # Módulos de negócio
│ ├── 📂 auth/ # Autenticação e autorização
│ ├── 📂 user/ # Gerenciamento de usuários
│ ├── 📂 agent/ # Gerenciamento de agentes/atendentes
│ ├── 📂 company/ # Gerenciamento de empresas
│ ├── 📂 ticket/ # Gerenciamento de tickets
│ ├── 📂 chat/ # Chat em tempo real (WebSocket)
│ ├── 📂 support-group/ # Grupos de suporte
│ ├── 📂 ticket-subject/# Assuntos de tickets
│ ├── 📂 triage-rule/ # Regras de triagem automatizada
│ └── 📂 accessCode/ # Códigos de acesso
│
├── 📂 test/ # Testes E2E
├── 📄 docker-compose.yml # Orquestração de containers
├── 📄 Dockerfile # Imagem Docker
└── 📄 package.json # Dependências
Tipo de Arquitetura: Modular
Comandos completos: Veja docs/comandos.md
Cada módulo de negócio segue o padrão:
- Controller: Recebe e trata requisições HTTP/WebSocket
- Service: Implementa a lógica de negócio
- Repository: Acessa dados no banco
- DTOs: Validação e tipagem de dados (entrada/saída)
- Module: Agregação e exportação do módulo
- Guardiões JWT customizados
- Decoradores de autenticação
- Gerenciamento de permissões
- CRUD completo de usuários
- Atribuição de papéis (roles)
- Cadastro de agentes
- Associação com grupos de suporte
- Status e disponibilidade
- Gerenciamento de empresas
- Configurações por empresa
- Ciclo de vida de chamados
- Histórico de mudanças e arquivamento
- Controle por perfil (CLIENT, AGENT, ADMIN)
- Chat por ticket com Socket.IO
- Persistência de mensagens no MongoDB
- Regras de acesso por perfil e vínculo ao ticket
- Organização de agentes em grupos
- Roteamento de tickets
- Categorização de tickets
- Gerenciamento de assuntos disponíveis
- Triagem automatizada de tickets
- Roteamento inteligente para grupos
- Estrutura de regras em árvore
- ORM: Prisma
- Banco relacional principal: PostgreSQL
- Banco para chat: MongoDB (via Mongoose)
- Migrations: Prisma (
prisma/migrations)
O projeto inclui um seed que popula o banco com dados iniciais para facilitar testes.
npx prisma db seed- Empresas: empresas de exemplo
- Usuários: usuários com diferentes papéis (admin, agent, client)
- Agentes: agentes de atendimento
- Grupos de Suporte: grupos organizados por contexto
- Assuntos: categorias de tickets
- Regras de Triagem: roteamento automático
Veja prisma/seed.ts para detalhes completos.
Para resetar o banco e reexecutar todas as migrations + seed:
npx prisma migrate reset --force
# Isso irá:
# 1. Dropar o banco
# 2. Recriar o banco
# 3. Executar todas as migrations
# 4. Executar o seed automaticamente# Desenvolvimento
npm run start:dev # Inicia com hot-reload
npm run start:debug # Inicia em modo debug
# Produção
npm run build # Build do projeto
npm run start:prod # Inicia versão otimizada
# Banco de Dados
npx prisma generate # Gerar cliente Prisma
npx prisma studio # UI visual do banco
npx prisma migrate dev --name nome_da_migration # Criar nova migration
npx prisma migrate deploy # Aplicar migrations
npx prisma db seed # Popular dados iniciais
# Linting e Testes
npm run lint # ESLint
npm run test # Testes unitários
npm run test:e2e # Testes E2E
npm run test:cov # Cobertura de testesEste projeto está sob a licença especificada no arquivo LICENSE.