Módulos
GitBook tiene un potente editor basado en bloques que te permite crear, actualizar y mejorar tu contenido sin problemas.
Escribir contenido
GitBook ofrece una variedad de tipos de bloques para agregar a tu contenido en línea, desde texto simple y tablas, hasta bloques de código y más. Estos elementos harán que tus páginas sean más útiles para los lectores y ofrecerán información y contexto adicionales.
Puedes comenzar a escribir a continuación, o presionar / para ver una lista de los bloques que puedes insertar en tu página.
Agregar un nuevo bloque
1. Abrir el menú de inserción de bloques
Presiona / en tu teclado para abrir el menú de inserción de bloques.
2. Buscar el bloque que necesitas
Intenta buscar "Stepper", por ejemplo, para insertar el bloque de pasos.
3. Insertar y editar tu bloque
Haz clic o presiona Enter para insertar tu bloque. Desde aquí, podrás editarlo según sea necesario.
🏦 Cuentas Bancarias
Gestión de cuentas bancarias asociadas a cuentas de usuario.
Documentación:
- Lógica de Servicio - Operaciones de cuentas bancarias
- Rutas y Controladores - Endpoints de cuentas bancarias
- Entidades/Base de Datos - Entidades de cuentas bancarias
- DTOs - Objetos de datos de cuentas bancarias
🗄️ Base de Datos
Servicios y utilidades de base de datos.
Documentación:
- Lógica de Servicio - Operaciones y conexiones de base de datos
📧 Email
Sistema de envío y gestión de correos electrónicos.
Documentación:
- Lógica de Servicio - Envío de correos y plantillas
⚙️ Entorno
Configuración de entorno y gestión de variables.
🗄️ Base de Datos
Servicios y utilidades para la gestión de bases de datos.
Componentes:
- Servicio/Lógica - Servicios de base de datos
📧 Email
Sistema de envío y gestión de correos electrónicos.
Componentes:
- Servicio/Lógica - Servicios de correo electrónico
🌍 Entorno
Configuración de entorno y gestión de variables.
Componentes:
- Servicio/Lógica - Servicios de entorno
- Estrategia - Estrategias de configuración
Módulos de Utilidad
🛡️ Autenticación
Sistema de autenticación y autorización con JWT y guardias basados en roles.
Documentación:
- Lógica de Servicio - Implementación de lógica de autenticación
- Rutas y Controladores - Endpoints de autenticación
- Guardia de Autenticación - Protección de rutas
- Estrategia de Autenticación - Estrategia JWT
- Decorador de Usuario Actual - Contexto de usuario
🗄️ Base de Datos
Configuración de base de datos y gestión de conexiones.
Documentación:
- Lógica de Servicio - Operaciones y conexiones de base de datos
📧 Email
Servicio de correo electrónico para notificaciones y comunicaciones.
Documentación:
- Lógica de Servicio - Envío de correos y plantillas
🎫 Freshdesk
Integración con Freshdesk para soporte al cliente y sistema de tickets.
Documentación:
- Lógica de Servicio - Integración con API de Freshdesk
- Rutas y Controladores - Endpoints de soporte
- DTOs - Objetos de transferencia de datos
Interfaces Públicas
🌐 API Pública
Endpoints de API públicos accesibles sin autenticación.
Documentación:
- Lógica de Servicio - Implementación de servicio público
- Rutas y Controladores - Endpoints públicos
Arquitectura de Módulos
El backend de OnSpot está construido con una arquitectura modular basada en NestJS, donde cada módulo encapsula funcionalidades específicas del negocio. Esta estructura permite un desarrollo escalable, mantenible y testeable.
Estructura de Módulos
- Interfaces - Interfaces de entorno
🎫 Freshdesk
Integración con el sistema de tickets Freshdesk.
Componentes:
- Controlador/Rutas - Endpoints de Freshdesk
- Servicio/Lógica - Lógica de Freshdesk
- DTO (Entradas/Salidas) - DTOs de Freshdesk
🏢 Subcuentas
Gestión de subcuentas asociadas a cuentas principales.
Componentes:
- Controlador/Rutas - Endpoints de subcuentas
- Servicio/Lógica - Lógica de subcuentas
- Entidades/Base de Datos - Entidades de subcuentas
- DTO (Entradas/Salidas) - DTOs de subcuentas
👥 Usuarios
Sistema completo de gestión de usuarios.
Componentes:
- Controlador/Rutas - Endpoints de usuarios
- Servicio/Lógica - Lógica de usuarios
- Entidades/Base de Datos - Entidades de usuarios
- DTO (Entradas/Salidas) - DTOs de usuarios
💰 Retiros
Sistema de retiros y transacciones financieras.
Componentes:
- Controlador/Rutas - Endpoints de retiros
- Servicio/Lógica - Lógica de retiros
- Entidades/Base de Datos - Entidades de retiros
- DTO (Entradas/Salidas) - DTOs de retiros
🔄 Comunicación entre Módulos
Los módulos están diseñados para ser independientes pero pueden comunicarse entre sí a través de:
- Servicios compartidos: Servicios que pueden ser inyectados en otros módulos
- Eventos: Sistema de eventos para comunicación asíncrona
- DTOs comunes: Objetos de transferencia de datos compartidos
- Interfaces: Contratos bien definidos entre módulos
📋 Convenciones
Todos los módulos siguen las mismas convenciones:
- Nomenclatura: Nombres descriptivos en inglés
- Estructura: Estructura de carpetas consistente
- Documentación: Documentación completa de endpoints y métodos
- Pruebas: Pruebas unitarias e de integración
- Seguridad: Implementación de guardias y validaciones
Nota: Esta documentación se basa en la estructura actual del backend y se actualiza regularmente para reflejar los cambios en el código.
Visión General
El backend de OnSpot está construido con una arquitectura modular basada en NestJS, donde cada módulo encapsula funcionalidades específicas del negocio. Esta estructura permite un desarrollo escalable, mantenible y testeable.
Estructura de Módulos
🏗️ Arquitectura Modular
graph TB
A[Módulo App] --> B[Módulo Auth]
A --> C[Módulo Usuarios]
A --> D[Módulo Cuentas]
A --> E[Módulo Subcuentas]
A --> F[Módulo Acreditaciones]
A --> G[Módulo Retiros]
A --> H[Módulo Analíticas]
A --> I[Módulo Común]
B --> J[Estrategia JWT]
B --> K[Estrategia Local]
B --> L[Guardias Auth]
C --> M[Servicio Usuario]
C --> N[Controlador Usuario]
C --> O[Entidad Usuario]
D --> P[Servicio Cuenta]
D --> Q[Controlador Cuenta]
D --> R[Entidad Cuenta]Módulos Principales
1. Módulo Auth (src/auth/)
Responsabilidades:
- Autenticación de usuarios
- Autorización basada en roles
- Gestión de tokens JWT
- Estrategias Passport
Componentes:
@Module({
imports: [
UsersModule,
PassportModule,
JwtModule.registerAsync({
useFactory: (configService: ConfigService) => ({
secret: configService.get('JWT_SECRET'),
signOptions: { expiresIn: '15m' },
}),
inject: [ConfigService],
}),
],
providers: [
AuthService,
LocalStrategy,
JwtStrategy,
JwtAuthGuard,
RolesGuard,
],
controllers: [AuthController],
exports: [AuthService, JwtAuthGuard],
})
export class AuthModule {}2. Módulo Usuarios (src/users/)
Responsabilidades:
- Gestión de usuarios del sistema
- Perfiles de usuario y configuraciones
- Relaciones con cuentas y subcuentas
Estructura:
src/users/
├── dto/
│ ├── create-user.dto.ts
│ ├── update-user.dto.ts
│ └── user-response.dto.ts
├── entities/
│ └── user.entity.ts
├── users.controller.ts
├── users.service.ts
└── users.module.ts3. Módulo Cuentas (src/accounts/)
Responsabilidades:
- Gestión de cuentas principales
- Configuraciones de cuenta
- Relaciones con subcuentas
Entidad Principal:
@Entity('accounts')
export class Account {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ unique: true })
accountNumber: string;
@Column()
name: string;
@Column({ type: 'decimal', precision: 15, scale: 2, default: 0 })
balance: number;
@Column({ default: true })
isActive: boolean;
@ManyToOne(() => User, user => user.accounts)
owner: User;
@OneToMany(() => Subaccount, subaccount => subaccount.account)
subaccounts: Subaccount[];
}4. Módulo Subcuentas (src/subaccounts/)
Responsabilidades:
- Gestión de subcuentas
- Operaciones financieras
- Seguimiento de transacciones
Características:
- CRUD completo para subcuentas
- Validaciones de negocio
- Auditoría de cambios
- Integración con sistema de pagos
5. Módulo Acreditaciones (src/accreditations/)
Responsabilidades:
- Procesamiento de acreditaciones
- Validación de fondos
- Gestión de estados de transacción
Estados de Acreditación:
export enum AccreditationStatus {
PENDING = 'pending',
PROCESSING = 'processing',
COMPLETED = 'completed',
FAILED = 'failed',
CANCELLED = 'cancelled'
}6. Módulo Retiros (src/withdrawals/)
Responsabilidades:
- Procesamiento de retiros
- Validaciones de saldo
- Integración con proveedor de pagos
Flujo de Retiro:
sequenceDiagram
participant U as Usuario
participant W as Servicio de Retiros
participant A as Servicio de Cuentas
participant P as Proveedor de Pagos
U->>W: Solicitar retiro
W->>A: Validar saldo
A-->>W: Saldo confirmado
W->>P: Procesar pago
P-->>W: Confirmación
W->>A: Actualizar saldo
W-->>U: Retiro completado7. Módulo Analíticas (src/analytics/)
Responsabilidades:
- Métricas de negocio
- Informes financieros
- Panel de administración
8. Módulo Común (src/common/)
Responsabilidades:
- Utilidades compartidas
- Decoradores personalizados
- Pipes y filtros globales
- Configuraciones compartidas
Configuración de Módulos
Registro en Módulo App
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: `.env.${process.env.NODE_ENV}`,
}),
TypeOrmModule.forRootAsync({
useFactory: (configService: ConfigService) => ({
type: 'postgres',
host: configService.get('DB_HOST'),
port: configService.get('DB_PORT'),
username: configService.get('DB_USERNAME'),
password: configService.get('DB_PASSWORD'),
database: configService.get('DB_NAME'),
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: configService.get('NODE_ENV') === 'development',
}),
inject: [ConfigService],
}),
AuthModule,
UsersModule,
AccountsModule,
SubaccountsModule,
AccreditationsModule,
WithdrawalsModule,
AnalyticsModule,