mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-11-26 08:34:55 +00:00
98 lines
3.4 KiB
TypeScript
98 lines
3.4 KiB
TypeScript
import { MiddlewareConsumer, Module } from '@nestjs/common';
|
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
import { APP_FILTER, APP_PIPE } from '@nestjs/core';
|
|
import { EventEmitterModule } from '@nestjs/event-emitter';
|
|
import { ScheduleModule } from '@nestjs/schedule';
|
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
import { I18nMiddleware, I18nModule } from 'nestjs-i18n';
|
|
import { LoggerModule } from 'nestjs-pino';
|
|
import { DataSource } from 'typeorm';
|
|
import { addTransactionalDataSource } from 'typeorm-transactional';
|
|
import { AuthModule } from './auth/auth.module';
|
|
import { CardModule } from './card/card.module';
|
|
import { CacheModule } from './common/modules/cache/cache.module';
|
|
import { LookupModule } from './common/modules/lookup/lookup.module';
|
|
import { NeoLeapModule } from './common/modules/neoleap/neoleap.module';
|
|
import { NotificationModule } from './common/modules/notification/notification.module';
|
|
import { OtpModule } from './common/modules/otp/otp.module';
|
|
import { AllExceptionsFilter, buildI18nValidationExceptionFilter } from './core/filters';
|
|
import { buildConfigOptions, buildLoggerOptions, buildTypeormOptions } from './core/module-options';
|
|
import { buildI18nOptions } from './core/module-options/i18n-options';
|
|
import { buildValidationPipe } from './core/pipes';
|
|
import { CronModule } from './cron/cron.module';
|
|
import { CustomerModule } from './customer/customer.module';
|
|
import { migrations } from './db';
|
|
import { DocumentModule } from './document/document.module';
|
|
import { GuardianModule } from './guardian/guardian.module';
|
|
import { HealthModule } from './health/health.module';
|
|
import { JuniorModule } from './junior/junior.module';
|
|
import { UserModule } from './user/user.module';
|
|
import { WebhookModule } from './webhook/webhook.module';
|
|
import { MoneyRequestModule } from './money-request/money-request.module';
|
|
|
|
@Module({
|
|
controllers: [],
|
|
imports: [
|
|
ConfigModule.forRoot(buildConfigOptions()),
|
|
TypeOrmModule.forRootAsync({
|
|
imports: [],
|
|
inject: [ConfigService],
|
|
useFactory: (config: ConfigService) => {
|
|
return buildTypeormOptions(config, migrations);
|
|
},
|
|
async dataSourceFactory(options) {
|
|
if (!options) {
|
|
throw new Error('Invalid options passed');
|
|
}
|
|
|
|
return addTransactionalDataSource(new DataSource(options));
|
|
},
|
|
}),
|
|
LoggerModule.forRootAsync({
|
|
useFactory: (config: ConfigService) => buildLoggerOptions(config),
|
|
inject: [ConfigService],
|
|
}),
|
|
I18nModule.forRoot(buildI18nOptions()),
|
|
CacheModule,
|
|
EventEmitterModule.forRoot(),
|
|
ScheduleModule.forRoot(),
|
|
// App modules
|
|
AuthModule,
|
|
UserModule,
|
|
|
|
CustomerModule,
|
|
JuniorModule,
|
|
GuardianModule,
|
|
CardModule,
|
|
|
|
NotificationModule,
|
|
OtpModule,
|
|
DocumentModule,
|
|
LookupModule,
|
|
|
|
HealthModule,
|
|
|
|
CronModule,
|
|
NeoLeapModule,
|
|
WebhookModule,
|
|
MoneyRequestModule,
|
|
],
|
|
providers: [
|
|
// Global Pipes
|
|
{
|
|
inject: [ConfigService],
|
|
provide: APP_PIPE,
|
|
useFactory: (config: ConfigService) => buildValidationPipe(config),
|
|
},
|
|
|
|
// Global Filters (order matters)
|
|
{ provide: APP_FILTER, useClass: AllExceptionsFilter },
|
|
{ provide: APP_FILTER, useValue: buildI18nValidationExceptionFilter() },
|
|
],
|
|
})
|
|
export class AppModule {
|
|
configure(consumer: MiddlewareConsumer) {
|
|
consumer.apply(I18nMiddleware).forRoutes('*');
|
|
}
|
|
}
|