Wallet-API es una API RESTful desarrollada con Node.js y TypeScript para la gestión completa de billeteras digitales. El sistema permite administrar usuarios con control de acceso basado en roles, crear billeteras multi-moneda y procesar transacciones financieras (depósitos, retiros y transferencias) de forma atómica y segura.
- Arquitectura en Capas: Implementación de Service Layer para separar la lógica de negocio de los controladores, facilitando el mantenimiento y escalabilidad.
- Transacciones Atómicas: Uso de
$transactionde Prisma para garantizar la consistencia de datos en operaciones críticas (transferencias, actualizaciones de balance). - Seguridad (RBAC): Control de acceso basado en roles (USER, ADMIN) mediante JWT con tokens seguros.
- Validación Robusta: Validación de datos en tiempo real utilizando Zod con esquemas estrictos.
- Precisión Decimal: Manejo de operaciones monetarias con Decimal.js para evitar errores de redondeo (19 dígitos, 4 decimales).
- Suite de Pruebas: Tests de integración completos con Jest y Supertest validando flujos de negocio y seguridad.
- Lenguaje: TypeScript
- Entorno: Node.js (ESM)
- Framework: Express 5
- ORM: Prisma
- Base de Datos: PostgreSQL
- Autenticación: JWT & Bcrypt
- Validación: Zod
- Pruebas: Jest & Supertest
- User: Sistema de autenticación con roles y estados (ACTIVE/INACTIVE)
- Wallet: Billetera digital con balance de alta precisión (1:1 con User)
- Transaction: Sistema completo de transacciones (DEPOSIT, WITHDRAWAL, TRANSFER)
- Node.js (v18 o superior)
- PostgreSQL (v13 o superior)
- npm o yarn
- Clonar el repositorio:
git clone https://github.com/tu-usuario/wallet-api.git
cd WalletAPI- Instalar dependencias:
npm install- Configurar variables de entorno:
Crea un archivo
.enven la raíz con el siguiente formato:
DATABASE_URL="postgresql://usuario:password@localhost:5432/walletdb"
JWT_SECRET="tu_llave_secreta_super_segura"
PORT=3000
NODE_ENV=development- Desplegar base de datos:
npx prisma migrate dev
npx prisma generate- Iniciar servidor:
npm run devEl proyecto cuenta con una suite de tests que valida la integridad del sistema:
npm testNota: Los tests utilizan módulos experimentales de Node.js configurados automáticamente en el script.
- AUTH:
/api/user(register),/api/user/login - USERS:
/api/user(CRUD completo con permisos admin) - WALLETS:
/api/wallet(Gestión de billeteras autenticadas) - TRANSACTIONS:
/api/transaction(Transacciones seguras y consultas)
WalletAPI/
├── prisma/ # Esquema de base de datos
├── src/
│ ├── controller/ # Controladores de endpoints
│ ├── service/ # Lógica de negocio
│ ├── routes/ # Definición de rutas
│ ├── middlewares/ # Auth y validaciones
│ ├── schemas/ # Validaciones Zod
│ ├── utils/ # Utilidades (auth utils)
│ └── test/ # Suite de tests
├── lib/ # Cliente Prisma
└── index.ts # Punto de entrada
- Contraseñas hasheadas con bcrypt antes de almacenarse
- Tokens JWT con expiración configurable
- Middleware de autenticación en rutas sensibles
- Validación automática de fondos en retiros y transferencias
- Transacciones Atómicas: Todas las operaciones monetarias usan transacciones de Prisma para garantizar consistencia
- Validación de Fondos: Sistema automático que verifica saldo suficiente antes de procesar retiros/transferencias
- Arquitectura Limpia: Separación clara entre controladores, servicios y acceso a datos
- Type Safety: TypeScript en todo el proyecto con tipado estricto