Este projeto contém uma API robusta desenvolvida com NestJS para gerenciar operações financeiras e administrativas de empresas e usuários, incluindo autenticação, gestão de usuários, empresas, registros de valores e relatórios. A API oferece rotas bem definidas e seguras para diversas funcionalidades.
- Autenticação e Autorização: Registro de novos usuários, login/logout e autenticação baseada em JWT com cookies seguros.
- Gestão de Usuários: Criação, leitura, atualização e exclusão de usuários com diferentes níveis de acesso (Operador, Admin).
- Gestão de Empresas: Criação, leitura, atualização e exclusão de informações de empresas.
- Registros de Valores: Gerenciamento de entradas de valores (espécie, cartão, pix, despesas) por usuário e data.
- Relatórios: Geração e gestão de relatórios financeiros baseados em dados de entrada de valores.
- Validação de Dados: Validação robusta de requisições e esquemas de resposta usando
class-validatoreclass-transformer. - Controle de Acesso: Implementação de guardas de rota baseados em papéis (
RolesEnum.OPERADOR,RolesEnum.ADMIN).
A API foi desenvolvida com NestJS e TypeScript, utilizando as seguintes dependências principais:
@nestjs/core: Framework principal para construção da API.@nestjs/config: Módulo para gerenciamento de variáveis de ambiente.@prisma/client: Cliente Prisma para interagir com o banco de dados PostgreSQL.argon2: Biblioteca para hash seguro de senhas.class-validatoreclass-transformer: Para validação e transformação de objetos de dados (DTOs).jsonwebtoken: Para geração e verificação de JSON Web Tokens (JWT).rxjs: Biblioteca para programação reativa.uuid: Para geração de IDs únicos.
O projeto utiliza PostgreSQL com Prisma como ORM. As principais entidades são:
tbcargo: Define os cargos dos usuários e seus níveis de acesso.tbempresa: Armazena informações das empresas (nome, CNPJ, endereço, etc.).tbentradadevalores: Registra as entradas de valores diárias por usuário (espécie, cartão, pix, despesas).tbrelatorio: Gerencia os relatórios gerados, com referência ao usuário e caminho do arquivo.tbusuario: Contém os dados dos usuários (nome, CPF, email, senha, cargo, empresa).
GET /- RetornaHello CaixaNaMão!.
POST /auth/login- Autenticação de usuário e obtenção de token JWT.POST /auth/register- Registro de um novo usuário.
GET /users- Lista todos os usuários (requer autenticação e papéis específicos).GET /users/:id- Obtém um usuário específico por ID (requer autenticação e papéis específicos).PATCH /users/:id- Atualiza um usuário específico por ID (requer autenticação e papéis específicos).DELETE /users/:id- Remove um usuário específico por ID (requer autenticação e papéis específicos).
POST /companies- Cria uma nova empresa (requer autenticação e papéis específicos).GET /companies- Lista todas as empresas (requer autenticação e papéis específicos).GET /companies/:id- Obtém uma empresa específica por ID (requer autenticação e papéis específicos).PATCH /companies/:id- Atualiza uma empresa específica por ID (requer autenticação e papéis específicos).DELETE /companies/:id- Remove uma empresa específica por ID (requer autenticação e papéis específicos).
POST /registers- Cria um novo registro de entrada de valores (requer autenticação e papéis específicos).GET /registers- Lista todos os registros de entrada de valores (requer autenticação e papéis específicos).GET /registers/:id- Obtém um registro específico por ID (requer autenticação e papéis específicos).PATCH /registers/:id- Atualiza um registro específico por ID (requer autenticação e papéis específicos).DELETE /registers/:id- Remove um registro específico por ID (requer autenticação e papéis específicos).
POST /reports- Cria um novo relatório (requer autenticação e papéis específicos).GET /reports- Lista todos os relatórios (requer autenticação e papéis específicos).GET /reports/:id- Obtém um relatório específico por ID (requer autenticação e papéis específicos).PATCH /reports/:id- Atualiza um relatório específico por ID (requer autenticação e papéis específicos).DELETE /reports/:id- Remove um relatório específico por ID (requer autenticação e papéis específicos).
Para executar a API localmente, siga os passos abaixo:
git clone https://github.com/1manuelc/caixanamao-api.git
cd caixanamao-apinpm install
# ou
pnpm install
# ou
yarn installCrie um arquivo .env na raiz do projeto com as seguintes variáveis:
DATABASE_URL="postgresql://<user>:<password>@<host>:<port>/<database_name>"
SECRET_KEY="<jwt-secret>"
MASTER_ACCESS_TOKEN = "<your-master-access-token>"
NODE_ENV=<development | production | test>
PORT=3000Execute as migrações do Prisma para criar as tabelas:
npx prisma migrate dev --name initnpm run start:devA API estará disponível em http://localhost:3000 (ou na porta configurada em PORT).
npm run build- Compila o projeto TypeScript para JavaScript.npm run format- Formata o código com Prettier.npm run start- Inicia a API em modo de produção (requer compilação prévia).npm run start:dev- Inicia a API em modo de desenvolvimento com hot-reload.npm run start:debug- Inicia a API em modo debug com hot-reload.npm run start:prod- Inicia a API em modo de produção (usando o build).npm run lint- Executa o linter e corrige problemas.
A API utiliza JWT (JSON Web Tokens) para autenticação em cabeçalhos de autorização. O fluxo de autenticação envolve o registro e login para obtenção de um token que deve ser enviado em requisições subsequentes para rotas protegidas.
Todas as requisições são validadas usando class-validator e class-transformer do NestJS, garantindo a integridade dos dados. Erros de validação retornam mensagens claras e estruturadas.
O NestJS oferece suporte a CORS por padrão ou através de módulos específicos, permitindo requisições de diferentes origens. A configuração exata pode ser encontrada no main.ts ou em um módulo de configuração.