Skip to content

Kaistendev/WalletAPI

Repository files navigation

Wallet-API 💰

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.

🚀 Características Principales

  • 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 $transaction de 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.

🛠️ Stack Tecnológico

  • 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

📊 Modelo de Datos

  • 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)

📋 Requisitos Previos

  • Node.js (v18 o superior)
  • PostgreSQL (v13 o superior)
  • npm o yarn

⚙️ Instalación y Configuración

  1. Clonar el repositorio:
git clone https://github.com/tu-usuario/wallet-api.git
cd WalletAPI
  1. Instalar dependencias:
npm install
  1. Configurar variables de entorno: Crea un archivo .env en 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
  1. Desplegar base de datos:
npx prisma migrate dev
npx prisma generate
  1. Iniciar servidor:
npm run dev

🧪 Ejecución de Pruebas

El proyecto cuenta con una suite de tests que valida la integridad del sistema:

npm test

Nota: Los tests utilizan módulos experimentales de Node.js configurados automáticamente en el script.

🛣️ Endpoints Principales

  • 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)

📁 Estructura del Proyecto

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

🔐 Seguridad

  • 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

💡 Características Técnicas Destacadas

  • 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors