--- 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 Po zakończeniu utwórz `.paul/phases/06-sonarqube-quality/06-02-SUMMARY.md`