Files
orderPRO/.paul/phases/05-tech-debt-3/05-01-PLAN.md

7.4 KiB
Raw Blame History

phase, plan, type, wave, depends_on, files_modified, autonomous
phase plan type wave depends_on files_modified autonomous
05-tech-debt-3 01 execute 1
src/Modules/Orders/OrdersController.php
src/Modules/Shipments/ShipmentController.php
true
## Goal Zastąpić bezpośrednie zapisy do `$_SESSION['order_flash_*']` i `$_SESSION['shipment_flash_*']` wywołaniami `Flash::set()` / `Flash::get()` w `OrdersController` i `ShipmentController`.

Purpose

Ujednolicenie wzorca flash messages w całej aplikacji — obecnie OrdersController i ShipmentController omijają warstwę abstrakcji Flash, co tworzy dwa niekompatybilne mechanizmy. Pozostałe kontrolery (Settings) używają już Flash::set()/Flash::get().

Output

Dwa zmodyfikowane pliki PHP z usuniętymi bezpośrednimi odwołaniami do $_SESSION['*_flash_*']. Concern [MEDIUM] Direct $_SESSION Writes zamknięty.

## Project Context @.paul/PROJECT.md @.paul/ROADMAP.md @.paul/STATE.md

Source Files

@src/Core/Support/Flash.php @src/Modules/Orders/OrdersController.php @src/Modules/Shipments/ShipmentController.php

## Required Skills (from SPECIAL-FLOWS.md)
Skill Priority When to Invoke Loaded?
sonar-scanner required Po APPLY, przed UNIFY
/code-review optional Po implementacji, przed UNIFY

BLOCKING: sonar-scanner musi być uruchomiony przed UNIFY.

Skill Invocation Checklist

  • sonar-scanner uruchomiony (CLI w katalogu projektu)
  • /code-review opcjonalnie przed UNIFY

<acceptance_criteria>

AC-1: OrdersController używa Flash

Given OrdersController.php nie zawiera żadnych odwołań do $_SESSION['order_flash_*']
When przeglądamy kod OrdersController
Then wszystkie odczyty flash używają Flash::get('order.success') i Flash::get('order.error')
  And wszystkie zapisy flash używają Flash::set('order.success', ...) i Flash::set('order.error', ...)
  And Flash jest zaimportowany przez use App\Core\Support\Flash

AC-2: ShipmentController używa Flash

Given ShipmentController.php nie zawiera żadnych odwołań do $_SESSION['shipment_flash_*']
When przeglądamy kod ShipmentController
Then wszystkie odczyty flash używają Flash::get('shipment.success') i Flash::get('shipment.error')
  And wszystkie zapisy flash używają Flash::set('shipment.success', ...) i Flash::set('shipment.error', ...)
  And Flash jest zaimportowany przez use App\Core\Support\Flash

AC-3: Brak regresji — widoki nadal otrzymują flashSuccess/flashError

Given widok orders/show.php oczekuje zmiennych $flashSuccess i $flashError
  And widok shipments/prepare.php oczekuje zmiennych $flashSuccess i $flashError
When kontrolery renderują widoki po migracji
Then zmienne flashSuccess i flashError nadal są przekazywane do template->render()
  And ich wartości pochodzą z Flash::get() zamiast z $_SESSION bezpośrednio

</acceptance_criteria>

Task 1: Migracja flash messages w OrdersController src/Modules/Orders/OrdersController.php 1. Dodaj import `use App\Core\Support\Flash;` do sekcji use (po pozostałych use w pliku).
2. W metodzie `show()` (linie ~163165) zastąp:
   ```php
   $flashSuccess = (string) ($_SESSION['order_flash_success'] ?? '');
   $flashError = (string) ($_SESSION['order_flash_error'] ?? '');
   unset($_SESSION['order_flash_success'], $_SESSION['order_flash_error']);
   ```
   przez:
   ```php
   $flashSuccess = (string) Flash::get('order.success', '');
   $flashError = (string) Flash::get('order.error', '');
   ```
   (Flash::get() usuwa klucz automatycznie — unset zbędny)

3. W metodzie `updateStatus()` zastąp wszystkie zapisy `$_SESSION['order_flash_*']`:
   - `$_SESSION['order_flash_error'] = ...` → `Flash::set('order.error', ...)`
   - `$_SESSION['order_flash_success'] = ...` → `Flash::set('order.success', ...)`

Dotyczy 4 miejsc (linie ~204, ~210, ~219, ~221).
Nie zmieniaj nazw zmiennych przekazywanych do template->render() ('flashSuccess', 'flashError').
grep -n "_SESSION\['order_flash" src/Modules/Orders/OrdersController.php — zwraca 0 wyników AC-1 satisfied: brak bezpośrednich odwołań do $_SESSION['order_flash_*'] Task 2: Migracja flash messages w ShipmentController src/Modules/Shipments/ShipmentController.php 1. Dodaj import `use App\Core\Support\Flash;` do sekcji use (po pozostałych use w pliku).
2. W metodzie `prepare()` (linie ~9395) zastąp:
   ```php
   $flashSuccess = (string) ($_SESSION['shipment_flash_success'] ?? '');
   $flashError = (string) ($_SESSION['shipment_flash_error'] ?? '');
   unset($_SESSION['shipment_flash_success'], $_SESSION['shipment_flash_error']);
   ```
   przez:
   ```php
   $flashSuccess = (string) Flash::get('shipment.success', '');
   $flashError = (string) Flash::get('shipment.error', '');
   ```

3. W metodach `create()` i `label()` zastąp wszystkie zapisy `$_SESSION['shipment_flash_*']`:
   - `$_SESSION['shipment_flash_error'] = ...` → `Flash::set('shipment.error', ...)`
   - `$_SESSION['shipment_flash_success'] = ...` → `Flash::set('shipment.success', ...)`

Dotyczy 6 miejsc (linie ~155, ~209, ~220, ~272, ~318, ~328).
Nie zmieniaj nazw zmiennych przekazywanych do template->render() ('flashSuccess', 'flashError').
grep -n "_SESSION\['shipment_flash" src/Modules/Shipments/ShipmentController.php — zwraca 0 wyników AC-2 i AC-3 satisfied: brak bezpośrednich odwołań do $_SESSION['shipment_flash_*'], zmienne flashSuccess/flashError nadal przekazywane do widoku

DO NOT CHANGE

  • src/Core/Support/Flash.php (klasa Flash — działa poprawnie, nie modyfikować)
  • resources/views/orders/show.php (widok — oczekuje 'flashSuccess'/'flashError', nie zmieniać nazw kluczy w render())
  • resources/views/shipments/prepare.php (widok — analogicznie)
  • Żadne inne pliki poza dwoma kontrolerami

SCOPE LIMITS

  • Nie refaktoryzuj innych fragmentów kontrolerów — tylko flash messages
  • Nie zmieniaj nazw kluczy flash przekazywanych do widoków ('flashSuccess', 'flashError')
  • Nie dotykaj metody checkStatus() w ShipmentController — nie używa flash
  • Nie dodawaj nowych zależności
Before declaring plan complete: - [ ] grep -rn "_SESSION\['order_flash" src/ — zero wyników - [ ] grep -rn "_SESSION\['shipment_flash" src/ — zero wyników - [ ] grep -n "use App\\Core\\Support\\Flash" src/Modules/Orders/OrdersController.php — jeden wynik - [ ] grep -n "use App\\Core\\Support\\Flash" src/Modules/Shipments/ShipmentController.php — jeden wynik - [ ] PHP lint: php -l src/Modules/Orders/OrdersController.php — No syntax errors - [ ] PHP lint: php -l src/Modules/Shipments/ShipmentController.php — No syntax errors

<success_criteria>

  • Oba kontrolery używają Flash::set()/Flash::get() zamiast bezpośrednich $_SESSION writes
  • Zero odwołań do $SESSION['order_flash'] i $SESSION['shipment_flash'] w całej bazie kodu
  • PHP lint przechodzi bez błędów
  • Widoki nadal otrzymują flashSuccess i flashError (brak regresji w renderowaniu) </success_criteria>
After completion, create `.paul/phases/05-tech-debt-3/05-01-SUMMARY.md`