src/modules/form-submissions/form-submissions.module.ts (49 lines of code) (raw):
import { Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { HttpModule, HttpService } from '@nestjs/axios';
import { FormSubmissionsController } from '#app/modules/form-submissions/form-submissions.controller';
import { FORM_PROVIDER_AXIOS_KEY, FORM_PROVIDER_KEY } from '#app/modules/form-submissions/keys';
import {
BaseFormProviderService,
FormSchemaProviderService,
MockedFormProviderService,
} from '#app/services/form-provider/exports';
import { FormValidationService } from '#app/services/form-validation/exports';
import axios from 'axios';
import type { EnvConfig } from '#app/types/env';
import { RequestLoggerService } from '#app/services/request-logger/exports';
import { DataFactoryService } from '#app/services/data-factory/DataFactoryService';
@Module({
imports: [HttpModule],
controllers: [FormSubmissionsController],
providers: [
RequestLoggerService,
{
provide: FORM_PROVIDER_AXIOS_KEY,
useFactory: (config: ConfigService<EnvConfig>): HttpService => {
return new HttpService(
axios.create({
baseURL: config.get('FORM_PROVIDER_BASE_URL', 'http://form-schema-provider:8080'),
}),
);
},
inject: [ConfigService],
},
{
provide: FORM_PROVIDER_KEY,
useFactory: (
config: ConfigService<EnvConfig>,
http: HttpService,
logger: RequestLoggerService,
): BaseFormProviderService => {
return config.get('USE_MOCKED_FORM_PROVIDER') === 'true'
? new MockedFormProviderService(logger)
: new FormSchemaProviderService(config, http, logger);
},
inject: [ConfigService, FORM_PROVIDER_AXIOS_KEY, RequestLoggerService],
},
FormValidationService,
DataFactoryService,
],
})
export class FormSubmissionsModule {}