Skip to content

System Modules

The CurioPay API follows a modular architecture based on NestJS's module system. Each module encapsulates a specific part of the system's functionality, promoting separation of concerns and maintainability.

Module Architecture Diagram

classDiagram
    class AppModule {
        +imports
        +controllers
        +providers
    }

    class PrismaModule {
        +providers: PrismaService
        +exports: PrismaService
    }

    class CommonModule {
        +providers: EmailService, AuditService
        +exports: EmailService, AuditService
    }

    class AuthModule {
        +imports: JwtModule, PassportModule
        +controllers: AuthController
        +providers: AuthService, JwtStrategy, GoogleStrategy, GitHubStrategy
    }

    class UsersModule {
        +controllers: UsersController, UserPreferencesController
        +providers: UsersService, UserPreferencesService
    }

    class ExpensesModule {
        +controllers: ExpensesController
        +providers: ExpensesService
    }

    class IncomeModule {
        +controllers: IncomeController
        +providers: IncomeService
    }

    class CategoriesModule {
        +controllers: CategoriesController
        +providers: CategoriesService
    }

    class PaymentMethodsModule {
        +controllers: PaymentMethodsController
        +providers: PaymentMethodsService
    }

    class NewsletterModule {
        +controllers: NewsletterController
        +providers: NewsletterService
    }

    class ExportModule {
        +controllers: ExportController
        +providers: ExportService
    }

    AppModule --> PrismaModule
    AppModule --> CommonModule
    AppModule --> AuthModule
    AppModule --> UsersModule
    AppModule --> ExpensesModule
    AppModule --> IncomeModule
    AppModule --> CategoriesModule
    AppModule --> PaymentMethodsModule
    AppModule --> NewsletterModule
    AppModule --> ExportModule

    AuthModule --> UsersModule
    UsersModule --> PrismaModule
    ExpensesModule --> PrismaModule
    IncomeModule --> PrismaModule
    CategoriesModule --> PrismaModule
    PaymentMethodsModule --> PrismaModule
    NewsletterModule --> PrismaModule
    ExportModule --> PrismaModule

Core Modules

AppModule

The root module that orchestrates the entire application. It imports all other modules and configures application-wide settings.

PrismaModule

Provides database access through the Prisma ORM. Exports the PrismaService which is used by all modules requiring database access.

CommonModule

A global module containing shared services used across the application:

  • Email service for sending transactional emails
  • Audit service for logging important operations
  • Shared utilities, interceptors, and decorators

AuthModule

Handles user authentication and authorization:

  • JWT authentication strategy
  • Social login (Google, GitHub)
  • Multi-factor authentication
  • Password management
  • Session handling

UsersModule

Manages user accounts and preferences:

  • User registration
  • Profile management
  • User preferences (theme, language, currency)

Feature Modules

ExpensesModule

Manages expense records:

  • Creating and updating expenses
  • Retrieving expense reports
  • Categorizing expenses
  • Receipt management

IncomeModule

Manages income records:

  • Creating and updating income entries
  • Income reporting
  • Income categorization

CategoriesModule

Manages expense and income categories:

  • CRUD operations for categories
  • Category organization (hierarchy, types)
  • Default categories management

PaymentMethodsModule

Manages payment methods:

  • CRUD operations for payment methods
  • Default payment methods
  • Payment method preferences

NewsletterModule

Manages newsletter subscriptions:

  • Subscribe/unsubscribe functionality
  • Subscription preferences

ExportModule

Handles data export functionality:

  • Exporting expenses and income data