From 21c3225c5260e8d24d3615709ae02eee36aeca70 Mon Sep 17 00:00:00 2001 From: Joelson <200138820+JuruSysadmin@users.noreply.github.com> Date: Tue, 16 Sep 2025 18:17:37 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20implementar=20melhorias=20na=20autentic?= =?UTF-8?q?a=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Adicionar refresh tokens para renovação automática de tokens - Implementar controle de sessões simultâneas - Adicionar blacklist de tokens para logout seguro - Implementar rate limiting para proteção contra ataques - Melhorar detecção de IP e identificação de sessão atual - Adicionar endpoints para gerenciamento de sessões - Corrigir inconsistências na validação de usuário - Atualizar configuração Redis com nova conexão --- .env | 3 +- API.md | 300 ------------------ CONTRIBUTING.md | 141 -------- README.md | 157 --------- db-connection-pool.md | 120 ------- dependencias-atualizadas.md | 30 -- docker-compose.monitoring.yml | 60 ---- health-check.md | 146 --------- monitoring-implementation.md | 179 ----------- seguranca-melhorias.md | 59 ---- src/auth/auth/auth.controller.ts | 162 +++++++++- src/auth/auth/auth.module.ts | 14 +- src/auth/auth/auth.service.ts | 77 ++++- src/auth/auth/dto/LoginResponseDto.ts | 5 +- src/auth/auth/dto/refresh-token.dto.ts | 26 ++ src/auth/auth/dto/session.dto.ts | 53 ++++ src/auth/guards/rate-limiting.guard.ts | 49 +++ src/auth/models/jwt-payload.model.ts | 2 + src/auth/services/rate-limiting.service.ts | 126 ++++++++ src/auth/services/refresh-token.service.ts | 173 ++++++++++ .../services/session-management.service.ts | 198 ++++++++++++ src/auth/services/token-blacklist.service.ts | 103 ++++++ src/auth/strategies/jwt-strategy.ts | 35 +- src/auth/users/users.module.ts | 8 +- src/core/configs/cache/IRedisClient.ts | 3 + src/core/configs/cache/index.html | 145 --------- .../configs/cache/redis-client.adapter.ts | 18 +- src/core/configs/cache/redis.provider.ts | 7 +- src/core/configs/typeorm.oracle.config.ts | 5 - .../reason-table/reason-table.controller.ts | 7 +- src/data-consult/data-consult.controller.ts | 2 + src/health/health.controller.ts | 16 +- .../orders-payment.controller.ts | 7 +- 33 files changed, 1061 insertions(+), 1375 deletions(-) delete mode 100644 API.md delete mode 100644 CONTRIBUTING.md delete mode 100644 README.md delete mode 100644 db-connection-pool.md delete mode 100644 dependencias-atualizadas.md delete mode 100644 docker-compose.monitoring.yml delete mode 100644 health-check.md delete mode 100644 monitoring-implementation.md delete mode 100644 seguranca-melhorias.md create mode 100644 src/auth/auth/dto/refresh-token.dto.ts create mode 100644 src/auth/auth/dto/session.dto.ts create mode 100644 src/auth/guards/rate-limiting.guard.ts create mode 100644 src/auth/services/rate-limiting.service.ts create mode 100644 src/auth/services/refresh-token.service.ts create mode 100644 src/auth/services/session-management.service.ts create mode 100644 src/auth/services/token-blacklist.service.ts delete mode 100644 src/core/configs/cache/index.html diff --git a/.env b/.env index ce8c9e7..69b41f9 100644 --- a/.env +++ b/.env @@ -31,8 +31,7 @@ THROTTLE_LIMIT=10 NODE_ENV=development -ORACLE_CLIENT_LIB_DIR=C:\\instantclient_19_25 - +ORACLE_CLIENT_LIB_DIR=C:\\instantclient_23_9 diff --git a/API.md b/API.md deleted file mode 100644 index be91fff..0000000 --- a/API.md +++ /dev/null @@ -1,300 +0,0 @@ -# Portal Juru API Documentation - -## Índice -1. [Autenticação](#autenticação) -2. [Endpoints](#endpoints) - - [Consulta de Dados](#consulta-de-dados) - - [Pedidos e Pagamentos](#pedidos-e-pagamentos) -3. [Modelos de Dados](#modelos-de-dados) -4. [Exemplos de Uso](#exemplos-de-uso) -5. [Códigos de Erro](#códigos-de-erro) - -## Autenticação - -A API utiliza autenticação JWT. Para acessar os endpoints protegidos, inclua o token no header: - -``` -Authorization: Bearer seu-token-jwt -``` - -## Endpoints - -### Consulta de Dados - -#### Listar Lojas -```http -GET /api/v1/data-consult/stores -``` - -**Resposta** -```json -[ - { - "id": "001", - "name": "Loja Principal", - "store": "001 - Loja Principal" - } -] -``` - -#### Listar Vendedores -```http -GET /api/v1/data-consult/sellers -``` - -**Resposta** -```json -[ - { - "id": "001", - "name": "João Silva" - } -] -``` - -#### Consultar Faturamento -```http -GET /api/v1/data-consult/billings -``` - -**Resposta** -```json -[ - { - "id": "001", - "date": "2024-04-02T10:00:00Z", - "total": 1000.00 - } -] -``` - -#### Filtrar Clientes -```http -GET /api/v1/data-consult/customers/:filter -``` - -**Parâmetros** -- `filter`: Termo de busca (nome, documento, etc.) - -**Resposta** -```json -[ - { - "id": "001", - "name": "Maria Silva", - "document": "123.456.789-00" - } -] -``` - -#### Buscar Produtos -```http -GET /api/v1/data-consult/products/:filter -``` - -**Parâmetros** -- `filter`: Termo de busca (nome, código, etc.) - -**Resposta** -```json -[ - { - "id": "001", - "name": "Produto Exemplo", - "manufacturerCode": "ABC123" - } -] -``` - -### Pedidos e Pagamentos - -#### Listar Pedidos da Loja -```http -GET /api/v1/orders-payment/orders/:id -``` - -**Parâmetros** -- `id`: ID da loja - -**Resposta** -```json -[ - { - "createDate": "2024-04-02T10:00:00Z", - "storeId": "001", - "orderId": 12345, - "customerId": "001", - "customerName": "João Silva", - "sellerId": "001", - "sellerName": "Maria Santos", - "billingId": "001", - "billingName": "Cartão de Crédito", - "planId": "001", - "planName": "3x sem juros", - "amount": 1000.00, - "installments": 3, - "amountPaid": 1000.00 - } -] -``` - -#### Buscar Pedido Específico -```http -GET /api/v1/orders-payment/orders/:id/:orderId -``` - -**Parâmetros** -- `id`: ID da loja -- `orderId`: ID do pedido - -**Resposta** -```json -{ - "createDate": "2024-04-02T10:00:00Z", - "storeId": "001", - "orderId": 12345, - "customerId": "001", - "customerName": "João Silva", - "sellerId": "001", - "sellerName": "Maria Santos", - "billingId": "001", - "billingName": "Cartão de Crédito", - "planId": "001", - "planName": "3x sem juros", - "amount": 1000.00, - "installments": 3, - "amountPaid": 1000.00 -} -``` - -#### Listar Pagamentos do Pedido -```http -GET /api/v1/orders-payment/payments/:id -``` - -**Parâmetros** -- `id`: ID do pedido - -**Resposta** -```json -[ - { - "orderId": 12345, - "payDate": "2024-04-02T10:00:00Z", - "card": "**** **** **** 1234", - "installments": 3, - "flagName": "VISA", - "type": "CREDITO", - "amount": 1000.00, - "userId": "001", - "nsu": "123456789", - "auth": "A12345" - } -] -``` - -#### Criar Pagamento -```http -POST /api/v1/orders-payment/payments/create -``` - -**Corpo da Requisição** -```json -{ - "orderId": 12345, - "card": "**** **** **** 1234", - "auth": "A12345", - "nsu": "123456789", - "installments": 3, - "amount": 1000.00, - "flagName": "VISA", - "paymentType": "CREDITO", - "userId": 1 -} -``` - -#### Criar Fatura -```http -POST /api/v1/orders-payment/invoice/create -``` - -**Corpo da Requisição** -```json -{ - "orderId": 12345, - "userId": 1 -} -``` - -## Modelos de Dados - -### OrderDto -```typescript -interface OrderDto { - createDate: Date; // Data de criação do pedido - storeId: string; // ID da loja - orderId: number; // ID do pedido - customerId: string; // ID do cliente - customerName: string; // Nome do cliente - sellerId: string; // ID do vendedor - sellerName: string; // Nome do vendedor - billingId: string; // ID da forma de pagamento - billingName: string; // Nome da forma de pagamento - planId: string; // ID do plano de pagamento - planName: string; // Nome do plano de pagamento - amount: number; // Valor total do pedido - installments: number; // Número de parcelas - amountPaid: number; // Valor total pago -} -``` - -### PaymentDto -```typescript -interface PaymentDto { - orderId: number; // ID do pedido - payDate: Date; // Data do pagamento - card: string; // Número do cartão - installments: number; // Número de parcelas - flagName: string; // Nome da bandeira - type: string; // Tipo de pagamento - amount: number; // Valor do pagamento - userId: string; // ID do usuário - nsu: string; // NSU da transação - auth: string; // Código de autorização -} -``` - -## Códigos de Erro - -| Código | Descrição | -|--------|-----------| -| 400 | Requisição inválida | -| 401 | Não autorizado | -| 403 | Acesso negado | -| 404 | Recurso não encontrado | -| 500 | Erro interno do servidor | - -## Exemplos de Uso - -### Exemplo de Requisição com cURL - -```bash -# Listar pedidos de uma loja -curl -X GET "http://localhost:3000/api/v1/orders-payment/orders/001" \ - -H "Authorization: Bearer seu-token-jwt" - -# Criar novo pagamento -curl -X POST "http://localhost:3000/api/v1/orders-payment/payments/create" \ - -H "Authorization: Bearer seu-token-jwt" \ - -H "Content-Type: application/json" \ - -d '{ - "orderId": 12345, - "card": "**** **** **** 1234", - "auth": "A12345", - "nsu": "123456789", - "installments": 3, - "amount": 1000.00, - "flagName": "VISA", - "paymentType": "CREDITO", - "userId": 1 - }' \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 66fd85e..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,141 +0,0 @@ -# Guia de Contribuição - -Obrigado por considerar contribuir para o Portal Juru API! Este documento fornece um conjunto de diretrizes para contribuir com o projeto. - -## Como Contribuir - -1. Faça um fork do projeto -2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`) -3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`) -4. Push para a branch (`git push origin feature/AmazingFeature`) -5. Abra um Pull Request - -## Padrões de Código - -### TypeScript/JavaScript - -- Use TypeScript para todo o código -- Siga o [style guide oficial do TypeScript](https://www.typescriptlang.org/docs/handbook/declaration-files/by-example.html) -- Use ESLint e Prettier para formatação -- Mantenha o código limpo e bem documentado - -### NestJS - -- Siga as [melhores práticas do NestJS](https://docs.nestjs.com/recipes/prisma) -- Use decorators apropriadamente -- Mantenha os módulos bem organizados -- Use DTOs para validação de dados - -### Banco de Dados - -- Use TypeORM para todas as operações de banco de dados -- Mantenha as queries SQL otimizadas -- Use transações quando necessário -- Documente as queries complexas - -## Estrutura do Projeto - -``` -src/ -├── core/ # Configurações e utilitários core -│ ├── configs/ # Configurações do projeto -│ ├── database/ # Configuração do banco de dados -│ └── constants/ # Constantes do sistema -├── data-consult/ # Módulo de consulta de dados -│ ├── dto/ # Data Transfer Objects -│ ├── controllers/ # Controladores -│ └── services/ # Serviços -├── orders-payment/ # Módulo de pedidos e pagamentos -│ ├── dto/ # Data Transfer Objects -│ ├── controllers/ # Controladores -│ └── services/ # Serviços -└── orders/ # Módulo de pedidos - ├── modules/ # Módulos - ├── controllers/ # Controladores - ├── services/ # Serviços - └── repositories/ # Repositórios -``` - -## Convenções de Commits - -Use o seguinte formato para commits: - -``` -(): - - - -