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