API REST robusta e escalável para gerenciamento completo de registros financeiros, contas bancárias e transações, com autenticação segura e documentação interativa.
- Autenticação JWT com tokens de acesso e refresh
- Gerenciamento de Usuários com validação de ownership
- Gestão de Bancos com seeds pré-configurados
- Contas Bancárias com diferentes tipos (corrente, poupança, investimento)
- Transações Financeiras (receitas, despesas, transferências)
- Notificações por Email (boas-vindas, reset de senha)
- Documentação Swagger/OpenAPI em
/api - Cobertura de Testes (unitários e integração)
- Docker & Docker Compose para ambiente de desenvolvimento
- Redis para cache e sessões
- CI/CD com GitHub Actions
- Node.js 18+ - Runtime JavaScript
- TypeScript 5.9 - Linguagem tipada
- Express 5 - Framework web
- PostgreSQL - Banco de dados relacional
- TypeORM 0.3 - ORM para TypeScript
- Redis 5 - Cache e gerenciamento de sessões
- JWT - Tokens de autenticação
- bcryptjs - Hash de senhas
- Zod - Validação de schemas
- class-validator - Validação de DTOs
- Swagger/OpenAPI - Documentação interativa
- Nodemailer - Envio de emails
- ESLint - Linting de código
- Jest - Framework de testes
- Docker - Containerização
Antes de começar, certifique-se de ter instalado:
- Node.js 18 ou superior
- PostgreSQL 14+
- Redis 5+
- Docker e Docker Compose (opcional, mas recomendado)
- npm ou yarn
git clone https://github.com/seu-usuario/payment_records.git
cd payment_recordsnpm installCrie um arquivo .env na raiz do projeto:
# Servidor
PORT=3000
FRONTEND_URL=http://localhost:5173
# PostgreSQL
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_DATABASE=payment_records
# JWT
ACCESS_SECRET=seu-access-secret-aqui
ACCESS_EXPIRE=15m
REFRESH_SECRET=seu-refresh-secret-aqui
REFRESH_EXPIRE=7d
RESET_SECRET=seu-reset-secret-aqui
RESET_EXPIRE=15m
# Email (SMTP)
SMTP_HOST=smtp.gmail.com
EMAIL_USER=seu-email@gmail.com
EMAIL_PASS=sua-senha-app
# Redis
REDIS_URL=redis://localhost:6379docker-compose up -dIsso iniciará:
- PostgreSQL na porta
5432 - Redis na porta
6379
# Desenvolvimento (com hot-reload)
npm run dev
# Produção
npm run build
npm startO servidor estará disponível em http://localhost:3000.
Abra seu navegador em: http://localhost:3000/api
Requisições autenticadas devem incluir o token JWT:
Cookie:
access_token=<seu-token-jwt>
Ou Header:
Authorization: Bearer <seu-token-jwt>Body (JSON):
{
"campo": "valor"
}Todas as respostas seguem o padrão DefaultMessage:
Sucesso:
{
"success": true,
"message": "Operação realizada com sucesso",
"data": {
"id": "123",
"name": "Exemplo"
}
}Erro:
{
"success": false,
"message": "Mensagem de erro descritiva",
"status": 400
}POST /auth/register- Registrar novo usuárioPOST /auth/login- Login de usuárioPOST /auth/refresh- Renovar access tokenPOST /auth/logout- Logout do usuárioPOST /auth/forgot-password- Solicitar reset de senhaPOST /auth/reset-password- Resetar senha
GET /user/me- Obter dados do usuário autenticadoPATCH /user/me- Atualizar dados do usuárioDELETE /user/me- Deletar conta do usuário
GET /bank- Listar todos os bancosGET /bank/:id- Obter banco por IDPOST /bank- Criar novo bancoPATCH /bank/:id- Atualizar bancoDELETE /bank/:id- Deletar banco
GET /account- Listar contas do usuárioGET /account/:id- Obter conta por IDPOST /account- Criar nova contaPATCH /account/:id- Atualizar contaDELETE /account/:id- Deletar conta
GET /transaction- Listar transações do usuárioGET /transaction/:id- Obter transação por IDPOST /transaction- Criar nova transaçãoPATCH /transaction/:id- Atualizar transaçãoDELETE /transaction/:id- Deletar transação
GET /health- Status da API
payment_records/
├── .github/
│ └── workflows/
│ └── ci.yaml # Pipeline CI/CD
├── src/
│ ├── app.ts # Ponto de entrada da aplicação
│ ├── core/
│ │ ├── abstractions/ # Interfaces e abstrações
│ │ │ └── email.ts
│ │ └── interfaces/
│ │ └── logger.ts
│ ├── docs/
│ │ └── swagger.ts # Configuração Swagger/OpenAPI
│ ├── lib/
│ │ ├── enums.ts # Enumerações (tipos de conta, transação)
│ │ ├── schema.ts # Schemas Zod para validação
│ │ ├── types.ts # Tipos TypeScript customizados
│ │ └── utils.ts # Funções utilitárias
│ ├── middlewares/
│ │ ├── bodyparser.ts # Validação Zod de requests
│ │ ├── error.ts # Tratamento centralizado de erros
│ │ ├── jwt.ts # Validação e autenticação JWT
│ │ └── loggger.middleware.ts
│ ├── modules/
│ │ ├── Account/ # Módulo de Contas Bancárias
│ │ │ ├── account.controller.ts
│ │ │ ├── account.service.ts
│ │ │ ├── account.routes.ts
│ │ │ ├── account.factory.ts
│ │ │ ├── dto/ # Data Transfer Objects
│ │ │ └── entity/ # Entidades TypeORM
│ │ ├── Auth/ # Módulo de Autenticação
│ │ │ ├── auth.controller.ts
│ │ │ ├── auth.service.ts
│ │ │ ├── auth.routes.ts
│ │ │ ├── auth.factory.ts
│ │ │ ├── dto/
│ │ │ └── email/ # Templates de email
│ │ ├── Bank/ # Módulo de Bancos
│ │ ├── redis/ # Módulo Redis
│ │ ├── Transaction/ # Módulo de Transações
│ │ └── User/ # Módulo de Usuários
│ ├── shared/
│ │ ├── db/
│ │ │ └── data-source.ts # Configuração TypeORM
│ │ ├── seeds/ # Seeds do banco de dados
│ │ │ ├── bank.seed.ts
│ │ │ └── index.ts
│ │ ├── email.service.ts # Serviço de envio de emails
│ │ └── env.ts # Validação de variáveis de ambiente
│ └── tests/
│ ├── integration/ # Testes de integração
│ │ ├── account.service.spec.ts
│ │ ├── auth.service.spec.ts
│ │ ├── bank.service.spec.ts
│ │ ├── user.service.spec.ts
│ │ ├── redis.service.spec.ts
│ │ └── postgres-db.ts
│ └── unit/ # Testes unitários
│ ├── middlewares.spec.ts
│ └── utils.spec.ts
├── coverage/ # Relatórios de cobertura de testes
├── docker-compose.yaml # Configuração Docker
├── init-db.sql # Script de inicialização do DB
├── jest.config.js # Configuração Jest
├── tsconfig.json # Configuração TypeScript
├── eslint.config.mts # Configuração ESLint
└── package.json
# Todos os testes
npm test
# Apenas testes unitários
npm run test:unit
# Apenas testes de integração
npm run test:integration
# Testes com cobertura
npm run test:coverage- Testes Unitários (
src/tests/unit/): Testam funções isoladas (utils, middlewares) - Testes de Integração (
src/tests/integration/): Testam serviços com banco de dados real
Os relatórios de cobertura são gerados em coverage/ e incluem:
- HTML report:
coverage/lcov-report/index.html - LCOV:
coverage/lcov.info - Clover:
coverage/clover.xml
| Script | Descrição |
|---|---|
npm run dev |
Inicia o servidor em modo desenvolvimento com hot-reload |
npm run build |
Compila o TypeScript para JavaScript (dist/) |
npm start |
Inicia o servidor em modo produção |
npm run lint |
Executa o ESLint para análise de código |
npm run test:unit |
Executa testes unitários |
npm run test:integration |
Executa testes de integração |
O projeto utiliza GitHub Actions para integração e entrega contínuas.
Trigger: Push/Pull Request
↓
Build
├── Checkout código
├── Setup Node.js 18
├── Instalar dependências
├── Lint código (ESLint)
└── Build TypeScript
↓
Tests
├── Iniciar containers (PostgreSQL + Redis)
├── Executar testes unitários
├── Executar testes de integração
└── Gerar relatório de cobertura
↓Veja .github/workflows/ci.yaml para detalhes.
Os containers possuem healthchecks configurados para garantir disponibilidade antes dos testes.
Este projeto está sob a licença ISC. Veja o arquivo LICENSE para mais detalhes.
Jaedson Macedo
- Email: jaedsonnm@gmail.com
- GitHub: @jaedson