47 lines
1.7 KiB
PHP
47 lines
1.7 KiB
PHP
<?php
|
|
|
|
use App\Jobs\SyncBackendDataPool;
|
|
use App\Jobs\TransformDataPoolToProduction;
|
|
use Illuminate\Foundation\Inspiring;
|
|
use Illuminate\Support\Facades\Artisan;
|
|
use Illuminate\Support\Facades\Schedule;
|
|
|
|
Artisan::command('inspire', function () {
|
|
$this->comment(Inspiring::quote());
|
|
})->purpose('Display an inspiring quote');
|
|
|
|
/**
|
|
* Backend Data Pool Sync Scheduling
|
|
*
|
|
* - Incremental Sync: Läuft alle 6 Stunden (nur neue/geänderte Daten)
|
|
* - Full Sync: Läuft jeden Sonntag um 3 Uhr morgens (kompletter Rebuild)
|
|
*/
|
|
|
|
// Incremental Sync: Alle 6 Stunden
|
|
Schedule::job(new SyncBackendDataPool(fullSync: false, batchSize: 1000))
|
|
->everySixHours()
|
|
->name('sync-backend-data-pool-incremental')
|
|
->description('Sync new/updated backend transactions to data pool')
|
|
->withoutOverlapping(1800); // Max 30 Minuten Lock (1800 Sekunden)
|
|
|
|
// Full Sync: Jeden Sonntag um 3 Uhr morgens
|
|
Schedule::job(new SyncBackendDataPool(fullSync: true, batchSize: 1000))
|
|
->weeklyOn(0, '03:00') // Sonntag, 3:00 Uhr
|
|
->name('sync-backend-data-pool-full')
|
|
->description('Full sync and rebuild of backend data pool')
|
|
->withoutOverlapping(3600); // Max 1 Stunde Lock (3600 Sekunden)
|
|
|
|
/**
|
|
* Data Pool Transformation Scheduling (Stufe 2)
|
|
*
|
|
* - Läuft 30 Minuten nach jedem Incremental Sync
|
|
* - Transformiert Daten aus backend_data_pool → companies + transactions
|
|
*/
|
|
|
|
// Transformation: 30 Minuten nach jedem Sync (0:30, 6:30, 12:30, 18:30)
|
|
Schedule::job(new TransformDataPoolToProduction(batchSize: 100))
|
|
->cron('30 */6 * * *') // :30 jede 6 Stunden
|
|
->name('transform-data-pool-to-production')
|
|
->description('Transform data pool into companies and transactions')
|
|
->withoutOverlapping(1800); // Max 30 Minuten Lock
|