forked from Yara724/api
133 lines
5.1 KiB
TypeScript
133 lines
5.1 KiB
TypeScript
import { join } from "node:path";
|
|
import { APP_INTERCEPTOR, APP_PIPE } from "@nestjs/core";
|
|
import { Module, ValidationPipe } from "@nestjs/common";
|
|
import { ConfigModule, ConfigService } from "@nestjs/config";
|
|
import { UnicodeDigitsNormalizeInterceptor } from "./common/interceptors/unicode-digits-normalize.interceptor";
|
|
import { MongooseModule } from "@nestjs/mongoose";
|
|
import { ServeStaticModule } from "@nestjs/serve-static";
|
|
import { AiModule } from "./ai/ai.module";
|
|
import { AuthModule } from "./auth/auth.module";
|
|
import { ClaimRequestManagementModule } from "./claim-request-management/claim-request-management.module";
|
|
import { ClientModule } from "./client/client.module";
|
|
import { ExpertBlameModule } from "./expert-blame/expert-blame.module";
|
|
import { ExpertClaimModule } from "./expert-claim/expert-claim.module";
|
|
import { ExpertInsurerModule } from "./expert-insurer/expert-insurer.module";
|
|
import { LookupsModule } from "./lookups/lookups.module";
|
|
import { PlatesModule } from "./plates/plates.module";
|
|
import { ProfileModule } from "./profile/profile.module";
|
|
import { SandHubModule } from "./sand-hub/sand-hub.module";
|
|
import { SystemSettingsModule } from "./system-settings/system-settings.module";
|
|
import { ReportsModule } from "./reports/reports.module";
|
|
import { RequestManagementModule } from "./request-management/request-management.module";
|
|
import { UsersModule } from "./users/users.module";
|
|
import { applyIranFaTimestampPlugin } from "./helpers/mongoose-fa-timestamps.plugin";
|
|
import { CronModule } from "./utils/cron/cron.module";
|
|
import { WorkflowStepManagementModule } from "./workflow-step-management/workflow-step-management.module";
|
|
import * as Joi from "joi";
|
|
|
|
@Module({
|
|
imports: [
|
|
ConfigModule.forRoot({
|
|
isGlobal: true,
|
|
validationSchema: Joi.object({
|
|
NODE_ENV: Joi.string()
|
|
.valid("development", "production")
|
|
.default("development"),
|
|
PORT: Joi.number().port().default(9001),
|
|
URL: Joi.string().uri().required(),
|
|
BASE_URL_DEV: Joi.string()
|
|
.uri()
|
|
.when("NODE_ENV", {
|
|
is: Joi.string().valid("development"),
|
|
then: Joi.required(),
|
|
otherwise: Joi.optional(),
|
|
}),
|
|
SWAGGER_USER_DEV: Joi.string().when("NODE_ENV", {
|
|
is: Joi.string().valid("development"),
|
|
then: Joi.required(),
|
|
otherwise: Joi.optional(),
|
|
}),
|
|
SWAGGER_PASSWORD_DEV: Joi.string().when("NODE_ENV", {
|
|
is: Joi.string().valid("development"),
|
|
then: Joi.required(),
|
|
otherwise: Joi.optional(),
|
|
}),
|
|
MONGO_HOST: Joi.string().required(),
|
|
MONGO_PORT: Joi.number().port().required(),
|
|
MONGO_USER: Joi.string().required(),
|
|
MONGO_PASS: Joi.string().required(),
|
|
MONGO_DB_NAME: Joi.string().required(),
|
|
JWT_SECRET: Joi.string().required(),
|
|
SANHUB_BASE_URL: Joi.string().uri(),
|
|
SANHUB_URL_LOGIN: Joi.string().uri(),
|
|
SANHUB_USERNAME: Joi.string(),
|
|
SANHUB_PASSWORD: Joi.string(),
|
|
AI_URL: Joi.string().uri(),
|
|
AI_URL_V2: Joi.string().uri(),
|
|
AI_USERNAME: Joi.string(),
|
|
AI_PASSWORD: Joi.string(),
|
|
SMS_PROVIDER: Joi.string()
|
|
.valid("kavenegar", "parsian")
|
|
.default("kavenegar"),
|
|
SMS_API_KEY: Joi.string(),
|
|
AUTH_SMS_TEMPLATE: Joi.string(),
|
|
EXP_OTP_TIME: Joi.number(),
|
|
}),
|
|
}),
|
|
CronModule,
|
|
ServeStaticModule.forRoot({
|
|
rootPath: join(__dirname, "..", "files"),
|
|
serveRoot: "/files",
|
|
}),
|
|
MongooseModule.forRootAsync({
|
|
inject: [ConfigService],
|
|
useFactory: (configService: ConfigService) => {
|
|
return {
|
|
uri: `mongodb://${configService.get<string>("MONGO_USER")}:${configService.get<string>("MONGO_PASS")}@${configService.get<string>("MONGO_HOST")}:${configService.get<string>("MONGO_PORT")}/${configService.get<string>("MONGO_DB_NAME")}?authSource=admin&${configService.get<string>("MONGO_OPTIONS")}`,
|
|
tls: configService.get<string>("MONGO_TLS") === "true",
|
|
tlsAllowInvalidCertificates:
|
|
configService.get<string>("MONGO_TLS_ALLOW_INVALID_CERTS") ===
|
|
"true",
|
|
autoIndex: configService.get<string>("NODE_ENV") !== "production",
|
|
connectionFactory: (connection) => {
|
|
applyIranFaTimestampPlugin(connection);
|
|
return connection;
|
|
},
|
|
};
|
|
},
|
|
}),
|
|
UsersModule,
|
|
AuthModule,
|
|
ClientModule,
|
|
ProfileModule,
|
|
PlatesModule,
|
|
RequestManagementModule,
|
|
SandHubModule,
|
|
SystemSettingsModule,
|
|
ExpertBlameModule,
|
|
ClaimRequestManagementModule,
|
|
ExpertClaimModule,
|
|
AiModule,
|
|
ReportsModule,
|
|
ExpertInsurerModule,
|
|
LookupsModule,
|
|
WorkflowStepManagementModule,
|
|
],
|
|
controllers: [],
|
|
providers: [
|
|
{
|
|
provide: APP_INTERCEPTOR,
|
|
useClass: UnicodeDigitsNormalizeInterceptor,
|
|
},
|
|
// {
|
|
// provide: APP_PIPE,
|
|
// useValue: new ValidationPipe({
|
|
// transform: true,
|
|
// whitelist: true,
|
|
// forbidNonWhitelisted: false,
|
|
// }),
|
|
// },
|
|
],
|
|
})
|
|
export class AppModule {}
|