import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { AuditModule } from '../audit/audit.module'; import { JobPermissionsModule } from '../auth/permissions/permission-resolver.module'; import { AutopilotModule } from '../autopilot/autopilot.module'; import { BackupModule } from '../backup/backup.module'; import { IdempotencyCleanupService } from '../common/idempotency/idempotency-cleanup.service'; import { DomainEventsModule } from '../domain-events/domain-events.module'; import { NotificationsModule } from '../notifications/notifications.module'; import { PrismaModule } from '../prisma/prisma.module'; import { SeasonModule } from '../season/season.module'; import { SystemModule } from '../system/system.module'; import { TasksModule } from '../tasks/tasks.module'; import { AppBackupJob } from './app-backup.job'; import { CleanupJob } from './cleanup.job'; import { DailyEvaluationJob } from './daily-evaluation.job'; import { Job } from './job'; import { JobRegistry, JOBS } from './job-registry'; import { RekeyJob } from './rekey.job'; import { TimeEventsStep } from './steps/time-events.step'; import { TaskTemplatesJob } from './task-templates.job'; const JOB_CLASSES = [ DailyEvaluationJob, TaskTemplatesJob, CleanupJob, AppBackupJob, RekeyJob, ]; /** * Root module of dist/cli.js, started with * NestFactory.createApplicationContext for exactly one run: the modules * the jobs need, without the HTTP layer (no guards, interceptors, throttler * or routes - controllers of the imported modules are never served) and * without the worker loops. No in-process scheduler: no timer may run * in a job pod. */ @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true }), PrismaModule, AuditModule, NotificationsModule, DomainEventsModule, TasksModule, JobPermissionsModule, BackupModule, SystemModule, SeasonModule, AutopilotModule, ], providers: [ ...JOB_CLASSES, { provide: JOBS, useFactory: (...jobs: Job[]): Job[] => jobs, inject: JOB_CLASSES, }, TimeEventsStep, JobRegistry, IdempotencyCleanupService, ], }) export class JobsModule {}