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>
This commit is contained in:
125
.paul/phases/02-bug-fixes/02-04-SUMMARY.md
Normal file
125
.paul/phases/02-bug-fixes/02-04-SUMMARY.md
Normal file
@@ -0,0 +1,125 @@
|
||||
---
|
||||
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*
|
||||
Reference in New Issue
Block a user