🔒 Acceso Protegido

Esta documentación requiere autenticación

Skip to content

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:

🗄️ Base de Datos ​

Servicios y utilidades de base de datos.

Documentación:

📧 Email ​

Sistema de envío y gestión de correos electrónicos.

Documentación:

⚙️ 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:

📧 Email ​

Sistema de envío y gestión de correos electrónicos.

Componentes:

🌍 Entorno ​

Configuración de entorno y gestión de variables.

Componentes:

Módulos de Utilidad ​

🛡️ Autenticación ​

Sistema de autenticación y autorización con JWT y guardias basados en roles.

Documentación:

🗄️ Base de Datos ​

Configuración de base de datos y gestión de conexiones.

Documentación:

📧 Email ​

Servicio de correo electrónico para notificaciones y comunicaciones.

Documentación:

🎫 Freshdesk ​

Integración con Freshdesk para soporte al cliente y sistema de tickets.

Documentación:

Interfaces Públicas ​

🌐 API Pública ​

Endpoints de API públicos accesibles sin autenticación.

Documentación:


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 ​

🎫 Freshdesk ​

Integración con el sistema de tickets Freshdesk.

Componentes:

🏢 Subcuentas ​

Gestión de subcuentas asociadas a cuentas principales.

Componentes:

👥 Usuarios ​

Sistema completo de gestión de usuarios.

Componentes:

💰 Retiros ​

Sistema de retiros y transacciones financieras.

Componentes:

🔄 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:

  1. Nomenclatura: Nombres descriptivos en inglés
  2. Estructura: Estructura de carpetas consistente
  3. Documentación: Documentación completa de endpoints y métodos
  4. Pruebas: Pruebas unitarias e de integración
  5. 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 ​

mermaid
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:

typescript
@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.ts

3. Módulo Cuentas (src/accounts/) ​

Responsabilidades:

  • Gestión de cuentas principales
  • Configuraciones de cuenta
  • Relaciones con subcuentas

Entidad Principal:

typescript
@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:

typescript
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:

mermaid
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 completado

7. 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 ​

typescript
@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,

Documentación OnspotIntl