104 lines
4.4 KiB
TypeScript
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 {}
|