mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-08-25 21:59:40 +00:00
102 lines
3.5 KiB
TypeScript
102 lines
3.5 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 { AllowanceModule } from './allowance/allowance.module';
|
|
import { AuthModule } from './auth/auth.module';
|
|
import { CacheModule } from './common/modules/cache/cache.module';
|
|
import { LookupModule } from './common/modules/lookup/lookup.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 { GiftModule } from './gift/gift.module';
|
|
import { GuardianModule } from './guardian/guardian.module';
|
|
import { HealthModule } from './health/health.module';
|
|
import { JuniorModule } from './junior/junior.module';
|
|
import { MoneyRequestModule } from './money-request/money-request.module';
|
|
import { SavingGoalsModule } from './saving-goals/saving-goals.module';
|
|
import { TaskModule } from './task/task.module';
|
|
import { UserModule } from './user/user.module';
|
|
|
|
@Module({
|
|
controllers: [],
|
|
imports: [
|
|
ConfigModule.forRoot(buildConfigOptions()),
|
|
TypeOrmModule.forRootAsync({
|
|
imports: [],
|
|
inject: [ConfigService],
|
|
useFactory: (config: ConfigService) => {
|
|
return buildTypeormOptions(config, migrations);
|
|
},
|
|
/* eslint-disable require-await */
|
|
async dataSourceFactory(options) {
|
|
if (!options) {
|
|
throw new Error('Invalid options passed');
|
|
}
|
|
|
|
return addTransactionalDataSource(new DataSource(options));
|
|
},
|
|
/* eslint-enable require-await */
|
|
}),
|
|
LoggerModule.forRootAsync({
|
|
useFactory: (config: ConfigService) => buildLoggerOptions(config),
|
|
inject: [ConfigService],
|
|
}),
|
|
I18nModule.forRoot(buildI18nOptions()),
|
|
CacheModule,
|
|
EventEmitterModule.forRoot(),
|
|
ScheduleModule.forRoot(),
|
|
// App modules
|
|
AuthModule,
|
|
CustomerModule,
|
|
JuniorModule,
|
|
|
|
TaskModule,
|
|
GuardianModule,
|
|
SavingGoalsModule,
|
|
AllowanceModule,
|
|
MoneyRequestModule,
|
|
GiftModule,
|
|
NotificationModule,
|
|
OtpModule,
|
|
DocumentModule,
|
|
LookupModule,
|
|
|
|
HealthModule,
|
|
|
|
UserModule,
|
|
|
|
CronModule,
|
|
],
|
|
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('*');
|
|
}
|
|
}
|