Skip to content

Schedule & Events

Schedule Module (Cron Jobs)

The ScheduleModule allows you to run tasks on a schedule using cron expressions.

Setup

typescript
import { Module, ScheduleModule } from 'next-js-backend';

@Module({
  imports: [ScheduleModule],
  providers: [TasksService],
})
export class AppModule {}

Defining Cron Tasks

typescript
import { Injectable } from 'next-js-backend';
import { Cron } from 'next-js-backend';

@Injectable()
export class TasksService {
  @Cron('0 * * * *')  // every hour
  async handleHourlyTask() {
    Logger.log('Running hourly task...');
  }

  @Cron('0 0 * * *')  // daily at midnight
  async handleDailyCleanup() {
    await this.cleanupExpiredData();
  }
}

Cron Syntax

Uses standard cron syntax: second minute hour day month weekday

ExpressionDescription
* * * * *Every minute
0 * * * *Every hour
0 0 * * *Daily at midnight
0 0 * * 1Every Monday

EventEmitter Module (Pub/Sub)

The EventEmitterModule provides in-process event-driven communication between services.

Setup

typescript
import { Module, EventEmitterModule } from 'next-js-backend';

@Module({
  imports: [EventEmitterModule],
})
export class AppModule {}

Emitting Events

typescript
import { Injectable } from 'next-js-backend';
import { EventEmitterService } from 'next-js-backend';

@Injectable()
export class OrderService {
  constructor(private events: EventEmitterService) {}

  async createOrder(data: CreateOrderDto) {
    const order = await this.orderRepo.create(data);
    
    // Emit event — sync or async
    await this.events.emitAsync('order.created', { order });
    
    return order;
  }
}

Listening to Events

typescript
import { Injectable } from 'next-js-backend';
import { OnEvent } from 'next-js-backend';

@Injectable()
export class NotificationService {
  @OnEvent('order.created')
  async handleOrderCreated(payload: { order: Order }) {
    await this.sendEmail(payload.order.userId, 'Order confirmed!');
  }
}

Memory Safety

EventEmitterService supports removeListeners(eventName) and clearAllListeners() to prevent memory leaks in test suites or hot-reloading scenarios.

Released under the MIT License.