pos-be/src/app.module.ts

203 lines
8.7 KiB
TypeScript

import { Module, Scope } from '@nestjs/common';
import { RefreshTokenInterceptor, SessionModule } from './core/sessions';
import { APP_FILTER, APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core';
import { HttpExceptionFilter, TransformInterceptor } from './core/response';
import { ApmModule } from './core/apm';
import { CONNECTION_NAME } from './core/strings/constants/base.constants';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from '@nestjs/config';
import { UserPrivilegeModule } from './modules/user-related/user-privilege/user-privilege.module';
import { CqrsModule } from '@nestjs/cqrs';
import { CouchModule } from './modules/configuration/couch/couch.module';
import { UserPrivilegeModels } from './modules/user-related/user-privilege/constants';
import { RolesGuard } from './core/guards/domain/roles.guard';
import { PrivilegeService } from './core/guards/domain/services/privilege.service';
import { UserModel } from './modules/user-related/user/data/models/user.model';
import { AuthModule } from './modules/configuration/auth/auth.module';
import { UserModule } from './modules/user-related/user/user.module';
import { LogModel } from './modules/configuration/log/data/models/log.model';
import { ErrorLogModel } from './modules/configuration/log/data/models/error-log.model';
import { LogModule } from './modules/configuration/log/log.module';
import { TenantModule } from './modules/user-related/tenant/tenant.module';
import { ItemCategoryModule } from './modules/item-related/item-category/item-category.module';
import { ItemCategoryModel } from './modules/item-related/item-category/data/models/item-category.model';
import { ConstantModule } from './modules/configuration/constant/constant.module';
import { VipCategoryModule } from './modules/transaction/vip-category/vip-category.module';
import { VipCategoryModel } from './modules/transaction/vip-category/data/models/vip-category.model';
import { VipCodeModule } from './modules/transaction/vip-code/vip-code.module';
import { VipCodeModel } from './modules/transaction/vip-code/data/models/vip-code.model';
import { ItemModule } from './modules/item-related/item/item.module';
import { ItemModel } from './modules/item-related/item/data/models/item.model';
import { SeasonTypeModule } from './modules/season-related/season-type/season-type.module';
import { SeasonTypeModel } from './modules/season-related/season-type/data/models/season-type.model';
import { TaxModule } from './modules/transaction/tax/tax.module';
import { TaxModel } from './modules/transaction/tax/data/models/tax.model';
import { SalesPriceFormulaModule } from './modules/transaction/sales-price-formula/sales-price-formula.module';
import { SalesPriceFormulaModel } from './modules/transaction/sales-price-formula/data/models/sales-price-formula.model';
import { ProfitShareFormulaModule } from './modules/transaction/profit-share-formula/profit-share-formula.module';
import { PaymentMethodModule } from './modules/transaction/payment-method/payment-method.module';
import { PaymentMethodModel } from './modules/transaction/payment-method/data/models/payment-method.model';
import { SeasonPeriodModule } from './modules/season-related/season-period/season-period.module';
import { SeasonPeriodModel } from './modules/season-related/season-period/data/models/season-period.model';
import { ItemRateModule } from './modules/item-related/item-rate/item-rate.module';
import { ItemRateModel } from './modules/item-related/item-rate/data/models/item-rate.model';
import { GoogleCalendarModule } from './modules/configuration/google-calendar/google-calendar.module';
import { TransactionModule } from './modules/transaction/transaction/transaction.module';
import { TransactionModel } from './modules/transaction/transaction/data/models/transaction.model';
import { TransactionItemModel } from './modules/transaction/transaction/data/models/transaction-item.model';
import { TransactionTaxModel } from './modules/transaction/transaction/data/models/transaction-tax.model';
import { ReconciliationModule } from './modules/transaction/reconciliation/reconciliation.module';
import { ReportModule } from './modules/reports/report/report.module';
import { ReportBookmarkModule } from './modules/reports/report-bookmark/report-bookmark.module';
import { ReportExportModule } from './modules/reports/report-export/report-export.module';
import { ReportBookmarkModel } from './modules/reports/shared/models/report-bookmark.model';
import { ExportReportHistoryModel } from './modules/reports/shared/models/export-report-history.model';
import { CronModule } from './modules/configuration/cron/cron.module';
import { MidtransModule } from './modules/configuration/midtrans/midtrans.module';
import { RefundModule } from './modules/transaction/refund/refund.module';
import { RefundModel } from './modules/transaction/refund/data/models/refund.model';
import { RefundItemModel } from './modules/transaction/refund/data/models/refund-item.model';
import { GateModule } from './modules/web-information/gate/gate.module';
import { GateModel } from './modules/web-information/gate/data/models/gate.model';
import { TermConditionModule } from './modules/web-information/term-condition/term-condition.module';
import { TermConditionModel } from './modules/web-information/term-condition/data/models/term-condition.model';
import { FaqModel } from './modules/web-information/faq/data/models/faq.model';
import { FaqModule } from './modules/web-information/faq/faq.module';
import { UploadModule } from './modules/configuration/upload/upload.module';
import { NewsModule } from './modules/web-information/news/news.module';
import { NewsModel } from './modules/web-information/news/data/models/news.model';
import { BannerModule } from './modules/web-information/banner/banner.module';
import { BannerModel } from './modules/web-information/banner/data/models/banner.model';
import { MailModule } from './modules/configuration/mail/mail.module';
import { PosLogModel } from './modules/configuration/log/data/models/pos-log.model';
import { ExportModule } from './modules/configuration/export/export.module';
@Module({
imports: [
ApmModule.register(),
ConfigModule.forRoot({
isGlobal: true,
}),
TypeOrmModule.forRoot({
name: CONNECTION_NAME.DEFAULT,
type: 'postgres',
host: process.env.DEFAULT_DB_HOST,
port: parseInt(process.env.DEFAULT_DB_PORT),
username: process.env.DEFAULT_DB_USER,
password: process.env.DEFAULT_DB_PASS,
database: process.env.DEFAULT_DB_NAME,
entities: [
...UserPrivilegeModels,
BannerModel,
ErrorLogModel,
FaqModel,
GateModel,
ItemModel,
ItemCategoryModel,
ItemRateModel,
LogModel,
NewsModel,
PaymentMethodModel,
PosLogModel,
RefundModel,
RefundItemModel,
SalesPriceFormulaModel,
SeasonPeriodModel,
SeasonTypeModel,
TaxModel,
TermConditionModel,
TransactionModel,
TransactionItemModel,
TransactionTaxModel,
UserModel,
VipCategoryModel,
VipCodeModel,
// report
ReportBookmarkModel,
ExportReportHistoryModel,
],
synchronize: false,
}),
AuthModule,
ConstantModule,
CqrsModule,
CouchModule,
CronModule,
ExportModule,
GoogleCalendarModule,
LogModule,
MailModule,
MidtransModule,
SessionModule,
UploadModule,
// user
TenantModule,
UserModule,
UserPrivilegeModule,
// Item
ItemCategoryModule,
ItemModule,
ItemRateModule,
// transaction
PaymentMethodModule,
ProfitShareFormulaModule,
ReconciliationModule,
RefundModule,
SalesPriceFormulaModule,
TaxModule,
TransactionModule,
VipCategoryModule,
VipCodeModule,
// session
SeasonTypeModule,
SeasonPeriodModule,
// web information
BannerModule,
FaqModule,
GateModule,
NewsModule,
TermConditionModule,
// report
ReportModule,
ReportBookmarkModule,
ReportExportModule,
],
controllers: [],
providers: [
PrivilegeService,
/**
* By default all request from client will protect by JWT
* if there is some endpoint/function that does'nt require authentication
* please add `@Unprotected()` decorator to the function
*/
{
provide: APP_GUARD,
scope: Scope.REQUEST,
useClass: RolesGuard,
},
{
provide: APP_INTERCEPTOR,
scope: Scope.REQUEST,
useClass: RefreshTokenInterceptor,
},
{
provide: APP_INTERCEPTOR,
scope: Scope.REQUEST,
useClass: TransformInterceptor,
},
{
provide: APP_FILTER,
scope: Scope.REQUEST,
useClass: HttpExceptionFilter,
},
],
})
export class AppModule {}