Files
edr-platform/packages/api-common/src/services/exchange/exchange.module.ts

53 lines
1.3 KiB
TypeScript

import { DynamicModule, Module, Provider } from "@nestjs/common";
import {
EXCHANGE_OPTIONS,
ExchangeAsyncOptions,
ExchangeOptions,
} from "./exchange.options";
import { ExchangeService } from "./exchange.service";
/**
* Provides {@link ExchangeService} (currency conversion, currently CBE-backed).
*
* Register once in the app root, then inject `ExchangeService` anywhere:
*
* ```ts
* // static config
* ExchangeModule.forRoot({ fallbackRate: 135 })
*
* // config resolved from ConfigService
* ExchangeModule.forRootAsync({
* inject: [ConfigService],
* useFactory: (config: ConfigService) => config.get('app.exchange'),
* })
* ```
*/
@Module({})
export class ExchangeModule {
static forRoot(options: ExchangeOptions = {}): DynamicModule {
return {
module: ExchangeModule,
providers: [
{ provide: EXCHANGE_OPTIONS, useValue: options },
ExchangeService,
],
exports: [ExchangeService],
};
}
static forRootAsync(options: ExchangeAsyncOptions): DynamicModule {
const optionsProvider: Provider = {
provide: EXCHANGE_OPTIONS,
useFactory: options.useFactory,
inject: (options.inject ?? []) as never[],
};
return {
module: ExchangeModule,
providers: [optionsProvider, ExchangeService],
exports: [ExchangeService],
};
}
}