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

104 lines
4.4 KiB
TypeScript

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { PassportModule } from '@nestjs/passport';
import { JwtModule } from '@nestjs/jwt';
// Domain entities
import { Issuer } from './domain/entities/issuer.entity';
import { Coupon } from './domain/entities/coupon.entity';
import { Store } from './domain/entities/store.entity';
import { CouponRule } from './domain/entities/coupon-rule.entity';
import { CreditMetric } from './domain/entities/credit-metric.entity';
// Domain repository interfaces (Symbols)
import { ISSUER_REPOSITORY } from './domain/repositories/issuer.repository.interface';
import { COUPON_REPOSITORY } from './domain/repositories/coupon.repository.interface';
import { COUPON_RULE_REPOSITORY } from './domain/repositories/coupon-rule.repository.interface';
import { STORE_REPOSITORY } from './domain/repositories/store.repository.interface';
import { CREDIT_METRIC_REPOSITORY } from './domain/repositories/credit-metric.repository.interface';
// Infrastructure persistence implementations
import { IssuerRepository } from './infrastructure/persistence/issuer.repository';
import { CouponRepository } from './infrastructure/persistence/coupon.repository';
import { CouponRuleRepository } from './infrastructure/persistence/coupon-rule.repository';
import { StoreRepository } from './infrastructure/persistence/store.repository';
import { CreditMetricRepository } from './infrastructure/persistence/credit-metric.repository';
// Domain ports
import { AI_SERVICE_CLIENT } from './domain/ports/ai-service.client.interface';
// Infrastructure external services
import { AiServiceClient } from './infrastructure/external/ai-service.client';
// Application services
import { IssuerService } from './application/services/issuer.service';
import { CouponService } from './application/services/coupon.service';
import { PricingService } from './application/services/pricing.service';
import { CreditScoringService } from './application/services/credit-scoring.service';
import { AdminIssuerService } from './application/services/admin-issuer.service';
import { AdminCouponService } from './application/services/admin-coupon.service';
import { AdminCouponAnalyticsService } from './application/services/admin-coupon-analytics.service';
import { AdminMerchantService } from './application/services/admin-merchant.service';
// Interface controllers
import { IssuerController } from './interface/http/controllers/issuer.controller';
import { CouponController } from './interface/http/controllers/coupon.controller';
import { AdminIssuerController } from './interface/http/controllers/admin-issuer.controller';
import { AdminCouponController } from './interface/http/controllers/admin-coupon.controller';
import { AdminAnalyticsController } from './interface/http/controllers/admin-analytics.controller';
import { AdminMerchantController } from './interface/http/controllers/admin-merchant.controller';
// Interface guards
import { RolesGuard } from './interface/http/guards/roles.guard';
@Module({
imports: [
TypeOrmModule.forFeature([Issuer, Coupon, Store, CouponRule, CreditMetric]),
PassportModule.register({ defaultStrategy: 'jwt' }),
JwtModule.register({ secret: process.env.JWT_ACCESS_SECRET || 'dev-access-secret' }),
],
controllers: [
IssuerController,
CouponController,
AdminIssuerController,
AdminCouponController,
AdminAnalyticsController,
AdminMerchantController,
],
providers: [
// Infrastructure -> Domain port binding (Repository pattern)
{ provide: ISSUER_REPOSITORY, useClass: IssuerRepository },
{ provide: COUPON_REPOSITORY, useClass: CouponRepository },
{ provide: COUPON_RULE_REPOSITORY, useClass: CouponRuleRepository },
{ provide: STORE_REPOSITORY, useClass: StoreRepository },
{ provide: CREDIT_METRIC_REPOSITORY, useClass: CreditMetricRepository },
// Infrastructure external services
{ provide: AI_SERVICE_CLIENT, useClass: AiServiceClient },
// Infrastructure guards
RolesGuard,
// Application services
IssuerService,
CouponService,
PricingService,
CreditScoringService,
AdminIssuerService,
AdminCouponService,
AdminCouponAnalyticsService,
AdminMerchantService,
],
exports: [
IssuerService,
CouponService,
PricingService,
CreditScoringService,
AdminIssuerService,
AdminCouponService,
AdminCouponAnalyticsService,
AdminMerchantService,
],
})
export class IssuerModule {}