fix(02-bug-fixes): fix 3 known bugs from CONCERNS.md
Phase 02 plans 02-01, 02-02, 02-03: - fix(02-01): dead condition in AllegroShipmentService ZPL page size Both ternary branches returned 'A6'; ZPL now correctly returns 'ZPL' - fix(02-02): add last_status_checked_at cursor to AllegroStatusSyncService New migration adds orders.last_status_checked_at DATETIME NULL with composite index (source, source_updated_at). findOrdersNeedingStatusSync() filters by cursor; markOrderStatusChecked() records timestamp on success. - fix(02-03): replace AllegroOrderSyncStateRepository in ShopproOrdersSyncService New ShopproOrderSyncStateRepository (same table, correct class name). Application.php wires correct repository to correct service. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
114
.paul/phases/02-bug-fixes/02-03-SUMMARY.md
Normal file
114
.paul/phases/02-bug-fixes/02-03-SUMMARY.md
Normal file
@@ -0,0 +1,114 @@
|
||||
---
|
||||
phase: 02-bug-fixes
|
||||
plan: 03
|
||||
subsystem: settings, dependency-injection
|
||||
tags: [shoppro, repository, dependency, naming]
|
||||
|
||||
requires:
|
||||
- phase: 02-bug-fixes
|
||||
provides: Plan 02-02 (last_status_checked_at cursor)
|
||||
|
||||
provides:
|
||||
- ShopproOrderSyncStateRepository (dedykowane repozytorium stanu dla shopPRO)
|
||||
- ShopproOrdersSyncService wstrzykuje poprawną zależność
|
||||
|
||||
affects: shoppro-sync, application-wiring
|
||||
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns: [dedicated-repository-per-integration]
|
||||
|
||||
key-files:
|
||||
created:
|
||||
- src/Modules/Settings/ShopproOrderSyncStateRepository.php
|
||||
modified:
|
||||
- src/Modules/Settings/ShopproOrdersSyncService.php
|
||||
- src/Core/Application.php
|
||||
|
||||
key-decisions:
|
||||
- "Brak wspólnej klasy bazowej — ekstrakcja AbstractOrderSyncStateRepository poza zakresem planu"
|
||||
- "Ta sama tabela integration_order_sync_state — zmiana tylko nazwy klasy, nie schematu"
|
||||
|
||||
patterns-established:
|
||||
- "Każda integracja ma własne dedykowane repozytorium stanu (AllegroOrderSyncStateRepository, ShopproOrderSyncStateRepository)"
|
||||
|
||||
duration: ~20min
|
||||
started: 2026-03-13T00:00:00Z
|
||||
completed: 2026-03-13T00:00:00Z
|
||||
---
|
||||
|
||||
# Phase 02 Plan 03: ShopproOrderSyncStateRepository
|
||||
|
||||
**Wydzielono `ShopproOrderSyncStateRepository` — `ShopproOrdersSyncService` nie zależy już od klasy Allegro.**
|
||||
|
||||
## Performance
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Duration | ~20min |
|
||||
| Started | 2026-03-13 |
|
||||
| Completed | 2026-03-13 |
|
||||
| Tasks | 3/3 completed |
|
||||
| Files modified | 3 (1 new, 2 modified) |
|
||||
|
||||
## Acceptance Criteria Results
|
||||
|
||||
| Criterion | Status | Notes |
|
||||
|-----------|--------|-------|
|
||||
| AC-1: ShopproOrdersSyncService nie zależy od AllegroOrderSyncStateRepository | Pass | 0 wystąpień w pliku |
|
||||
| AC-2: ShopproOrdersSyncService używa ShopproOrderSyncStateRepository | Pass | Konstruktor linia 16 |
|
||||
| AC-3: ShopproOrderSyncStateRepository ma identyczny kontrakt publiczny | Pass | getState, markRunStarted, markRunSuccess, markRunFailed |
|
||||
| AC-4: Application.php wstrzykuje ShopproOrderSyncStateRepository | Pass | Linia 302 |
|
||||
| AC-5: Brak regresji — ta sama tabela, ta sama logika | Pass | Kod identyczny, tylko nazwa klasy |
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- Nowy `ShopproOrderSyncStateRepository` — identyczny kontrakt publiczny z `AllegroOrderSyncStateRepository`
|
||||
- Poprawna zależność w `ShopproOrdersSyncService` (zmiana jednego typehinta w konstruktorze)
|
||||
- `Application.php` wstrzykuje właściwe repozytorium do właściwego serwisu
|
||||
- `AllegroOrderSyncStateRepository` zachowany nienaruszony — nadal używany przez `AllegroOrdersSyncService`
|
||||
|
||||
## Files Created/Modified
|
||||
|
||||
| File | Change | Purpose |
|
||||
|------|--------|---------|
|
||||
| `src/Modules/Settings/ShopproOrderSyncStateRepository.php` | Created | Dedykowane repozytorium stanu dla shopPRO |
|
||||
| `src/Modules/Settings/ShopproOrdersSyncService.php` | Modified | Zamiana typehinta w konstruktorze |
|
||||
| `src/Core/Application.php` | Modified | Nowy import + zamiana wstrzyknięcia |
|
||||
|
||||
## Decisions Made
|
||||
|
||||
| Decision | Rationale | Impact |
|
||||
|----------|-----------|--------|
|
||||
| Pełna kopia kodu zamiast abstrakcji | Ekstrakcja interfejsu/klasy bazowej poza zakresem planu (granica BOUNDARIES) | Tech debt: przyszła zmiana logiki = dwa miejsca do edycji |
|
||||
| Ta sama tabela DB | `integration_id`-scoping zapewnia izolację bez nowego schematu | Zero risk migracji, brak destrukcji danych |
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
None — plan wykonany dokładnie jak napisano.
|
||||
|
||||
## Issues Encountered
|
||||
|
||||
None.
|
||||
|
||||
## Skill Audit
|
||||
|
||||
| Skill | Status | Notes |
|
||||
|-------|--------|-------|
|
||||
| /code-review | ✓ | Wywołany łącznie z planem 02-02 |
|
||||
| sonar-scanner | ✓ | Uruchomiony — brak nowych issues |
|
||||
|
||||
## Next Phase Readiness
|
||||
|
||||
**Ready:**
|
||||
- shopPRO sync używa poprawnie nazwanej zależności
|
||||
- Wzorzec: każda integracja → własne dedykowane repozytorium stanu
|
||||
|
||||
**Concerns:**
|
||||
- `ShopproOrderSyncStateRepository` i `AllegroOrderSyncStateRepository` to identyczny kod — ryzyko rozbieżności przy przyszłych poprawkach. Do zaadresowania w osobnym planie (ekstrakcja wspólnej klasy bazowej).
|
||||
|
||||
**Blockers:** None
|
||||
|
||||
---
|
||||
*Phase: 02-bug-fixes, Plan: 03*
|
||||
*Completed: 2026-03-13*
|
||||
Reference in New Issue
Block a user