Files
nullcart/backend/src/AppModule.ts
T

108 lines
4.2 KiB
TypeScript

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService, registerAs } from '@nestjs/config';
import { APP_GUARD } from '@nestjs/core';
import { ScheduleModule } from '@nestjs/schedule';
import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler';
import { TypeOrmModule } from '@nestjs/typeorm';
import {
getAppConfig,
getCoingeckoConfig,
getEncryptionConfig,
getJwtConfig,
getCoinPaprikaConfig,
getOrderConfig,
getInvoiceConfig,
getMoneroWalletConfig,
getPostgresConfig,
getShopSettingsConfig,
getSimplexConfig
} from './config';
import { validate } from './config/validate';
import { AuthModule } from './modules/auth/AuthModule';
import { EncryptionModule } from './modules/encryption/EncryptionModule';
import { HealthCheckModule } from './modules/healthCheck/HealthCheckModule';
import { MoneroWalletModule } from './modules/moneroWallet/MoneroWalletModule';
import { SimplexModule } from './modules/simplex/SimplexModule';
import { DiscountCodesModule } from './modules/discountCode/DiscountCodesModule';
import { DataWipeModule } from './modules/dataWipe/DataWipeModule';
import { NotificationsModule } from './modules/notifications/NotificationsModule';
import { OrderModule } from './modules/order/OrderModule';
import { PaymentModule } from './modules/payment/PaymentModule';
import { ProductsModule } from './modules/product/ProductsModule';
import { ShopSettingsModule } from './modules/shopSettings/ShopSettingsModule';
import { StorefrontCartModule } from './modules/storefrontCart/StorefrontCartModule';
import { StorefrontCheckoutModule } from './modules/storefrontCheckout/StorefrontCheckoutModule';
import { StorefrontOrderModule } from './modules/storefrontOrder/StorefrontOrderModule';
import { StorefrontCoreModule } from './modules/storefrontCore/StorefrontCoreModule';
import { StorefrontProductModule } from './modules/storefrontProduct/StorefrontProductModule';
import { ExchangeRateModule } from './modules/exchangeRate/ExchangeRateModule';
import { Config } from './types/Config';
@Module({
imports: [
ScheduleModule.forRoot(),
ConfigModule.forRoot({
isGlobal: true,
validate,
load: [
registerAs('postgres', getPostgresConfig),
registerAs('app', getAppConfig),
registerAs('jwt', getJwtConfig),
registerAs('coingecko', getCoingeckoConfig),
registerAs('coinPaprika', getCoinPaprikaConfig),
registerAs('encryption', getEncryptionConfig),
registerAs('shopSettings', getShopSettingsConfig),
registerAs('order', getOrderConfig),
registerAs('invoice', getInvoiceConfig),
registerAs('moneroWallet', getMoneroWalletConfig),
registerAs('simplex', getSimplexConfig)
]
}),
ThrottlerModule.forRootAsync({
inject: [ConfigService],
useFactory: (configService: ConfigService) => {
const { throttle } = configService.get('app') as Config['app'];
return {
throttlers: [
{
name: 'default',
ttl: throttle.ttlMs,
limit: throttle.limit
}
]
};
}
}),
ExchangeRateModule,
TypeOrmModule.forRootAsync({
useFactory: (configService: ConfigService) => configService.get('postgres') as Config['postgres'],
inject: [ConfigService]
}),
HealthCheckModule,
EncryptionModule,
AuthModule,
ProductsModule,
ShopSettingsModule,
SimplexModule,
NotificationsModule,
DiscountCodesModule,
OrderModule,
PaymentModule,
DataWipeModule,
MoneroWalletModule,
StorefrontCoreModule,
StorefrontProductModule,
StorefrontCartModule,
StorefrontCheckoutModule,
StorefrontOrderModule
],
providers: [
{
provide: APP_GUARD,
useClass: ThrottlerGuard
}
]
})
export class AppModule {}