# Plan Refaktoryzacji: shop_payment_method

Data utworzenia: 2026-02-14
Status: ZREALIZOWANY (Etapy 1-4 zakonczone: 2026-02-14)

## 1. Cel

Pelna migracja modulu `/admin/shop_payment_method/*` do obecnego standardu projektu:
- `Domain/*` dla logiki danych,
- `admin/Controllers/*` z DI dla routingu,
- widoki oparte o `components/table-list` i `components/form-edit`,
- usuniecie legacy klas/podpiecie zaleznosci.

## 2. Stan obecny (inwentaryzacja)

Aktualny modul jest legacy i opiera sie o `grid`:
- `autoload/admin/controls/class.ShopPaymentMethod.php`
- `autoload/admin/factory/class.ShopPaymentMethod.php`
- `autoload/admin/view/class.ShopPaymentMethod.php` (pusta)
- `admin/templates/shop-payment-method/view-list.php` (grid + inline edit)
- menu: `admin/templates/site/main-layout.php` -> `/admin/shop_payment_method/view_list/`

Zaleznosci wykryte poza modulem:
- `autoload/admin/controls/class.ShopTransport.php` korzysta z `admin\\factory\\ShopPaymentMethod::payments_list()`
- `autoload/front/factory/class.ShopPaymentMethod.php` ma bezposrednie zapytania do `pp_shop_payment_methods`
- `autoload/shop/class.PaymentMethod.php` ma bezposrednie zapytania do `pp_shop_payment_methods`
- `cron.php` korzysta z `front\\factory\\ShopPaymentMethod::get_apilo_payment_method_id()`

## 3. Zakres refaktoru

W zakresie:
1. Nowe repozytorium domenowe dla metod platnosci.
2. Nowy kontroler admin z DI i routingiem kanonicznym.
3. Nowe widoki listy i edycji (bez legacy `grid`).
4. Przepiecie zaleznosci (`ShopTransport`, `front\\factory\\ShopPaymentMethod`, `shop\\PaymentMethod`) na nowe API.
5. Cleanup legacy klas/plikow zwiazanych z modulem.
6. Testy jednostkowe + aktualizacja dokumentacji.

Poza zakresem (na ten etap):
1. Refaktoryzacja calego modulu `shop_transport` (zrobimy tylko przepiecie zaleznosci dot. payment methods).
2. Zmiany biznesowe w checkout poza zachowaniem obecnej logiki.

## 4. Architektura docelowa

Planowane nowe pliki:
- `autoload/Domain/PaymentMethod/PaymentMethodRepository.php`
- `autoload/admin/Controllers/ShopPaymentMethodController.php`
- `admin/templates/shop-payment-method/payment-methods-list.php`
- `admin/templates/shop-payment-method/payment-method-edit.php`

Planowane aktualizacje:
- `autoload/admin/class.Site.php` (rejestracja `ShopPaymentMethod` w DI routerze)
- `admin/templates/site/main-layout.php` (kanoniczny URL `/admin/shop_payment_method/list/`)
- `autoload/admin/controls/class.ShopTransport.php` (usuniecie zaleznosci od legacy factory)
- `autoload/front/factory/class.ShopPaymentMethod.php` (fasada delegujaca do Domain repo)
- `autoload/shop/class.PaymentMethod.php` (fasada delegujaca do Domain repo)

Planowane usuniecia:
- `autoload/admin/controls/class.ShopPaymentMethod.php`
- `autoload/admin/factory/class.ShopPaymentMethod.php`
- `autoload/admin/view/class.ShopPaymentMethod.php`
- `admin/templates/shop-payment-method/view-list.php`

## 5. Etapy realizacji (Human In The Loop)

### Etap 1: Domain + testy repozytorium
Zakres:
- utworzenie `PaymentMethodRepository` z metodami:
  - `listForAdmin(...)`
  - `find(int $id)`
  - `save(int $id, array $data)`
  - `allActive()`
  - `findActiveById(int $id)`
  - `isActive(int $id)`
  - `getApiloPaymentTypeId(int $id)`
  - `forTransport(int $transportId)`
- dodanie testu: `tests/Unit/Domain/PaymentMethod/PaymentMethodRepositoryTest.php`

Checkpoint:
- STOP i prosba o akceptacje po wdrozeniu etapu 1.

### Etap 2: Admin Controller + routing + nowe widoki
Zakres:
- nowy `ShopPaymentMethodController` (akcje: `list`, `edit`, `save`)
- migracja listy/edycji na `table-list` + `form-edit`
- podpiecie w `admin\\Site` (DI factory map)
- kompatybilnosc URL:
  - kanoniczne: `/admin/shop_payment_method/list|edit|save/`
  - aliasy legacy do decyzji po wdrozeniu (proponuje: tymczasowo wlaczyc)
- test kontrolera: `tests/Unit/admin/Controllers/ShopPaymentMethodControllerTest.php`

Checkpoint:
- STOP i prosba o akceptacje po wdrozeniu etapu 2.

### Etap 3: Przepiecie zaleznosci miedzymodulowych
Zakres:
- `ShopTransport` pobiera liste platnosci przez nowe repozytorium (bez legacy factory)
- `front\\factory\\ShopPaymentMethod` jako fasada do repozytorium domenowego
- `shop\\PaymentMethod` jako fasada do repozytorium domenowego
- zachowanie dotychczasowych podpisow metod (BC)

Checkpoint:
- STOP i prosba o akceptacje po wdrozeniu etapu 3.

### Etap 4: Cleanup + finalne testy + dokumentacja
Zakres:
- usuniecie legacy klas/plikow dla `shop_payment_method`
- uruchomienie testow:
  - najpierw targetowane testy PaymentMethod,
  - potem caly suite (`composer test` lub `./test.ps1`)
- aktualizacja dokumentacji:
  - `docs/DATABASE_STRUCTURE.md`
  - `docs/PROJECT_STRUCTURE.md`
  - `docs/REFACTORING_PLAN.md`
  - `docs/CHANGELOG.md`
  - `docs/TESTING.md`

Checkpoint:
- STOP i prosba o finalna akceptacje przed etapem release (zip/commit/push wg procedury KONIEC PRACY, jesli zlecisz).

## 6. Ryzyka i kontrola regresji

1. Ryzyko: utrata kompatybilnosci URL (`view_list`).
   Kontrola: tymczasowe aliasy lub redirect + test akcji.

2. Ryzyko: regresja checkout przy pobieraniu metod platnosci.
   Kontrola: zachowanie podpisow metod we `front\\factory\\ShopPaymentMethod` i `shop\\PaymentMethod`, testy repozytorium.

3. Ryzyko: `ShopTransport` przestanie pokazywac metody platnosci.
   Kontrola: jawne przepiecie zaleznosci i test manualny widoku edycji transportu.

## 7. Kryteria akceptacji

1. `/admin/shop_payment_method/list/` dziala na nowym kontrolerze i nowym widoku.
2. `/admin/shop_payment_method/edit/id={id}` i zapis dzialaja bez `grid`.
3. Brak zaleznosci od legacy `admin\\controls\\ShopPaymentMethod` i `admin\\factory\\ShopPaymentMethod`.
4. `ShopTransport`, frontend checkout i `cron.php` dzialaja na niezmienionych API publicznych.
5. Nowe testy przechodza, a pelny suite nie ma regresji.
