Files
tripz-llc/backend-archive/src/common/cron/cron.module.ts
T
Hamza-AyedandClaude Opus 5 fff76c949f chore: أرشفة باك إند NestJS إلى backend-archive
قرار المالك 2026-07-27: الباك إند المعتمد صار باك إند سيرو PHP، ويُنقل
إلى هذا المستودع كنسخة جديدة باسم «انطلق» على api.intaleqapp.com.

backend/ → backend-archive/ (305 ملفاً، إعادة تسمية بلا تعديل محتوى)
+ README-ARCHIVE.md يوضّح سبب الأرشفة وسبب عدم الحذف: scripts/e2e-test.mjs
  هو أدق توثيق سلوكي لدورة الرحلة كاملة، ويبقى مرجعاً عند بناء الوحدات
  الناقصة في باك إند PHP (المحفظتان · الاستحقاقات · محرّك التسعير · الوحدات).

مسارات backend/ في docs/*.md لم تُعدَّل عمداً — سجلّ تاريخي.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 04:54:35 +03:00

51 lines
1.8 KiB
TypeScript

import { Module, OnModuleDestroy, OnModuleInit } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { JobExecution } from './job-execution.entity';
import { BullModule } from './bull.module';
import { CronOrchestratorService } from './cron-orchestrator.service';
import { CronWorkerService } from './cron-worker.service';
import { CronAdminController } from './cron-admin.controller';
import { TripsModule } from '../../modules/trips/trips.module';
import { RewardsModule } from '../../modules/rewards/rewards.module';
import { TariffModule } from '../../modules/tariff/tariff.module';
import { MarketingModule } from '../../modules/marketing/marketing.module';
import { BotModule } from '../../modules/bots/bot.module';
/**
* وحدة المهام الدورية الموحّدة (O5).
*
* تسجّل كل مهمة دورية كـrepeatable job في BullMQ، وتعالجها في عملية واحدة
* مع `concurrency: 1` لمنع التشغيل المزدوج. كل تنفيذ يُسجَّل في
* `job_executions` — لا مهمة صامتة.
*
* لا تُستهلك في الـworker — الـworker يبقى مستقلاً لمفرّغ المواقع (5 ثوانٍ).
*/
@Module({
imports: [
TypeOrmModule.forFeature([JobExecution]),
BullModule,
TripsModule,
RewardsModule,
TariffModule,
MarketingModule,
BotModule,
],
controllers: [CronAdminController],
providers: [CronOrchestratorService, CronWorkerService],
exports: [CronOrchestratorService],
})
export class CronModule implements OnModuleInit, OnModuleDestroy {
constructor(
private readonly orchestrator: CronOrchestratorService,
private readonly worker: CronWorkerService,
) {}
onModuleInit(): void {
this.worker.start();
}
async onModuleDestroy(): Promise<void> {
await this.worker.stop();
}
}