mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-27 09:42:53 +00:00
53 lines
1.3 KiB
TypeScript
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],
|
|
};
|
|
}
|
|
}
|