import { Module } from "@nestjs/common"; import { HealthModule } from "./health/health.module"; import { DemoController } from "./demo/demo.controller"; import { PublishingController } from "./publishing/publishing.controller"; import { pool, withTenant } from "./db/client"; import { PublishingExecutionRepository, assertPublishingSchema } from "@tactical-media-broadcast-hub/publishing-execution"; import { ApprovalGateService } from "./publishing/approval-gate.service.js"; import { PUBLISHING_DEPENDENCIES, TemporalWorkflowStarter, PublishingService } from "./publishing/publishing.service"; import { AuthController } from "./auth/auth.controller"; import { AuthService } from "./auth/auth.service"; import { ConnectionsController } from "./connections/connections.controller"; import { ConnectionsService } from "./connections/connections.service"; import { TeamController } from "./team/team.controller"; import { TeamService } from "./team/team.service"; import { InviteLinkController, InviteClaimController } from "./team/invite-link.controller"; import { InviteLinkService } from "./team/invite-link.service"; import { AuditController } from "./audit/audit.controller"; import { AuditQueryService } from "./audit/audit.query"; import { GroupsController } from "./groups/groups.controller"; import { GroupsService } from "./groups/groups.service"; import { VideoController } from "./video/video.controller"; import { VideoService } from "./video/video.service"; import { LiveMonitorModule } from "./live-monitor/live-monitor.module"; import { MediaControlModule } from "./media-control/media-control.module"; import { ProductionModule } from "./production/production.module"; import { RealtimeModule } from "./realtime/realtime.module"; import { LiveChatModule } from "./live-chat/live-chat.module"; import { LiveModule } from "./live/live.module.js"; import { ChatgovModule } from "./chatgov/chatgov.module.js"; import { IntakeModule } from "./intake/intake.module.js"; import { GroupFilesModule } from "./group-files/group-files.module.js"; import { SettingsModule } from "./settings/settings.module.js"; import { SettingsController } from "./settings/settings.controller.js"; import { SettingsService } from "./settings/settings.service.js"; import { VirtualChannelsModule } from "./virtual-channels/virtual-channels.module.js"; import { DirectorModule } from "./director/director.module.js"; import { AnalyticsController } from "./analytics/analytics.controller"; import { SnapshotService } from "./analytics/snapshot.service"; import { CollectivesModule } from "./collectives/collectives.module.js"; @Module({ imports: [HealthModule, LiveMonitorModule, MediaControlModule, ProductionModule, RealtimeModule, LiveChatModule, LiveModule, VirtualChannelsModule, ChatgovModule, IntakeModule, GroupFilesModule, SettingsModule, CollectivesModule], controllers: [ DemoController, PublishingController, AuthController, ConnectionsController, TeamController, InviteLinkController, InviteClaimController, AuditController, VideoController, GroupsController, AnalyticsController, SettingsController, ], providers: [ { provide: PublishingExecutionRepository, useFactory: () => new PublishingExecutionRepository(pool) }, TemporalWorkflowStarter, { provide: PUBLISHING_DEPENDENCIES, inject: [PublishingExecutionRepository, TemporalWorkflowStarter, ApprovalGateService], useFactory: (repository: PublishingExecutionRepository, workflowStarter: TemporalWorkflowStarter, approvalGate: ApprovalGateService) => ({ repository, workflowStarter, approvalGate, tenantTransaction: withTenant, assertReady: () => assertPublishingSchema(pool) }) }, PublishingService, ApprovalGateService, AuthService, ConnectionsService, TeamService, InviteLinkService, AuditQueryService, VideoService, GroupsService, SnapshotService, SettingsService], }) export class AppModule {}