API RESTful e Real-time para o BreakFlow, um sistema de gerenciamento de pausas (café, almoço) focado em controle de fluxo e capacidade operacional.
O objetivo principal é evitar gargalos em operações (como suporte ou call centers) garantindo que um número limite de funcionários esteja ausente simultaneamente.
- Autenticação (JWT): Sistema de login seguro baseado em Tokens JWT.
- Multi-Tenancy: Arquitetura que separa os dados por
Empresa(Tenant). Um usuário de uma empresa não pode, em hipótese alguma, acessar dados de outra. - Controle de Acesso (RBAC): Sistema de papéis (Roles) com 3 níveis:
- DONO: Administrador mestre da empresa. Cria gestores e equipes.
- GESTOR: Gerencia equipes e funcionários, cria os "Eventos de Pausa" (limites, horários).
- FUNCIONARIO: Usuário final, que "bate o ponto" de saída e entrada da pausa.
- Controle de Fluxo em Tempo Real (WebSockets): O "coração" do projeto. Um gateway que gerencia o contador de "vagas" de pausa em tempo real, bloqueando ou liberando saídas instantaneamente.
- Gerenciamento de Pausas: CRUD para "Eventos de Pausa" (ex: "Almoço Equipe A"), definindo regras como limite de pessoas, duração máxima e horários permitidos.
- Logs e Auditoria: Registro de todos os horários de saída e volta, gerando dados para relatórios de gestores.
- Framework: Nest.js
- Linguagem: TypeScript
- Banco de Dados: PostgreSQL
- ORM: TypeORM
- Autenticação: JWT (com Passport.js)
- Real-time: WebSockets (Socket.io)
- Validação: Class Validator e Class Transformer
Siga os passos abaixo para configurar e executar o projeto em seu ambiente de desenvolvimento.
- Node.js (Recomendado: v18 ou superior)
- NPM ou Yarn
- Uma instância do PostgreSQL rodando (localmente ou via Docker).
Antes de iniciar o projeto, é necessário criar um arquivo chamado .env na raiz do projeto contendo as variáveis de ambiente utilizadas para conectar ao banco de dados e configurar o servidor.
Exemplo de configuração:
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=seu_usuario
DB_PASSWORD=sua_senha
DB_DATABASE=breakflow_db
SECRET=uma_chave_segura_aqui