---
phase: 06-sonarqube-quality
plan: 02
type: execute
wave: 1
depends_on: []
files_modified:
- src/Modules/Settings/AllegroIntegrationController.php
- src/Modules/Settings/ShopproIntegrationsController.php
autonomous: true
---
## Goal
Zredukować liczbę `return` w metodach do maksymalnie 3 — eliminacja naruszeń SonarQube php:S1142 (57 wystąpień).
## Purpose
Metody z 4+ returnami (np. `save()` z 5 returnami) są trudne do śledzenia — nie wiadomo jaką ścieżką wróciła wartość. Wydzielenie walidacji do osobnych metod upraszcza główną ścieżkę logiki.
## Output
`AllegroIntegrationController` i `ShopproIntegrationsController` z metodami o max 3 return statements. SonarQube S1142 spada o ~15-20 violations.
## Project Context
@.paul/PROJECT.md
## Source Files
@src/Modules/Settings/AllegroIntegrationController.php
@src/Modules/Settings/ShopproIntegrationsController.php
## Required Skills (from SPECIAL-FLOWS.md)
| Skill | Priority | When to Invoke | Loaded? |
|-------|----------|----------------|---------|
| sonar-scanner | required | Po APPLY, przed UNIFY | ○ |
## Skill Invocation Checklist
- [ ] sonar-scanner uruchomiony po zakończeniu APPLY
## AC-1: AllegroIntegrationController::save() — max 3 return
```gherkin
Given save() ma 5 return statements (walidacja CSRF, URL, credentials, dates, etc.)
When refaktoryzujesz przez wydzielenie walidacji do private validateSaveInput(): ?string
Then save() ma ≤3 return statements; zachowanie identyczne
```
## AC-2: AllegroIntegrationController::saveImportSettings() — max 3 return
```gherkin
Given saveImportSettings() ma 4 return statements
When wydzielasz walidację do private validateImportSettingsInput(): ?string
Then saveImportSettings() ma ≤3 return statements
```
## AC-3: AllegroIntegrationController::oauthCallback() — max 3 return
```gherkin
Given oauthCallback() ma 4 return statements (walidacja state, code, brak credentials, etc.)
When wydzielasz walidację parametrów do private validateOAuthCallbackParams(): ?string
Then oauthCallback() ma ≤3 return statements
```
## AC-4: ShopproIntegrationsController::save() — max 3 return
```gherkin
Given save() ma 5 return statements
When wydzielasz walidację do private validateSaveInput(): ?string
Then save() ma ≤3 return statements
```
## AC-5: Brak regresji funkcjonalnej
```gherkin
Given formularze integracji Allegro i Shoppro działają przed zmianą
When refaktoryzacja jest czysto strukturalna (ta sama logika, inne rozłożenie)
Then wszystkie walidacje nadal działają, komunikaty błędów identyczne
```
Task 1: Refaktoryzacja AllegroIntegrationController — redukcja return w save(), saveImportSettings(), oauthCallback()
src/Modules/Settings/AllegroIntegrationController.php
Przeczytaj dokładnie trzy metody: save(), saveImportSettings(), oauthCallback().
**Wzorzec refaktoryzacji (stosuj w każdej metodzie):**
- Wydziel bloki walidacji (if + return z błędem) do private helper: validateXxxInput(array $input): ?string
- Helper zwraca komunikat błędu lub null (gdy wszystko OK)
- W głównej metodzie: $error = $this->validateXxxInput($data); if ($error !== null) { [flash + redirect z $error]; return; }
- Dzięki temu główna metoda ma: 1 return po walidacji + 1 return po logice = 2 return zamiast 5
**save() (linia ~115):**
- Wydziel do private validateSaveInput(array $data): ?string
- Walidacje do wydzielenia: CSRF check, URL validation, credentials check, date validations
- Zwraca pierwszy napotkany błąd jako string, lub null
**saveImportSettings() (linia ~169):**
- Wydziel do private validateImportSettingsInput(array $data): ?string
- Walidacje: CSRF, date range checks, inne
**oauthCallback() (linia ~403):**
- Wydziel do private validateOAuthCallbackParams(array $params): ?string
- Walidacje: state parameter, code parameter, CSRF state match
Zasady:
- NIE zmieniaj logiki biznesowej — tylko strukturę
- NIE zmieniaj komunikatów błędów ani flash keys
- NIE zmieniaj redirect paths
- Nowe private metody dodaj na końcu klasy, przed ostatnim }
php -l src/Modules/Settings/AllegroIntegrationController.php
grep -c "return" w obrębie save(), saveImportSettings(), oauthCallback() — każda ≤3
AC-1, AC-2, AC-3 satisfied: trzy metody mają ≤3 return statements; składnia poprawna
Task 2: Refaktoryzacja ShopproIntegrationsController — redukcja return w save() i innych metodach
src/Modules/Settings/ShopproIntegrationsController.php
Przeczytaj dokładnie: save(), test(), saveStatusMappings(), syncStatuses().
**save() (linia ~112):**
- Wydziel do private validateSaveInput(array $data): ?string
- Walidacje: CSRF, URL, credentials, data range checks
- Docelowo: ≤3 return w save()
**test() (linia ~202):**
- 3 return — sprawdź czy można zredukować do 2 przez wydzielenie warunków wejściowych
- Jeśli nie da się bez utraty czytelności, zostaw (SonarQube limit to 3 — akceptowalne)
**saveStatusMappings() (linia ~238):**
- Jeśli ma 4+ return: wydziel wstępną walidację
**syncStatuses() (linia ~301):**
- Jeśli ma 4+ return: wydziel walidację
Stosuj ten sam wzorzec co Task 1: private validateXxxInput(): ?string.
Nowe private metody dodaj na końcu klasy.
NIE zmieniaj logiki, komunikatów, redirect paths.
php -l src/Modules/Settings/ShopproIntegrationsController.php
Ręczne przeliczenie: save(), saveStatusMappings(), syncStatuses() — każda ≤3 return
AC-4 satisfied: ShopproIntegrationsController::save() i inne metody mają ≤3 return statements
## DO NOT CHANGE
- Logika biznesowa (warunki, komunikaty błędów, redirect paths, flash keys)
- Inne metody poza wymienionymi — nie ruszaj
- Pliki widoków, routes/web.php, inne kontrolery
## SCOPE LIMITS
- Refaktoryzacja strukturalna tylko w 2 plikach
- Nowe private helper methods — tylko walidacja (nie wydzielaj logiki zapisu do bazy)
- Nie wydzielaj metod do osobnych klas (to jest zakres planu 06-05)
- Nie zmieniaj visibility metod (public/private)
Przed zamknięciem planu:
- [ ] php -l src/Modules/Settings/AllegroIntegrationController.php — brak błędów
- [ ] php -l src/Modules/Settings/ShopproIntegrationsController.php — brak błędów
- [ ] Ręczne sprawdzenie: save() i oauthCallback() w AllegroIntegrationController — ≤3 return każda
- [ ] Ręczne sprawdzenie: save() w ShopproIntegrationsController — ≤3 return
- [ ] sonar-scanner uruchomiony — S1142 violations zmalały
- Oba pliki bez błędów składniowych
- save(), saveImportSettings(), oauthCallback() (Allegro) — ≤3 return każda
- save() (Shoppro) — ≤3 return
- SonarQube S1142 spada o min. 10 violations