gcx/backend/services/user-service/src/user.module.ts

78 lines
4.0 KiB
TypeScript

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { JwtModule } from '@nestjs/jwt';
import { PassportModule } from '@nestjs/passport';
import { JwtStrategy } from './infrastructure/strategies/jwt.strategy';
// Domain entities
import { User } from './domain/entities/user.entity';
import { KycSubmission } from './domain/entities/kyc-submission.entity';
import { Wallet } from './domain/entities/wallet.entity';
import { Transaction } from './domain/entities/transaction.entity';
import { Message } from './domain/entities/message.entity';
// Domain repository interfaces
import { USER_REPOSITORY } from './domain/repositories/user.repository.interface';
import { KYC_REPOSITORY } from './domain/repositories/kyc.repository.interface';
import { WALLET_REPOSITORY } from './domain/repositories/wallet.repository.interface';
import { TRANSACTION_REPOSITORY } from './domain/repositories/transaction.repository.interface';
import { MESSAGE_REPOSITORY } from './domain/repositories/message.repository.interface';
// Infrastructure implementations
import { UserRepository } from './infrastructure/persistence/user.repository';
import { KycRepository } from './infrastructure/persistence/kyc.repository';
import { WalletRepository } from './infrastructure/persistence/wallet.repository';
import { TransactionRepository } from './infrastructure/persistence/transaction.repository';
import { MessageRepository } from './infrastructure/persistence/message.repository';
// Application services
import { UserProfileService } from './application/services/user-profile.service';
import { KycService } from './application/services/kyc.service';
import { WalletService } from './application/services/wallet.service';
import { MessageService } from './application/services/message.service';
import { AdminDashboardService } from './application/services/admin-dashboard.service';
import { AdminUserService } from './application/services/admin-user.service';
import { AdminSystemService } from './application/services/admin-system.service';
import { AdminAnalyticsService } from './application/services/admin-analytics.service';
// Interface controllers
import { UserController } from './interface/http/controllers/user.controller';
import { KycController } from './interface/http/controllers/kyc.controller';
import { WalletController } from './interface/http/controllers/wallet.controller';
import { MessageController } from './interface/http/controllers/message.controller';
import { AdminDashboardController } from './interface/http/controllers/admin-dashboard.controller';
import { AdminUserController } from './interface/http/controllers/admin-user.controller';
import { AdminSystemController } from './interface/http/controllers/admin-system.controller';
import { AdminAnalyticsController } from './interface/http/controllers/admin-analytics.controller';
@Module({
imports: [
TypeOrmModule.forFeature([
User, KycSubmission, Wallet, Transaction, Message,
]),
PassportModule.register({ defaultStrategy: 'jwt' }),
JwtModule.register({
secret: process.env.JWT_ACCESS_SECRET || 'dev-access-secret',
}),
],
controllers: [
UserController, KycController, WalletController, MessageController,
AdminDashboardController, AdminUserController, AdminSystemController, AdminAnalyticsController,
],
providers: [
JwtStrategy,
// Infrastructure -> Domain port binding
{ provide: USER_REPOSITORY, useClass: UserRepository },
{ provide: KYC_REPOSITORY, useClass: KycRepository },
{ provide: WALLET_REPOSITORY, useClass: WalletRepository },
{ provide: TRANSACTION_REPOSITORY, useClass: TransactionRepository },
{ provide: MESSAGE_REPOSITORY, useClass: MessageRepository },
// Application services
UserProfileService, KycService, WalletService, MessageService,
AdminDashboardService, AdminUserService, AdminSystemService, AdminAnalyticsService,
],
exports: [UserProfileService, WalletService, MessageService],
})
export class UserModule {}