Files
orderPRO/.paul/phases/02-bug-fixes/02-03-SUMMARY.md
Jacek Pyziak 87203c4321 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>
2026-03-13 00:26:07 +01:00

115 lines
4.0 KiB
Markdown

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