import { Module } from '@nestjs/common'; import { COURIER_PROVIDER, CourierProviderCode } from './courier.constants'; import { CourierConfigService } from './courier.config'; import { CourierService } from './courier.service'; import { XiaofeixiaClient } from './xiaofeixia/xiaofeixia.client'; import { XiaofeixiaProvider } from './xiaofeixia/xiaofeixia.provider'; import type { ICourierProvider } from './courier.types'; @Module({ providers: [ CourierConfigService, XiaofeixiaClient, XiaofeixiaProvider, { provide: COURIER_PROVIDER, useFactory: ( configService: CourierConfigService, xiaofeixia: XiaofeixiaProvider, ): ICourierProvider => { const { provider } = configService.load(); switch (provider) { case CourierProviderCode.XIAOFEIXIA: return xiaofeixia; default: throw new Error(`Courier provider not implemented: ${provider}`); } }, inject: [CourierConfigService, XiaofeixiaProvider], }, CourierService, ], exports: [CourierService, CourierConfigService, COURIER_PROVIDER, XiaofeixiaProvider], }) export class CourierModule {}