fix: scontainers edit saves existing record instead of creating new

Fixes static container admin edit flow by preserving id in hiddenFields and adding route-id fallback during save.
Adds regression tests for edit/create id behavior, updates release docs (changelog/testing/CLAUDE), and appends SonarQube open issues to docs/TODO.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jacek
2026-04-18 22:56:14 +02:00
parent c611b012c6
commit 5b66720f7c
12 changed files with 4490 additions and 645 deletions

View File

@@ -1,12 +1,12 @@
# shopPRO
# shopPRO
## What This Is
Autorski silnik sklepu internetowego pisany od podstaw odpowiednik WooCommerce lub PrestaShop, ale bez zależności od zewnętrznych platform. Składa się z panelu administratora (zarządzanie zamówieniami, produktami, klientami) oraz części frontowej dla klienta końcowego.
Autorski silnik sklepu internetowego pisany od podstaw — odpowiednik WooCommerce lub PrestaShop, ale bez zaleĹĽnoĹci od zewnÄ™trznych platform. SkĹ‚ada siÄ™ z panelu administratora (zarzÄ…dzanie zamĂłwieniami, produktami, klientami) oraz części frontowej dla klienta koĹ„cowego.
## Core Value
Właściciel sklepu internetowego ma pełną kontrolę nad sprzedażą online produktami, zamówieniami i klientami w jednym spójnym systemie pisanym od podstaw, bez narzutów zewnętrznych platform.
WĹciciel sklepu internetowego ma peĹnÄ… kontrolÄ™ nad sprzedaĹĽÄ… online — produktami, zamĂłwieniami i klientami — w jednym spĂłjnym systemie pisanym od podstaw, bez narzutĂłw zewnÄ™trznych platform.
## Current State
@@ -14,22 +14,22 @@ Właściciel sklepu internetowego ma pełną kontrolę nad sprzedażą online
|-----------|-------|
| Version | 0.333 |
| Status | Production |
| Last Updated | 2026-03-12 |
| Last Updated | 2026-04-18 |
## Requirements
### Validated (Shipped)
- [x] Panel administratora zarządzanie produktami, kategoriami, atrybutami
- [x] Panel administratora zarządzanie zamówieniami
- [x] Panel administratora zarządzanie klientami
- [x] Część frontowa przeglądanie i kupowanie produktów
- [x] Koszyk i składanie zamówień
- [x] Integracje płatności i dostaw
- [x] Panel administratora — zarządzanie produktami, kategoriami, atrybutami
- [x] Panel administratora — zarządzanie zamówieniami
- [x] Panel administratora — zarządzanie klientami
- [x] Część frontowa — przeglądanie i kupowanie produktów
- [x] Koszyk i składanie zamówień
- [x] Integracje płatności i dostaw
- [x] REST API (ordersPRO + Ekomi)
- [x] Redis caching
- [x] Ochrona przed podwójnym składaniem zamówienia
- [x] Domain-Driven Architecture (migracja z legacy zakończona)
- [x] Ochrona przed podwójnym składaniem zamówienia
- [x] Domain-Driven Architecture (migracja z legacy zakończona)
### Active (In Progress)
@@ -41,16 +41,16 @@ Właściciel sklepu internetowego ma pełną kontrolę nad sprzedażą online
### Out of Scope
- Multitenancy (wiele sklepów w jednej instancji) nie planowane
- Multitenancy (wiele sklepów w jednej instancji) — nie planowane
## Target Users
**Primary:** Właściciel/administrator sklepu internetowego
- Zarządza produktami, zamówieniami, klientami przez panel admina
- Potrzebuje niezawodnego, szybkiego narzędzia bez zbędnych zależności
**Primary:** WĹciciel/administrator sklepu internetowego
- ZarzÄ…dza produktami, zamĂłwieniami, klientami przez panel admina
- Potrzebuje niezawodnego, szybkiego narzÄ™dzia bez zbÄ™dnych zaleĹĽnoĹci
**Secondary:** Klient końcowy sklepu
- Przegląda produkty, dodaje do koszyka, składa zamówienia
**Secondary:** Klient końcowy sklepu
- Przegląda produkty, dodaje do koszyka, składa zamówienia
## Context
@@ -58,26 +58,27 @@ Właściciel sklepu internetowego ma pełną kontrolę nad sprzedażą online
- PHP 7.4+ (produkcja: PHP < 8.0)
- Medoo ORM (`$mdb`), Redis caching
- Domain-Driven Design z Dependency Injection
- PHPUnit 9.6, 810+ testów
- PHPUnit 9.6, 810+ testĂłw
- Namespace: `\Domain\`, `\admin\`, `\front\`, `\api\`, `\Shared\`
## Constraints
### Technical Constraints
- PHP < 8.0 na produkcji (brak `match`, named arguments, union types)
- Medoo ORM prepared statements bez wyjątków
- Medoo ORM — prepared statements bez wyjątków
- Redis wymagany dla cache
### Business Constraints
- System wdrażany u klientów jako update package (ZIP)
- System wdraĹĽany u klientĂłw jako update package (ZIP)
## Key Decisions
| Decision | Rationale | Date | Status |
|----------|-----------|------|--------|
| DDD + DI zamiast legacy architektury | Testowalność, separacja odpowiedzialności | 2025 | Active |
| PHP < 8.0 kompatybilność | Klienci na starszych serwerach | 2025 | Active |
| Własny silnik zamiast frameworka | Pełna kontrola, brak narzutów | - | Active |
| DDD + DI zamiast legacy architektury | Testowalność, separacja odpowiedzialności | 2025 | Active |
| PHP < 8.0 kompatybilność | Klienci na starszych serwerach | 2025 | Active |
| Własny silnik zamiast frameworka | Pełna kontrola, brak narzutów | - | Active |
| `id` w tabbed FormEdit przez `hiddenFields` | Zapobiega insert zamiast update przy edycji encji | 2026-04-18 | Active |
## Success Metrics
@@ -93,7 +94,7 @@ Właściciel sklepu internetowego ma pełną kontrolę nad sprzedażą online
| Backend | PHP 7.4+ | < 8.0 na produkcji |
| ORM | Medoo | `$mdb` global |
| Cache | Redis | CacheHandler singleton |
| Frontend | HTML/CSS/JS | Własny silnik szablonów (Tpl) |
| Frontend | HTML/CSS/JS | Własny silnik szablonów (Tpl) |
| Auth | Sesje PHP | CSRF, XSS protection |
| Testy | PHPUnit 9.6 | phpunit.phar |
@@ -102,14 +103,15 @@ Właściciel sklepu internetowego ma pełną kontrolę nad sprzedażą online
See: .paul/SPECIAL-FLOWS.md
Quick Reference:
- /feature-dev Nowe funkcje, większe zmiany (required)
- /koniec-pracy Release, update package (required)
- /frontend-design Komponenty UI, szablony widoków
- /code-review Przegląd kodu przed release
- /simplify Upraszczanie po implementacji
- /claude-md-improver Utrzymanie CLAUDE.md
- /zapisz + /wznow Zapis i wznowienie sesji
- /feature-dev → Nowe funkcje, większe zmiany (required)
- /koniec-pracy → Release, update package (required)
- /frontend-design → Komponenty UI, szablony widoków
- /code-review → Przegląd kodu przed release
- /simplify → Upraszczanie po implementacji
- /claude-md-improver → Utrzymanie CLAUDE.md
- /zapisz + /wznow → Zapis i wznowienie sesji
---
*PROJECT.md Updated when requirements or context change*
*Last updated: 2026-03-12*
*PROJECT.md — Updated when requirements or context change*
*Last updated: 2026-04-18 after Phase 15*