قرار المالك 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>
51 lines
1.8 KiB
TypeScript
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();
|
|
}
|
|
}
|