--- phase: 15-scontainers-edit-save-fix plan: 01 type: execute wave: 1 depends_on: [] files_modified: - autoload/admin/Controllers/ScontainersController.php - tests/Unit/admin/Controllers/ScontainersControllerTest.php autonomous: true delegation: off --- ## Goal Naprawic regresje w edycji kontenerow statycznych: zapis edytowanego rekordu nie moze tworzyc nowego wpisu. ## Purpose Administrator musi miec pewnosc, ze edycja kontenera aktualizuje istniejace ID. Obecny blad powoduje duplikaty i ryzyko niespojnych tresci. ## Output - Poprawiony flow zapisu w `ScontainersController`, ktory zawsze przekazuje poprawne `id` przy edycji - Testy jednostkowe zabezpieczajace przed powrotem regresji ## Project Context @.paul/PROJECT.md @.paul/ROADMAP.md @.paul/STATE.md ## Source Files @autoload/admin/Controllers/ScontainersController.php @admin/templates/components/form-edit.php @autoload/admin/ViewModels/Forms/FormEditViewModel.php @autoload/admin/Support/Forms/FormRequestHandler.php @tests/Unit/admin/Controllers/ScontainersControllerTest.php ## Required Skills (from SPECIAL-FLOWS.md) | Skill | Priority | When to Invoke | Loaded? | |-------|----------|----------------|---------| | /feature-dev | required | Before implementation in APPLY | ○ | | /koniec-pracy | required | After implementation/release wrap-up | ○ | **BLOCKING:** Required skills MUST be loaded before APPLY proceeds. Run each skill command or confirm already loaded. ## Skill Invocation Checklist - [ ] /feature-dev loaded (run command or confirm) - [ ] /koniec-pracy loaded (run command or confirm) ## AC-1: Edycja nie tworzy nowego kontenera ```gherkin Given istnieje kontener statyczny o ID 9 When admin wejdzie w /admin/scontainers/edit/id=9 i kliknie "Zatwierdz" Then rekord o ID 9 zostanie zaktualizowany And nie powstanie nowy rekord w pp_scontainers ``` ## AC-2: Tworzenie nowego kontenera nadal dziala ```gherkin Given admin otwiera /admin/scontainers/edit/ bez ID When wypelni dane i kliknie "Zatwierdz" Then zapis utworzy nowy rekord w pp_scontainers ``` ## AC-3: API legacy JSON pozostaje bez zmian ```gherkin Given zapis kontenera odbywa sie przez legacy payload values (JSON) When wywolywana jest sciezka legacy w ScontainersController::save() Then zachowanie insert/update pozostaje zgodne z dotychczasowa logika ``` Task 1: Utrwalic przekazywanie ID w nowym formularzu scontainers autoload/admin/Controllers/ScontainersController.php W `buildFormViewModel()` przeniesc `id` do `hiddenFields` (FormEditViewModel), tak aby pole `id` bylo renderowane niezaleznie od zakladek. W `save()` dodac defensywny fallback: jesli `data['id']` z requestu jest puste, pobrac `id` z parametru trasy (`Helpers::get('id')`) i uzyc go przy zapisie. Nie zmieniac flow legacy (`values` JSON) ani logiki repozytorium. Manual check: edycja /admin/scontainers/edit/id=9 aktualizuje rekord 9 zamiast tworzyc nowy AC-1 i AC-3 satisfied Task 2: Dodac test regresyjny dla formularza i mapowania ID tests/Unit/admin/Controllers/ScontainersControllerTest.php Rozszerzyc testy kontrolera o przypadki potwierdzajace, ze formularz edycji niesie `id` jako hidden field oraz ze flow zapisu potrafi odczytac ID rekordu dla przypadku edycji. Uzyc Reflection tam, gdzie potrzeba dostepu do prywatnych metod (zgodnie z obecnym stylem testow). ./test.ps1 tests/Unit/admin/Controllers/ScontainersControllerTest.php AC-1 covered by automated tests Task 3: Zweryfikowac brak regresji create flow autoload/admin/Controllers/ScontainersController.php, tests/Unit/admin/Controllers/ScontainersControllerTest.php Potwierdzic, ze nowy kontener (brak `id` w URL i formularzu) nadal tworzy nowy rekord. Dostosowac warunki fallbacku tak, by nie wymuszaly update przy create. Manual check: /admin/scontainers/edit/ -> Zatwierdz tworzy nowe ID AC-2 satisfied ## DO NOT CHANGE - autoload/Domain/Scontainers/ScontainersRepository.php (brak zmian logiki insert/update na poziomie repo) - admin/templates/components/form-edit.php (bez globalnych zmian w uniwersalnym komponencie) - Inne kontrolery admin poza ScontainersController ## SCOPE LIMITS - Zakres tylko dla problemu edycji kontenerow statycznych (scontainers) - Bez refaktoryzacji calego systemu FormEdit Before declaring plan complete: - [ ] ./test.ps1 tests/Unit/admin/Controllers/ScontainersControllerTest.php - [ ] Manual: edycja istniejacego kontenera nie tworzy nowego rekordu - [ ] Manual: tworzenie nowego kontenera nadal dziala - [ ] All acceptance criteria met - Blad edycji kontenerow statycznych nie wystepuje - Test regresyjny przechodzi - Brak regresji w create flow dla scontainers After completion, create `.paul/phases/15-scontainers-edit-save-fix/15-01-SUMMARY.md`