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

66 lines
3.3 KiB
TypeScript

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { PassportModule } from '@nestjs/passport';
import { JwtModule } from '@nestjs/jwt';
import { JwtStrategy } from './infrastructure/strategies/jwt.strategy';
// Domain entities
import { Settlement } from './domain/entities/settlement.entity';
import { Refund } from './domain/entities/refund.entity';
import { BreakageRecord } from './domain/entities/breakage-record.entity';
import { JournalEntry } from './domain/entities/journal-entry.entity';
import { Report } from './domain/entities/report.entity';
// Domain repository interfaces (symbols)
import { SETTLEMENT_REPOSITORY } from './domain/repositories/settlement.repository.interface';
import { REFUND_REPOSITORY } from './domain/repositories/refund.repository.interface';
import { BREAKAGE_REPOSITORY } from './domain/repositories/breakage.repository.interface';
import { JOURNAL_ENTRY_REPOSITORY } from './domain/repositories/journal-entry.repository.interface';
import { REPORT_REPOSITORY } from './domain/repositories/report.repository.interface';
// Infrastructure persistence implementations
import { SettlementRepository } from './infrastructure/persistence/settlement.repository';
import { RefundRepository } from './infrastructure/persistence/refund.repository';
import { BreakageRepository } from './infrastructure/persistence/breakage.repository';
import { JournalEntryRepository } from './infrastructure/persistence/journal-entry.repository';
import { ReportRepository } from './infrastructure/persistence/report.repository';
// Application services
import { SettlementService } from './application/services/settlement.service';
import { RefundService } from './application/services/refund.service';
import { BreakageService } from './application/services/breakage.service';
import { AdminFinanceService } from './application/services/admin-finance.service';
import { AdminReportsService } from './application/services/admin-reports.service';
// Interface controllers
import { ClearingController } from './interface/http/controllers/clearing.controller';
import { AdminFinanceController } from './interface/http/controllers/admin-finance.controller';
import { AdminReportsController } from './interface/http/controllers/admin-reports.controller';
@Module({
imports: [
TypeOrmModule.forFeature([Settlement, Refund, BreakageRecord, JournalEntry, Report]),
PassportModule.register({ defaultStrategy: 'jwt' }),
JwtModule.register({ secret: process.env.JWT_ACCESS_SECRET || 'dev-access-secret' }),
],
controllers: [ClearingController, AdminFinanceController, AdminReportsController],
providers: [
JwtStrategy,
// Repository DI bindings (interface -> implementation)
{ provide: SETTLEMENT_REPOSITORY, useClass: SettlementRepository },
{ provide: REFUND_REPOSITORY, useClass: RefundRepository },
{ provide: BREAKAGE_REPOSITORY, useClass: BreakageRepository },
{ provide: JOURNAL_ENTRY_REPOSITORY, useClass: JournalEntryRepository },
{ provide: REPORT_REPOSITORY, useClass: ReportRepository },
// Application services
SettlementService,
RefundService,
BreakageService,
AdminFinanceService,
AdminReportsService,
],
exports: [SettlementService, RefundService, BreakageService],
})
export class ClearingModule {}