feat: database-backed cron job queue replacing JSON file system
Replace file-based JSON cron queue with DB-backed job queue (pp_cron_jobs, pp_cron_schedules). New Domain\CronJob module: CronJobType (constants), CronJobRepository (CRUD, atomic fetch, retry/backoff), CronJobProcessor (orchestration with handler registration). Priority ordering guarantees apilo_send_order (40) runs before sync tasks (50). Includes cron.php auth protection, race condition fix in fetchNext, API response validation, and DI wiring across all entry points. 41 new tests. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -654,3 +654,49 @@ Tlumaczenia producentow (per jezyk). FK kaskadowe ON DELETE CASCADE.
|
||||
**Aktualizacja 2026-02-15 (ver. 0.273):** modul `/admin/shop_producer` korzysta z `Domain\Producer\ProducerRepository` przez `admin\Controllers\ShopProducerController`. Usunieto legacy `admin\controls\ShopProducer` i `admin\factory\ShopProducer`. `shop\Producer` dziala jako fasada do repozytorium.
|
||||
|
||||
**Aktualizacja 2026-02-17 (ver. 0.291):** frontend `/shop_producer/*` korzysta z `Domain\Producer\ProducerRepository` przez `front\Controllers\ShopProducerController`; usunięto legacy `front\controls\ShopProducer` i `shop\Producer`.
|
||||
|
||||
## pp_cron_jobs
|
||||
Kolejka zadań cron z priorytetami i retry/backoff.
|
||||
|
||||
| Kolumna | Opis |
|
||||
|---------|------|
|
||||
| id | PK auto increment |
|
||||
| job_type | Typ zadania (VARCHAR 50) — np. apilo_send_order, price_history |
|
||||
| status | ENUM: pending, processing, completed, failed, cancelled |
|
||||
| priority | TINYINT — niższy = ważniejszy (10=krytyczny, 50=wysoki, 100=normalny, 200=niski) |
|
||||
| payload | JSON z danymi zadania (TEXT NULL) |
|
||||
| result | JSON z wynikiem (TEXT NULL) |
|
||||
| attempts | Liczba prób (SMALLINT) |
|
||||
| max_attempts | Maksymalna liczba prób (SMALLINT, domyślnie 10) |
|
||||
| last_error | Ostatni błąd (VARCHAR 500) |
|
||||
| scheduled_at | Kiedy zadanie ma być uruchomione (DATETIME) |
|
||||
| started_at | Kiedy rozpoczęto przetwarzanie (DATETIME NULL) |
|
||||
| completed_at | Kiedy zakończono (DATETIME NULL) |
|
||||
| created_at | Data utworzenia (DATETIME) |
|
||||
| updated_at | Data ostatniej modyfikacji (DATETIME, ON UPDATE) |
|
||||
|
||||
**Indeksy:** idx_status_priority_scheduled (status, priority, scheduled_at), idx_job_type, idx_status
|
||||
|
||||
**Używane w:** `Domain\CronJob\CronJobRepository`, `Domain\CronJob\CronJobProcessor`
|
||||
|
||||
## pp_cron_schedules
|
||||
Harmonogram cyklicznych zadań cron.
|
||||
|
||||
| Kolumna | Opis |
|
||||
|---------|------|
|
||||
| id | PK auto increment |
|
||||
| job_type | Typ zadania (VARCHAR 50, UNIQUE) |
|
||||
| interval_seconds | Interwał uruchomienia w sekundach |
|
||||
| priority | Priorytet tworzonych zadań (TINYINT) |
|
||||
| max_attempts | Maks. prób dla tworzonych zadań (SMALLINT) |
|
||||
| payload | Opcjonalny payload JSON (TEXT NULL) |
|
||||
| enabled | Czy harmonogram aktywny (TINYINT 1) |
|
||||
| last_run_at | Ostatnie uruchomienie (DATETIME NULL) |
|
||||
| next_run_at | Następne planowane uruchomienie (DATETIME NULL) |
|
||||
| created_at | Data utworzenia (DATETIME) |
|
||||
|
||||
**Indeksy:** idx_enabled_next_run (enabled, next_run_at)
|
||||
|
||||
**Używane w:** `Domain\CronJob\CronJobRepository`, `Domain\CronJob\CronJobProcessor`
|
||||
|
||||
**Dodano w wersji 0.324.**
|
||||
|
||||
Reference in New Issue
Block a user