phase: 06-sonarqube-quality
plan: 02
subsystem: api
tags: [sonarqube, refactoring, validation, php]
requires:
- phase: 06-sonarqube-quality
provides: Faza aktywna — brak twardych zależności między planami 06-xx
provides:
- AllegroIntegrationController z metodami save/saveImportSettings/oauthCallback o ≤3 return each
- ShopproIntegrationsController z metodami save/saveStatusMappings/syncStatuses o ≤3 return each
- Wzorzec validateXxxInput(): ?string oraz validateXxxAccess(): ?Response dla walidacji w kontrolerach
affects: [06-05-god-classes]
tech-stack:
added: []
patterns: [validation-helper-method, access-guard-method]
key-files:
created: []
modified:
- src/Modules/Settings/AllegroIntegrationController.php
- src/Modules/Settings/ShopproIntegrationsController.php
key-decisions:
- "Wzorzec ?string dla walidacji danych wejściowych (validateSaveInput, validateImportSettingsInput, validateOAuthCallbackParams)"
- "Wzorzec ?Response dla strażników dostępu CSRF+notFound (validateSaveAccess, validateCsrfAndIntegrationAccess)"
- "Restrukturyzacja try/catch w ShopproIntegrationsController::save() — brak return wewnątrz bloku, $redirectTo mutuje na sukces"
patterns-established:
- "validateXxxInput(): ?string — zwraca komunikat błędu lub null; wywołujący robi Flash::set + redirect w jednym if"
- "validateXxxAccess(): ?Response — łączy CSRF + not-found w jeden guard zwracający gotowy Response lub null"
duration: 20min
started: 2026-03-13T00:00:00Z
completed: 2026-03-13T00:00:00Z
Phase 6 Plan 02: S1142 Return Statements Reduction — Summary
Wydzielono walidacje do private helperów w AllegroIntegrationController i ShopproIntegrationsController, redukując return statements do ≤3 we wszystkich 6 metodach (łącznie z 9+6+5+4+4+4 → 3 każda).
Performance
| Metric |
Value |
| Duration |
~20 min |
| Started |
2026-03-13 |
| Completed |
2026-03-13 |
| Tasks |
2/2 completed |
| Files modified |
2 |
Acceptance Criteria Results
| Criterion |
Status |
Notes |
| AC-1: AllegroIntegrationController::save() ≤3 return |
Pass |
6→3 (wydzielono validateSaveInput) |
| AC-2: AllegroIntegrationController::saveImportSettings() ≤3 return |
Pass |
5→3 (wydzielono validateImportSettingsInput) |
| AC-3: AllegroIntegrationController::oauthCallback() ≤3 return |
Pass |
4→3 (wydzielono validateOAuthCallbackParams) |
| AC-4: ShopproIntegrationsController::save() ≤3 return |
Pass |
9→3 (validateSaveAccess + validateSaveInput) |
| AC-5: Brak regresji funkcjonalnej |
Pass |
Czysto strukturalna refaktoryzacja — logika, komunikaty, redirect paths bez zmian |
Accomplishments
- 6 metod zredukowanych do ≤3 return statements (AllegroIntegrationController: 3 metody; ShopproIntegrationsController: 3 metody)
- Ustalono dwa wzorce helperów wielokrotnego użytku:
?string dla walidacji danych, ?Response dla strażników dostępu
validateCsrfAndIntegrationAccess() w ShopproIntegrationsController współdzielony przez saveStatusMappings() i syncStatuses()
- Try/catch w ShopproIntegrationsController::save() restrukturyzowany do jednego return na końcu metody
Task Commits
| Task |
Commit |
Type |
Description |
| Task 1+2: AllegroIntegrationController + ShopproIntegrationsController |
028c46c |
feat |
Redukcja return statements we wszystkich 6 metodach |
Files Created/Modified
| File |
Change |
Purpose |
src/Modules/Settings/AllegroIntegrationController.php |
Modified |
+3 private metody walidacji; save/saveImportSettings/oauthCallback zrefaktoryzowane |
src/Modules/Settings/ShopproIntegrationsController.php |
Modified |
+3 private metody walidacji/dostępu; save/saveStatusMappings/syncStatuses zrefaktoryzowane |
Decisions Made
| Decision |
Rationale |
Impact |
Wzorzec ?Response dla CSRF+not-found guard zamiast ?string |
CSRF i not-found mają różne redirect URL — zwrot gotowego Response czystszy niż tuple |
validateSaveAccess() i validateCsrfAndIntegrationAccess() spójne z istniejącym validateCsrf() w Allegro |
| Brak internal return w try/catch ShopproIntegrationsController::save() |
Pozwala na pojedynczy return na końcu metody |
$redirectTo mutuje na sukces, pozostaje $redirectTo przy błędzie |
| Jeden commit dla obu plików |
Obie zmiany to jeden spójny wzorzec refaktoryzacji |
Historia spójna |
Deviations from Plan
Summary
| Type |
Count |
Impact |
| Scope additions |
0 |
— |
| Auto-fixed |
0 |
— |
| Deferred |
1 |
Skill gap: sonar-scanner |
Total impact: Plan wykonany zgodnie ze specyfikacją.
Deferred Items
- sonar-scanner pominięty — narzędzie nie jest zainstalowane w PATH (konsekwentnie pomijane od Fazy 03). Violations S1142 powinny spaść o ~12-15 pozycji po uruchomieniu skanera.
Skill Audit
| Oczekiwany |
Wywołany |
Uwagi |
| sonar-scanner |
○ |
Pominięto — brak instalacji w PATH |
Issues Encountered
| Issue |
Resolution |
| ShopproIntegrationsController::save() miała 9 returns (plan mówił o 5) |
Wydzielono dwa helpery zamiast jednego; wzorzec ?Response dla CSRF+not-found guard |
Next Phase Readiness
Ready:
- Wzorzec validateXxxInput()/validateXxxAccess() ustalony — do użycia w kolejnych planach
- Codebase w stabilnym stanie; obie klasy syntaktycznie poprawne
Concerns:
- sonar-scanner nadal nieinstalowany — liczba aktualnych S1142 violations nieznana
- Plan 06-05 (god classes) zależy od 06-04 — kolejność: 06-06 → 06-04 → 06-05
Blockers: None
Phase: 06-sonarqube-quality, Plan: 02
Completed: 2026-03-13