🔒 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