123 lines
6.0 KiB
TypeScript
123 lines
6.0 KiB
TypeScript
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
|
|
import { APP_GUARD } from '@nestjs/core';
|
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler';
|
|
import configuration from './config/configuration';
|
|
import { TenantMiddleware } from './common/tenant/tenant.middleware';
|
|
import { RedisModule } from './common/redis/redis.module';
|
|
import { I18nModule } from './common/i18n/i18n.module';
|
|
import { CacheModule } from './common/cache/cache.module';
|
|
import { EntitlementsModule } from './common/entitlements/entitlements.module';
|
|
import { PlatformModule } from './common/platform/platform.module';
|
|
import { AuditModule } from './common/audit/audit.module';
|
|
import { SigningModule } from './common/signing/signing.module';
|
|
import { PhoneModule } from './common/phone/phone.module';
|
|
import { DeviceModule } from './common/device/device.module';
|
|
import { SeedModule } from './common/seed/seed.module';
|
|
import { HealthModule } from './modules/health/health.module';
|
|
import { TenantsModule } from './modules/tenants/tenants.module';
|
|
import { UsersModule } from './modules/users/users.module';
|
|
import { AuthModule } from './modules/auth/auth.module';
|
|
import { DriversModule } from './modules/drivers/drivers.module';
|
|
import { MatchingModule } from './modules/matching/matching.module';
|
|
import { LocationsModule } from './modules/locations/locations.module';
|
|
import { TariffModule } from './modules/tariff/tariff.module';
|
|
import { MapsModule } from './modules/maps/maps.module';
|
|
import { TripsModule } from './modules/trips/trips.module';
|
|
import { RealtimeModule } from './realtime/realtime.module';
|
|
import { FraudModule } from './modules/fraud/fraud.module';
|
|
import { ChatModule } from './modules/chat/chat.module';
|
|
import { RatingsModule } from './modules/ratings/ratings.module';
|
|
import { NabehModule } from './integrations/nabeh/nabeh.module';
|
|
import { OtpModule } from './integrations/otp/otp.module';
|
|
import { RideTypesModule } from './modules/ride-types/ride-types.module';
|
|
import { DispatchModule } from './modules/dispatch/dispatch.module';
|
|
import { WalletModule } from './modules/wallet/wallet.module';
|
|
import { TenantWalletModule } from './modules/tenant-wallet/tenant-wallet.module';
|
|
import { CreditModule } from './modules/credit/credit.module';
|
|
import { NotificationsModule } from './modules/notifications/notifications.module';
|
|
import { PaymentsModule } from './modules/payments/payments.module';
|
|
import { StorageModule } from './common/storage/storage.module';
|
|
import { DocumentsModule } from './modules/documents/documents.module';
|
|
import { VehiclesModule } from './modules/vehicles/vehicles.module';
|
|
import { GeminiModule } from './integrations/gemini/gemini.module';
|
|
import { BillingModule } from './modules/billing/billing.module';
|
|
|
|
@Module({
|
|
imports: [
|
|
ConfigModule.forRoot({ isGlobal: true, load: [configuration] }),
|
|
|
|
TypeOrmModule.forRootAsync({
|
|
inject: [ConfigService],
|
|
useFactory: (cfg: ConfigService) => ({
|
|
type: 'postgres',
|
|
host: cfg.get<string>('db.host'),
|
|
port: cfg.get<number>('db.port'),
|
|
database: cfg.get<string>('db.name'),
|
|
username: cfg.get<string>('db.user'),
|
|
password: cfg.get<string>('db.password'),
|
|
// بركة اتصالات أكبر — يرفع سقف التزامن تحت الحمل العالي
|
|
extra: { max: parseInt(process.env.DB_POOL_MAX ?? '30', 10) },
|
|
// بادئة الجداول (tripz_) لعزل السيرفر المشترك — راجع docs/14
|
|
entityPrefix: cfg.get<string>('db.tablePrefix'),
|
|
synchronize: cfg.get<boolean>('db.synchronize'),
|
|
autoLoadEntities: true,
|
|
}),
|
|
}),
|
|
|
|
ThrottlerModule.forRoot([{ ttl: 60000, limit: 120 }]),
|
|
|
|
RedisModule, // عالمي — عميل Redis للمطابقة و OTP
|
|
I18nModule, // عالمي — ترجمة نصوص الإشعارات
|
|
CacheModule, // عالمي — كاش-جانبي فوق Redis (خط أول قبل القاعدة)
|
|
EntitlementsModule, // عالمي — استحقاقات الاشتراك + FeatureGuard
|
|
PlatformModule, // عالمي — حارس السوبر-أدمن (x-platform-secret)
|
|
AuditModule, // عالمي — سجل التدقيق المالي
|
|
SigningModule, // عالمي — توقيع HMAC للعمليات المالية
|
|
PhoneModule, // عالمي — تطبيع أرقام الهاتف لكل دولة
|
|
DeviceModule, // عالمي — ربط الجلسة بالجهاز
|
|
NabehModule, // عالمي — إرسال OTP واتساب (سوريا/الأردن)
|
|
OtpModule, // عالمي — توجيه OTP متعدد المزوّدين حسب الدولة + failover
|
|
NotificationsModule, // عالمي — FCM
|
|
StorageModule, // عالمي — تخزين ملفات الوثائق
|
|
GeminiModule, // عالمي — رؤية AI (وثائق + وجه)
|
|
|
|
HealthModule,
|
|
TenantsModule,
|
|
UsersModule,
|
|
AuthModule,
|
|
MapsModule,
|
|
MatchingModule,
|
|
LocationsModule,
|
|
TariffModule,
|
|
RideTypesModule,
|
|
DriversModule,
|
|
RealtimeModule,
|
|
FraudModule,
|
|
WalletModule,
|
|
TenantWalletModule, // دفترا المستأجر: إيراد وأمانات (docs/24)
|
|
CreditModule,
|
|
PaymentsModule,
|
|
BillingModule,
|
|
TripsModule,
|
|
DispatchModule,
|
|
ChatModule,
|
|
RatingsModule,
|
|
DocumentsModule,
|
|
VehiclesModule,
|
|
SeedModule,
|
|
],
|
|
providers: [
|
|
// ThrottlerModule.forRoot() وحده لا يفعل شيئاً — كان مسجَّلاً منذ البداية
|
|
// بلا أي حارس يطبّقه، فتحديد 120/60s لم يكن ساري المفعول إطلاقاً على أي
|
|
// نقطة. APP_GUARD يُفعّله عالمياً على كل نقطة تلقائياً (docs/17 — D4).
|
|
{ provide: APP_GUARD, useClass: ThrottlerGuard },
|
|
],
|
|
})
|
|
export class AppModule implements NestModule {
|
|
configure(consumer: MiddlewareConsumer) {
|
|
consumer.apply(TenantMiddleware).forRoutes('*');
|
|
}
|
|
}
|