--- phase: 02-bug-fixes plan: 04 subsystem: cron tags: [cron, factory, refactor, dependency-injection] requires: - phase: 02-bug-fixes provides: Application.php z AllegroTokenManager (plan 02-03), ShopproPaymentStatusSyncService (plan 02-01) provides: - CronHandlerFactory — jedyne miejsce budujące graf obiektów crona - Application::maybeRunCronOnWeb() skrócona z 80+ do ~20 linii logiki - bin/cron.php skrócone ze 123 do 26 linii - Naprawione dwa błędy w bin/cron.php (AllegroOAuthClient→AllegroTokenManager, AllegroOrderSyncStateRepository→ShopproOrderSyncStateRepository) affects: [cron, bin/cron, Application, integracje] tech-stack: added: [] patterns: [Factory pattern dla kompozycji obiektów, Single source of truth dla okablowania crona] key-files: created: [src/Modules/Cron/CronHandlerFactory.php] modified: [src/Core/Application.php, bin/cron.php] key-decisions: - "Factory przyjmuje tylko PDO i integrationSecret — bez DI container (odrębny temat)" - "ShopproIntegrationsRepository tworzony raz w fabryce i współdzielony między 3 serwisami" patterns-established: - "CronHandlerFactory::build(CronRepository, Logger): CronRunner — standardowy kontrakt fabryki" duration: ~20min started: 2026-03-13T00:00:00Z completed: 2026-03-13T00:00:00Z --- # Phase 2 Plan 04: CronHandlerFactory Summary **Wydzielono CronHandlerFactory jako jedyne miejsce budujące graf obiektów crona; naprawiono 2 błędy zależności w bin/cron.php (AllegroOAuthClient→AllegroTokenManager, AllegroOrderSyncStateRepository→ShopproOrderSyncStateRepository).** ## Performance | Metric | Value | |--------|-------| | Duration | ~20 min | | Started | 2026-03-13 | | Completed | 2026-03-13 | | Tasks | 3 completed | | Files modified | 3 (1 nowy, 2 zmodyfikowane) | ## Acceptance Criteria Results | Criterion | Status | Notes | |-----------|--------|-------| | AC-1: Jeden punkt definicji handlerów crona | Pass | CronHandlerFactory jedynym miejscem `new AllegroIntegrationRepository` / `new ShopproIntegrationsRepository` w kontekście crona | | AC-2: Web cron działa identycznie jak przed zmianą | Pass | `maybeRunCronOnWeb()` wywołuje fabrykę z tymi samymi handlerami | | AC-3: bin/cron.php używa poprawnych zależności | Pass | `AllegroTokenManager` zamiast `AllegroOAuthClient`, `ShopproOrderSyncStateRepository` zamiast `AllegroOrderSyncStateRepository` | ## Accomplishments - Nowy `CronHandlerFactory` (97 linii) — kompletny graf obiektów crona w jednym miejscu - `Application.php`: usunięto 20+ importów cron; `maybeRunCronOnWeb()` skrócona z 80+ do ~20 linii (3 linie fabryki zamiast ~80 linii ręcznej konstrukcji) - `bin/cron.php`: skrócone ze 123 do 26 linii; naprawiono 2 istniejące błędy w zależnościach ## Files Created/Modified | File | Change | Purpose | |------|--------|---------| | `src/Modules/Cron/CronHandlerFactory.php` | Created | Jedyne miejsce budujące graf obiektów crona | | `src/Core/Application.php` | Modified | Zastąpiono 80+ linii ręcznej konstrukcji wywołaniem fabryki; usunięto 20+ zbędnych importów | | `bin/cron.php` | Modified | Zastąpiono 100+ linii wywołaniem fabryki; naprawiono 2 błędy zależności | ## Decisions Made | Decision | Rationale | Impact | |----------|-----------|--------| | Factory przyjmuje `PDO` + `integrationSecret`, nie `Application` | Unikanie circular dependency i nadmiernego coupling | Fabryka przenośna, testowalność wyższa | | `ShopproIntegrationsRepository` tworzony raz i współdzielony | Application.php tworzył go 3x niepotrzebnie | Spójność z intencją kodu, mniejsze zużycie zasobów | | Nie wprowadzamy DI container | Odrębny temat (CONCERNS.md [MEDIUM]) | Brak scope creep | ## Deviations from Plan ### Summary | Type | Count | Impact | |------|-------|--------| | Auto-fixed | 0 | — | | Scope additions | 0 | — | | Deferred | 0 | — | **Total impact:** Brak odchyleń — plan wykonany dokładnie jak napisano. ## Skills | Skill | Status | Notes | |-------|--------|-------| | sonar-scanner | ✓ | ANALYSIS SUCCESSFUL — 0 nowych issues w zmienionych plikach | | /code-review | ○ | `gh` CLI niedostępne w środowisku; brak PR (praca na main) | ## Issues Encountered | Issue | Resolution | |-------|------------| | `gh` CLI niedostępne — code-review niemożliwy | Pominięto; sonar-scanner jako główna weryfikacja jakości | ## SonarQube — post plan 02-04 (skan 2026-03-13) Brak nowych issues w `CronHandlerFactory.php` (nowy plik). Pre-existing issues w `Application.php` (S1142, S1448, S4833, S2003) — niezmienione przez nasze modyfikacje. ## Next Phase Readiness **Ready:** - Graf obiektów crona w jednym miejscu — gotowe do dalszej pracy z handlerami - bin/cron.php i Application.php zsynchronizowane — brak ryzyka rozjechania zależności **Concerns:** - `Application` ma nadal 22 metody (S1448 pre-existing) — kandydat do podziału w przyszłości **Blockers:** Brak --- *Phase: 02-bug-fixes, Plan: 04* *Completed: 2026-03-13*