Files
orderPRO/.paul/phases/02-bug-fixes/02-04-SUMMARY.md
Jacek Pyziak 880ab5933f feat(02-bug-fixes): extract CronHandlerFactory, complete Phase 2
Phase 2 complete (4/4 plans):
- Plan 02-01: Fix dead ZPL page size condition in AllegroShipmentService
- Plan 02-02: Add time-based cursor to AllegroStatusSyncService
- Plan 02-03: Fix ShopproOrdersSyncService using wrong state repository
- Plan 02-04: Extract CronHandlerFactory as single cron composition point

Plan 02-04 specifics:
- New CronHandlerFactory builds complete cron object graph
- Application::maybeRunCronOnWeb() reduced from 80+ to ~20 lines
- bin/cron.php reduced from 123 to 26 lines
- Fixed 2 bugs: AllegroOAuthClient→AllegroTokenManager,
  AllegroOrderSyncStateRepository→ShopproOrderSyncStateRepository

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-13 00:43:04 +01:00

126 lines
4.9 KiB
Markdown

---
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*