- Automation rules propose suggestions instead of creating tasks; notify per rule config; corrected varroa measurements refresh or resolve their suggestion - Inspection values can be taken over into the colony card (occupiedFrames 0-40, strength deprecated); warning counts use the same visibility rule as the notification list - Biotech chains: swarm check after queen cells, queen acceptance check, split schedules (raise own, queen cell, queen) - Season autopilot core with A1 inspection due, A2 varroa measurement, A3 recheck after treatment; colony sync and daily step - Frontend: suggestions page with groups, bulk accept, undo, paging, focus management and permission gating - Frontend: varroa traffic light from seasonal bands, sample size, one range request for the colony chart - Notifications: mark-read answers 404 for rows the user may no longer see Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
66 lines
2.2 KiB
TypeScript
66 lines
2.2 KiB
TypeScript
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 {}
|