--- phase: 01-tech-debt plan: 01 subsystem: auth tags: [allegro, oauth, token-manager, refactor] requires: [] provides: - AllegroTokenManager — shared OAuth token resolver for all Allegro services - Eliminated 4-way duplication of token refresh logic affects: [allegro-integration, cron-jobs, shipments] tech-stack: added: [] patterns: [Shared service extraction — extract duplicated private methods into injected collaborator] key-files: created: - src/Modules/Settings/AllegroTokenManager.php modified: - src/Modules/Settings/AllegroOrderImportService.php - src/Modules/Settings/AllegroOrdersSyncService.php - src/Modules/Settings/AllegroStatusDiscoveryService.php - src/Modules/Shipments/AllegroShipmentService.php - routes/web.php - src/Core/Application.php - .paul/codebase/CONCERNS.md - DOCS/ARCHITECTURE.md key-decisions: - "401 retry paths also use tokenManager->resolveToken() — best-effort, consistent with structural-only scope" patterns-established: - "AllegroTokenManager wstrzykiwany wszędzie tam gdzie potrzebny jest token Allegro OAuth" duration: ~30min started: 2026-03-12T00:00:00Z completed: 2026-03-12T00:00:00Z --- # Faza 01 Plan 01: Ekstrakcja AllegroTokenManager **Skonsolidowano zduplikowaną logikę odświeżania tokenów OAuth Allegro z 4 klas do jednej: `AllegroTokenManager`.** ## Performance | Metryka | Wartość | |---------|---------| | Czas | ~30 min | | Zadania | 3/3 ukończone | | Pliki zmodyfikowane | 8 | | Pliki utworzone | 1 | ## Acceptance Criteria Results | Kryterium | Status | Uwagi | |-----------|--------|-------| | AC-1: AllegroTokenManager — resolveToken() | Pass | Klasa utworzona z logiką check-expiry + forceRefresh | | AC-2: Brak prywatnych metod tokenowych w 4 klasach | Pass | grep zwrócił 0 wyników dla resolveAccessToken/forceRefreshToken/requireOAuthData | | AC-3: Poprawne zależności konstruktorów | Pass | OrderImport/OrdersSync mają nadal repo; StatusDiscovery/Shipment zastąpiły repo+oauthClient przez tokenManager | | AC-4: Wiring zaktualizowany w obu miejscach | Pass | routes/web.php i Application.php przekazują AllegroTokenManager | | AC-5: Aplikacja uruchamia się bez błędów | Pass | php -l na wszystkich 7 plikach PHP — 0 błędów; użytkownik potwierdził działanie w przeglądarce | ## Accomplishments - Usunięto ~85 linii zduplikowanego kodu z 4 klas (3 metody × 4 klasy) - Jeden punkt naprawy w razie błędu w logice odświeżania tokenów - CONCERNS.md HIGH item #1 usunięty - ARCHITECTURE.md zaktualizowany ## Files Created/Modified | Plik | Zmiana | Cel | |------|--------|-----| | `src/Modules/Settings/AllegroTokenManager.php` | Utworzony | Shared OAuth token resolver — resolveToken() + prywatne forceRefresh() | | `src/Modules/Settings/AllegroOrderImportService.php` | Zmodyfikowany | Usunięto 3 metody tokenowe, dodano AllegroTokenManager | | `src/Modules/Settings/AllegroOrdersSyncService.php` | Zmodyfikowany | Usunięto 3 metody tokenowe, dodano AllegroTokenManager | | `src/Modules/Settings/AllegroStatusDiscoveryService.php` | Zmodyfikowany | Usunięto repo+oauthClient z konstruktora, dodano AllegroTokenManager | | `src/Modules/Shipments/AllegroShipmentService.php` | Zmodyfikowany | Usunięto repo+oauthClient z konstruktora, dodano AllegroTokenManager | | `routes/web.php` | Zmodyfikowany | Wiring: $allegroTokenManager tworzony po $allegroOAuthClient | | `src/Core/Application.php` | Zmodyfikowany | Wiring cron: $tokenManager tworzony i przekazywany do serwisów | | `.paul/codebase/CONCERNS.md` | Zmodyfikowany | Usunięto wpis o duplikacji OAuth; zaktualizowano wpis testów | | `DOCS/ARCHITECTURE.md` | Zmodyfikowany | Dodano AllegroTokenManager do listy klas i opisu | ## Decisions Made | Decyzja | Uzasadnienie | Wpływ | |---------|-------------|-------| | 401 retry zastąpiony przez `tokenManager->resolveToken()` (nie forceRefresh public) | Plan zabraniał publicznej metody forceRefresh(); zakres: tylko strukturalna ekstrakcja | Retry po 401 nie wymusza refreshu jeśli token wg daty jest ważny — marginalny edge case | ## Deviations from Plan Brak odchyleń od planu. ## Skill Audit | Oczekiwany | Wywołany | Uwagi | |------------|---------|-------| | /feature-dev | ✓ | Użytkownik potwierdził przed implementacją | | /code-review | ✓ | Przeprowadzony po uzupełnieniu luk — brak nowych bugów | | sonar-scanner | ✓ | Uruchomiony — 4 nowe issues (S112 x3, S1142 x1) zlogowane w DOCS/todo.md | ## Next Phase Readiness **Gotowe:** - AllegroTokenManager dostępny do wstrzyknięcia w każdym przyszłym serwisie Allegro - Wzorzec ekstrakcji shared service ustalony dla przyszłych faz **Obawy:** - Logika tokenów nadal bez testów (CONCERNS.md HIGH item: "Allegro OAuth Token Refresh Logic Has No Tests") **Blokery:** Brak --- *Phase: 01-tech-debt, Plan: 01* *Completed: 2026-03-12*