import { Global, Module, OnModuleInit } from '@nestjs/common'; import { CommonModule } from '../common/common.module'; import { SchedulerModule } from '../scheduler/scheduler.module'; import { SchedulerService } from '../scheduler/scheduler.service'; import { SettingsModule } from '../settings/settings.module'; import { AuditRetentionService } from './audit-retention.service'; import { AuditService } from './audit.service'; /** Daily, per operations.md's maintenance-jobs table (issue #196). */ const AUDIT_RETENTION_CADENCE_SECONDS = 24 * 60 * 60; /** * Global because the audit trail cuts across nearly every feature module * (auth, grants, members, admin, plugins, setup) — like PrismaModule, one * import list entry per consumer would only add noise. */ @Global() @Module({ imports: [CommonModule, SchedulerModule, SettingsModule], providers: [AuditService, AuditRetentionService], exports: [AuditService], }) export class AuditModule implements OnModuleInit { constructor( private readonly scheduler: SchedulerService, private readonly retention: AuditRetentionService, ) {} onModuleInit(): void { this.scheduler.register({ name: 'audit-retention', cadenceSeconds: AUDIT_RETENTION_CADENCE_SECONDS, run: async () => { await this.retention.pruneExpired(); }, }); } }