Plany dla php:S112, S1142, S1192, S3776, S1448, S138 — gotowe do APPLY. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
8.9 KiB
8.9 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous
| phase | plan | type | wave | depends_on | files_modified | autonomous | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 06-sonarqube-quality | 03 | execute | 1 |
|
true |
Purpose
Ciągi jak 'allegro' (23x), 'shoppro' (15x), redirect paths (5-6x) i identyfikatory statusów rozsiane po całym kodzie to pułapki na literówki i utrudnienie przy refaktoryzacji. Stałe zapewniają jedno miejsce zmiany i wykrycie błędu przez IDE.
Output
Dwie klasy stałych w src/Core/Constants/, wszystkie powtórzenia zastąpione — S1192 spada z 40 do ~5.
Source Files
@src/Modules/Orders/OrdersRepository.php @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
<acceptance_criteria>
AC-1: Klasy stałych istnieją
Given brak src/Core/Constants/
When plan zostaje wykonany
Then src/Core/Constants/IntegrationSources.php zawiera ALLEGRO, SHOPPRO, APACZKA, INPOST
src/Core/Constants/RedirectPaths.php zawiera stałe dla ścieżek integracji
AC-2: Identyfikatory źródeł podmienione
Given 'allegro' (23x), 'shoppro' (15x), 'apaczka' (10x), 'inpost' (7x) rozsiane w src/
When plan zostaje wykonany
Then wszystkie wystąpienia w plikach PHP (poza SQL query strings) używają IntegrationSources::ALLEGRO etc.
AC-3: Redirect paths podmienione w kontrolerach
Given '/settings/integrations/allegro' (5x), '/settings/integrations/shoppro' (6x) w kontrolerach
When plan zostaje wykonany
Then AllegroIntegrationController i ShopproIntegrationsController używają RedirectPaths::*
AC-4: Brak regresji
Given aplikacja działa z twardymi stringami
When stałe mają identyczne wartości co podmienianie literały
Then zachowanie aplikacji identyczne — routing, source matching, redirect paths
</acceptance_criteria>
Task 1: Utwórz klasy stałych IntegrationSources i RedirectPaths src/Core/Constants/IntegrationSources.php, src/Core/Constants/RedirectPaths.php Utwórz folder src/Core/Constants/ i dwa pliki:**IntegrationSources.php** (namespace App\Core\Constants):
```php
final class IntegrationSources {
public const ALLEGRO = 'allegro';
public const SHOPPRO = 'shoppro';
public const APACZKA = 'apaczka';
public const INPOST = 'inpost';
}
```
**RedirectPaths.php** (namespace App\Core\Constants):
Przejrzyj AllegroIntegrationController i ShopproIntegrationsController i wypisz wszystkie unikalne redirect paths (np. '/settings/integrations/allegro', '/settings/integrations/allegro?tab=settings', '/settings/integrations/shoppro', etc.).
Utwórz stałe dla każdego unikalnego path:
```php
final class RedirectPaths {
public const ALLEGRO_INTEGRATION = '/settings/integrations/allegro';
public const ALLEGRO_SETTINGS_TAB = '/settings/integrations/allegro?tab=settings';
public const ALLEGRO_STATUS_MAPPING_TAB = '/settings/integrations/allegro?tab=status-mapping';
public const ALLEGRO_DELIVERY_TAB = '/settings/integrations/allegro?tab=delivery-mapping';
public const SHOPPRO_INTEGRATION = '/settings/integrations/shoppro';
public const SHOPPRO_SETTINGS_TAB = '/settings/integrations/shoppro?tab=settings';
// ... dodaj wszystkie które znajdziesz w plikach kontrolerów
}
```
Klasy final, bez konstruktora, bez metod — tylko stałe.
php -l src/Core/Constants/IntegrationSources.php
php -l src/Core/Constants/RedirectPaths.php
AC-1 satisfied: oba pliki istnieją, poprawna składnia PHP
Task 2: Podmień identyfikatory źródeł w Services i Repositories
src/Modules/Settings/AllegroOrdersSyncService.php,
src/Modules/Settings/AllegroStatusSyncService.php,
src/Modules/Settings/AllegroOrderImportService.php,
src/Modules/Settings/ShopproOrdersSyncService.php,
src/Modules/Settings/ShopproStatusSyncService.php,
src/Modules/Settings/ShopproPaymentStatusSyncService.php,
src/Modules/Orders/OrdersRepository.php
W każdym pliku:
1. Dodaj use App\Core\Constants\IntegrationSources; na górze
2. Podmień literały:
- 'allegro' (gdy to identyfikator źródła/integracji, NIE gdy nazwa tabeli SQL) → IntegrationSources::ALLEGRO
- 'shoppro' → IntegrationSources::SHOPPRO
- 'apaczka' → IntegrationSources::APACZKA
- 'inpost' → IntegrationSources::INPOST
WAŻNE — co NIE podmieniać:
- String w zapytaniach SQL (np. WHERE source = 'allegro' w OrdersRepository) — zostaw literal (SonarQube wyjątek dla SQL)
- Nazwy tabel, kolumn — zostaw
- Klucze tłumaczeń (np. 'settings.allegro.*') — zostaw
- Redirect URL paths — podmieniane w Task 3
Sprawdź kontekst każdego wystąpienia przed podmianą.
php -l na każdym zmodyfikowanym pliku
grep -n "'allegro'" src/Modules/Settings/AllegroOrdersSyncService.php — 0 wyników (lub tylko w SQL/komentarzach)
grep -n "'shoppro'" src/Modules/Settings/ShopproOrdersSyncService.php — 0 wyników (lub tylko w SQL/komentarzach)
AC-2 satisfied: identyfikatory źródeł w services/repositories używają IntegrationSources::*
Task 3: Podmień redirect paths i source literals w kontrolerach
src/Modules/Settings/AllegroIntegrationController.php,
src/Modules/Settings/ShopproIntegrationsController.php
W obu plikach:
1. Dodaj use App\Core\Constants\IntegrationSources;
2. Dodaj use App\Core\Constants\RedirectPaths;
3. Podmień redirect path strings → odpowiednie RedirectPaths::*
4. Podmień identyfikatory źródeł 'allegro', 'shoppro' → IntegrationSources::*
Szczególna uwaga:
- Header redirect strings (np. header('Location: /settings/integrations/allegro')) → RedirectPaths::ALLEGRO_INTEGRATION
- URL z tabami → odpowiednie stałe z RedirectPaths
- Nie podmieniaj kluczy tłumaczeń (settings.allegro.*)
- Nie podmieniaj niczego w widokach (resources/views/)
php -l src/Modules/Settings/AllegroIntegrationController.php
php -l src/Modules/Settings/ShopproIntegrationsController.php
grep -c "'/settings/integrations/allegro'" src/Modules/Settings/AllegroIntegrationController.php — 0
grep -c "'/settings/integrations/shoppro'" src/Modules/Settings/ShopproIntegrationsController.php — 0
AC-3, AC-4 satisfied: redirect paths podmienione; aplikacja zachowuje identyczne zachowanie
DO NOT CHANGE
- Zapytania SQL z literałami (np. 'allegro' w WHERE clauses) — SonarQube nie flaguje string w SQL
- Klucze tłumaczeń (settings.allegro., settings.integrations.)
- Pliki widoków (resources/views/)
- routes/web.php
- Nazwy tabel i kolumn w SQL
SCOPE LIMITS
- Tylko pliki wymienione w files_modified
- Nie tworzyć stałych dla string które pojawiają się tylko 1-2 razy (SonarQube S1192 flaguje 3+ powtórzenia)
- Nie przenosić stałych do modułów — zostają w Core/Constants (globalne identyfikatory)
<success_criteria>
- Oba pliki Constants istnieją i są poprawne składniowo
- Wszystkie zmodyfikowane pliki bez błędów PHP
- SonarQube S1192 spada z 40 do ≤10 </success_criteria>