80 lines
4.0 KiB
TypeScript
80 lines
4.0 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
import { ScheduleModule } from '@nestjs/schedule';
|
|
import { HttpModule } from '@nestjs/axios';
|
|
import { DatabaseModule } from '@it0/database';
|
|
import { RedisEventBus } from '@it0/events';
|
|
import { TaskController } from './interfaces/rest/controllers/task.controller';
|
|
import { ApprovalController } from './interfaces/rest/controllers/approval.controller';
|
|
import { RunbookController } from './interfaces/rest/controllers/runbook.controller';
|
|
import { StandingOrderController } from './interfaces/rest/controllers/standing-order.controller';
|
|
import { TaskRepository } from './infrastructure/repositories/task.repository';
|
|
import { ApprovalRepository } from './infrastructure/repositories/approval.repository';
|
|
import { RunbookRepository } from './infrastructure/repositories/runbook.repository';
|
|
import { StandingOrderRepository } from './infrastructure/repositories/standing-order.repository';
|
|
import { StandingOrderExecutionRepository } from './infrastructure/repositories/standing-order-execution.repository';
|
|
import { ApprovalWorkflowService } from './domain/services/approval-workflow.service';
|
|
import { StandingOrderExecutorService } from './domain/services/standing-order-executor.service';
|
|
import { SmartEscalationService } from './domain/services/smart-escalation.service';
|
|
import { AgentClientService } from './infrastructure/clients/agent-client.service';
|
|
import { CommClientService } from './infrastructure/clients/comm-client.service';
|
|
import { CreateInspectionTaskUseCase } from './application/use-cases/create-inspection-task.use-case';
|
|
import { CreateDeploymentTaskUseCase } from './application/use-cases/create-deployment-task.use-case';
|
|
import { ApproveTaskUseCase } from './application/use-cases/approve-task.use-case';
|
|
import { ScheduleRecurringTaskUseCase } from './application/use-cases/schedule-recurring-task.use-case';
|
|
import { ExecuteRunbookUseCase } from './application/use-cases/execute-runbook.use-case';
|
|
import { CreateStandingOrderUseCase } from './application/use-cases/create-standing-order.use-case';
|
|
import { UpdateStandingOrderUseCase } from './application/use-cases/update-standing-order.use-case';
|
|
import { ExecuteStandingOrderUseCase } from './application/use-cases/execute-standing-order.use-case';
|
|
import { OpsTask } from './domain/entities/ops-task.entity';
|
|
import { ApprovalRequest } from './domain/entities/approval-request.entity';
|
|
import { Runbook } from './domain/entities/runbook.entity';
|
|
import { StandingOrder } from './domain/entities/standing-order.entity';
|
|
import { StandingOrderExecution } from './domain/entities/standing-order-execution.entity';
|
|
|
|
@Module({
|
|
imports: [
|
|
ConfigModule.forRoot({ isGlobal: true }),
|
|
DatabaseModule.forRoot(),
|
|
TypeOrmModule.forFeature([OpsTask, ApprovalRequest, Runbook, StandingOrder, StandingOrderExecution]),
|
|
ScheduleModule.forRoot(),
|
|
HttpModule.register({ timeout: 30000, maxRedirects: 3 }),
|
|
],
|
|
controllers: [TaskController, ApprovalController, RunbookController, StandingOrderController],
|
|
providers: [
|
|
// Repositories
|
|
TaskRepository,
|
|
ApprovalRepository,
|
|
RunbookRepository,
|
|
StandingOrderRepository,
|
|
StandingOrderExecutionRepository,
|
|
// Domain Services
|
|
ApprovalWorkflowService,
|
|
StandingOrderExecutorService,
|
|
SmartEscalationService,
|
|
// Infrastructure Clients
|
|
AgentClientService,
|
|
CommClientService,
|
|
// Use Cases
|
|
CreateInspectionTaskUseCase,
|
|
CreateDeploymentTaskUseCase,
|
|
ApproveTaskUseCase,
|
|
ScheduleRecurringTaskUseCase,
|
|
ExecuteRunbookUseCase,
|
|
CreateStandingOrderUseCase,
|
|
UpdateStandingOrderUseCase,
|
|
ExecuteStandingOrderUseCase,
|
|
// Event Bus
|
|
{
|
|
provide: RedisEventBus,
|
|
useFactory: (configService: ConfigService) => {
|
|
const redisUrl = configService.get<string>('REDIS_URL', 'redis://localhost:6379');
|
|
return new RedisEventBus(redisUrl);
|
|
},
|
|
inject: [ConfigService],
|
|
},
|
|
],
|
|
})
|
|
export class OpsModule {}
|