Skip to content

Schedule & Events

Schedule — Chạy Theo Lịch (Cron)

Cài đặt

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

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

Khai báo Cron Job

typescript
@Injectable()
export class TasksService {
  @Cron('0 * * * *')  // mỗi giờ một lần
  async chayMoiGio() {
    Logger.log('Đang chạy task hàng giờ...');
  }

  @Cron('0 0 * * *')  // nửa đêm mỗi ngày
  async donDepHangNgay() {
    await this.xoaDuLieuCu();
  }
}

Cú Pháp Cron Nhanh

Biểu thứcÝ nghĩa
* * * * *Mỗi phút
0 * * * *Mỗi giờ
0 0 * * *Mỗi ngày lúc nửa đêm
0 9 * * 1-59h sáng mỗi ngày làm việc
0 0 1 * *Đầu mỗi tháng

EventEmitter — Pub/Sub Nội Bộ

Giao tiếp giữa các service trong cùng process mà không cần gọi thẳng nhau.

Cài đặt

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

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

Phát Sự Kiện

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

  async datHang(data: CreateOrderDto) {
    const order = await this.orderRepo.create(data);
    
    // Phát event — service khác tự xử lý
    await this.events.emitAsync('order.created', { order });
    
    return order;
  }
}

Lắng Nghe Sự Kiện

typescript
@Injectable()
export class NotificationService {
  @OnEvent('order.created')
  async khuiDonHang(payload: { order: Order }) {
    await this.guiEmail(payload.order.userId, 'Đặt hàng thành công!');
  }
}

Tránh memory leak

Dùng eventEmitter.removeListeners(eventName) hoặc clearAllListeners() để dọn dẹp listener — đặc biệt quan trọng trong test suite.

Released under the MIT License.