import { Module, forwardRef } from "@nestjs/common"; import { TypeOrmModule } from "@nestjs/typeorm"; import { HttpModule } from "@nestjs/axios"; import { FilesModule } from "../files/files.module"; import { FileUploadSettingsModule } from "../file-upload-settings/file-upload-settings.module"; import { MinioModule } from "../minio/minio.module"; import { NotificationsModule } from "../notifications/notifications.module"; import { NotificationInboxModule } from "../notification-inbox/notification-inbox.module"; import { CompaniesController } from "./companies.controller"; import { CompaniesService } from "./companies.service"; import { CompaniesRepository } from "./companies.repository"; import { ExternalProfileRepository } from "./external-profile.repository"; import { CompanyDashboardRepository } from "./company-dashboard.repository"; import { Company } from "./entities/company.entity"; import { ExternalProfile } from "./entities/external-profile.entity"; import { CompanyProfile } from "./entities/company-profile.entity"; import { CompanyChangeRequest } from "./entities/company-change-request.entity"; import { CompanyRevision } from "./entities/company-revision.entity"; import { Booking } from "../bookings/entities/booking.entity"; import { ShippingLineCompaniesModule } from "../shipping-lines/shipping-line-companies.module"; import { TransitAgentsModule } from "../transit-agents/transit-agents.module"; import { CompanyProfileRepository } from "./company-profile.repository"; import { CompanyChangeRequestRepository } from "./company-change-request.repository"; import { CompanyRevisionRepository } from "./company-revision.repository"; import { ETradeService } from "./services/etrade.service"; import { CompanyNotifierService } from "./company-notifier.service"; import { VerifaydaModule } from "../verifayda/verifayda.module"; @Module({ imports: [ TypeOrmModule.forFeature([ Company, ExternalProfile, CompanyProfile, CompanyChangeRequest, CompanyRevision, Booking, ]), HttpModule, FilesModule, FileUploadSettingsModule, MinioModule, // Account-status notifications (CompanyNotifierService). The inbox module // imports this module back for portal recipient targeting, hence forwardRef. NotificationsModule, forwardRef(() => NotificationInboxModule), // Fayda identity verification for the company's owner and PoA. VerifaydaModule, // `GET /companies/getInfo` serves both portal audiences: it must recognise a // shipping-line session, which has no company row to look up. forwardRef // because that module imports BillingModule, which imports this one. forwardRef(() => ShippingLineCompaniesModule), // `GET /companies/getInfo` resolves a transit-agent session before falling // through to the customer lookup. TransitAgentsModule is a leaf here — it // does not import CompaniesModule — so no forwardRef is needed. TransitAgentsModule, ], controllers: [CompaniesController], providers: [ CompaniesService, CompaniesRepository, ExternalProfileRepository, CompanyProfileRepository, CompanyChangeRequestRepository, CompanyRevisionRepository, CompanyDashboardRepository, ETradeService, CompanyNotifierService, ], exports: [ CompaniesService, // Consumed by NotificationInboxModule for portal recipient targeting. ExternalProfileRepository, CompanyProfileRepository, // Consumed by EimsModule's EimsSellerCacheService — same e-Trade business-registry lookup // already used for every customer company at onboarding, reused for EDR's own TIN. ETradeService, ], }) export class CompaniesModule { }