update
This commit is contained in:
151
.paul/phases/08-products-page-size/08-01-PLAN.md
Normal file
151
.paul/phases/08-products-page-size/08-01-PLAN.md
Normal file
@@ -0,0 +1,151 @@
|
||||
---
|
||||
phase: 08-products-page-size
|
||||
plan: 01
|
||||
type: execute
|
||||
wave: 1
|
||||
depends_on: []
|
||||
files_modified:
|
||||
- templates/products/main_view.php
|
||||
- autoload/controls/class.Products.php
|
||||
autonomous: true
|
||||
delegation: off
|
||||
---
|
||||
|
||||
<objective>
|
||||
## Goal
|
||||
Dodac w tabeli produktow na `/products` wybor liczby produktow wyswietlanych na stronie.
|
||||
|
||||
## Purpose
|
||||
Uzytkownik ma sam decydowac, czy chce przegladac mniej rekordow szybciej, czy wiecej rekordow naraz bez przechodzenia po wielu stronach.
|
||||
|
||||
## Output
|
||||
Zmodyfikowana konfiguracja DataTables dla `#products` oraz bezpieczna obsluga parametru `length` w endpointzie `/products/get_products/`.
|
||||
</objective>
|
||||
|
||||
<context>
|
||||
<clarifications>
|
||||
- **Doprecyzowanie** - Brak pytan doprecyzowujacych; wymaganie jest jednoznaczne po analizie kodu.
|
||||
-> Odpowiedz: opcja wyboru liczby produktow na strone ma dotyczyc glownej tabeli produktow na `/products`.
|
||||
</clarifications>
|
||||
|
||||
## Project Context
|
||||
@.paul/STATE.md
|
||||
@.paul/phases/07-xml-feed-cron-refresh/07-01-SUMMARY.md
|
||||
|
||||
## Source Files
|
||||
@templates/products/main_view.php
|
||||
@autoload/controls/class.Products.php
|
||||
@autoload/factory/class.Products.php
|
||||
|
||||
## Notes
|
||||
- `.paul/PROJECT.md` i `.paul/ROADMAP.md` nie istnieja w tym projekcie.
|
||||
- `.paul/codebase/ARCHITECTURE` i `.paul/codebase/DB_SCHEMA` sa puste/szkieletowe.
|
||||
- `.paul/SPECIAL-FLOWS.md` nie istnieje, wiec sekcja specjalnych skills jest pominieta.
|
||||
</context>
|
||||
|
||||
<acceptance_criteria>
|
||||
|
||||
## AC-1: Widoczny wybor liczby rekordow
|
||||
```gherkin
|
||||
Given uzytkownik jest na stronie /products
|
||||
When tabela produktow zostanie zainicjalizowana
|
||||
Then widzi kontrolke wyboru liczby produktow na strone
|
||||
And domyslna wartosc pozostaje 25
|
||||
```
|
||||
|
||||
## AC-2: Wybor zmienia limit tabeli
|
||||
```gherkin
|
||||
Given uzytkownik wybral klienta i tabela ma dane
|
||||
When zmieni liczbe produktow na strone na jedna z dozwolonych wartosci
|
||||
Then DataTables przeladowuje dane z nowa wartoscia length
|
||||
And endpoint /products/get_products/ zwraca maksymalnie tyle rekordow, ile wybrano
|
||||
```
|
||||
|
||||
## AC-3: Przegladarka pamieta wybor limitu
|
||||
```gherkin
|
||||
Given uzytkownik zmienil liczbe produktow na strone
|
||||
When odswiezy strone /products albo wroci do niej pozniej w tej samej przegladarce
|
||||
Then tabela startuje z ostatnio wybrana liczba produktow na strone
|
||||
```
|
||||
|
||||
## AC-4: Limit jest bezpiecznie walidowany po stronie serwera
|
||||
```gherkin
|
||||
Given request do /products/get_products/ zawiera length spoza dozwolonego zakresu
|
||||
When kontroler obsluguje request
|
||||
Then uzywa bezpiecznej wartosci domyslnej albo maksymalnej
|
||||
And nie przekazuje niekontrolowanego limitu do zapytania SQL
|
||||
```
|
||||
|
||||
</acceptance_criteria>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: Wlacz wybor liczby produktow w DataTables</name>
|
||||
<files>templates/products/main_view.php</files>
|
||||
<action>
|
||||
Zmien konfiguracje `new DataTable( '#products', ... )`:
|
||||
- ustaw `lengthChange: true`,
|
||||
- zostaw domyslne `pageLength: 25`, jesli przegladarka nie ma zapisanego wyboru,
|
||||
- dodaj `lengthMenu` z konserwatywnymi opcjami, np. 10, 25, 50, 100,
|
||||
- dodaj polski tekst `language.lengthMenu`, np. "Pokaz _MENU_ produktow",
|
||||
- zapisz wybrana wartosc w `localStorage` i uzyj jej przy ponownej inicjalizacji tabeli,
|
||||
- nie zmieniaj definicji kolumn, filtracji, sortowania ani logiki reloadow.
|
||||
</action>
|
||||
<verify>php -l templates/products/main_view.php</verify>
|
||||
<done>AC-1, AC-2 i AC-3 sa spelnione: kontrolka jest widoczna, domyslna wartosc to 25, DataTables wysyla wybrane `length`, a przegladarka pamieta wybor.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 2: Ogranicz i ujednolic length w kontrolerze produktow</name>
|
||||
<files>autoload/controls/class.Products.php</files>
|
||||
<action>
|
||||
W `Products::get_products()` dodaj lokalna walidacje parametru `length`:
|
||||
- rzutuj wartosc z `\S::get( 'length' )` na int,
|
||||
- dopusc tylko ustalone opcje z UI: 10, 25, 50, 100,
|
||||
- dla braku lub niedozwolonej wartosci ustaw 25,
|
||||
- zachowaj obecna obsluge `start`, sortowania, filtrow i wywolania `\factory\Products::get_products()`.
|
||||
Unikaj zmiany zapytan SQL w `factory`, bo `get_products()` juz rzutuje `limit` i `start` na liczby.
|
||||
</action>
|
||||
<verify>php -l autoload/controls/class.Products.php</verify>
|
||||
<done>AC-2 i AC-4 sa spelnione: endpoint honoruje dozwolone limity i ignoruje wartosci spoza listy.</done>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<boundaries>
|
||||
|
||||
## DO NOT CHANGE
|
||||
- Nie zmieniac schematu bazy ani migracji.
|
||||
- Nie zmieniac logiki filtrow klient/kampania/grupa/CL1/CL4.
|
||||
- Nie zmieniac kolumn, bulk delete, edycji produktu, historii produktu ani integracji AI.
|
||||
- Nie zmieniac `autoload/factory/class.Products.php`, chyba ze podczas APPLY wyjdzie koniecznosc naprawy zwiazana bezposrednio z limitem.
|
||||
|
||||
## SCOPE LIMITS
|
||||
- Zakres obejmuje tylko glowna tabele `#products` na `/products`.
|
||||
- Nie dodawac globalnego ustawienia uzytkownika w bazie.
|
||||
- Nie zmieniac paginacji tabeli historii produktu.
|
||||
|
||||
</boundaries>
|
||||
|
||||
<verification>
|
||||
Before declaring plan complete:
|
||||
- [ ] `php -l templates/products/main_view.php`
|
||||
- [ ] `php -l autoload/controls/class.Products.php`
|
||||
- [ ] Manualnie na `/products`: kontrolka limitu jest widoczna i domyslnie ustawiona na 25.
|
||||
- [ ] Manualnie na `/products`: wybor 10/25/50/100 przeladowuje tabele i zachowuje filtry.
|
||||
- [ ] Manualnie na `/products`: po odswiezeniu strony tabela zachowuje ostatnio wybrany limit.
|
||||
- [ ] All acceptance criteria met
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- Tabela produktow pozwala wybrac liczbe produktow na strone.
|
||||
- Domyslnie pozostaje 25 produktow na strone.
|
||||
- Przegladarka pamieta ostatnio wybrany limit tabeli produktow.
|
||||
- Backend akceptuje tylko dozwolone limity.
|
||||
- Brak nowych bledow PHP lint w modyfikowanych plikach.
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
After completion, create `.paul/phases/08-products-page-size/08-01-SUMMARY.md`
|
||||
</output>
|
||||
37
.paul/phases/08-products-page-size/08-01-SUMMARY.md
Normal file
37
.paul/phases/08-products-page-size/08-01-SUMMARY.md
Normal file
@@ -0,0 +1,37 @@
|
||||
---
|
||||
phase: 08-products-page-size
|
||||
plan: 01
|
||||
completed: 2026-05-01T09:27:11.436Z
|
||||
---
|
||||
|
||||
# Phase 08-01 Summary
|
||||
|
||||
****
|
||||
|
||||
## Acceptance Criteria Results
|
||||
|
||||
| Criterion | Status |
|
||||
|-----------|--------|
|
||||
| Task 1: Wlacz wybor liczby produktow w DataTables | Pass — Dodano wybor 10/25/50/100, domyslnie 25 z localStorage, zapis przez length.dt. Finalny uklad zrealizowany oficjalnym layout DataTables 2: info po lewej, paging + pageLength po prawej. Style w layout/style.scss i skompilowane do layout/style.css. Uzytkownik potwierdzil UAT: 'Teraz jest ok'. |
|
||||
| Task 2: Ogranicz i ujednolic length w kontrolerze produktow | Pass — Kontroler /products/get_products/ akceptuje tylko 10/25/50/100, fallback 25. php -l autoload/controls/class.Products.php OK. |
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- Task 1: Wlacz wybor liczby produktow w DataTables: Dodano wybor 10/25/50/100, domyslnie 25 z localStorage, zapis przez length.dt. Finalny uklad zrealizowany oficjalnym layout DataTables 2: info po lewej, paging + pageLength po prawej. Style w layout/style.scss i skompilowane do layout/style.css. Uzytkownik potwierdzil UAT: 'Teraz jest ok'.
|
||||
- Task 2: Ogranicz i ujednolic length w kontrolerze produktow: Kontroler /products/get_products/ akceptuje tylko 10/25/50/100, fallback 25. php -l autoload/controls/class.Products.php OK.
|
||||
|
||||
## Files Modified
|
||||
|
||||
- `templates/products/main_view.php`
|
||||
- `autoload/controls/class.Products.php`
|
||||
- `layout/style.scss`
|
||||
- `layout/style.css`
|
||||
- `layout/style.css.map`
|
||||
|
||||
## Deviations
|
||||
|
||||
Plan poczatkowo zakladal tylko templates/products/main_view.php i autoload/controls/class.Products.php. W trakcie UAT dodano layout/style.scss oraz skompilowane layout/style.css i layout/style.css.map, bo wymaganie wygladu i pozycji kontrolki wymagalo stylowania. Finalnie usunieto obejscia DOM i zastosowano oficjalny layout DataTables 2.
|
||||
|
||||
---
|
||||
*Phase: 08-products-page-size, Plan: 01*
|
||||
*Completed: 2026-05-01*
|
||||
Reference in New Issue
Block a user