Separator URL miedzy parami attr-val zmieniony z "/" na "_" w generatorze feedu (ProductRepository::appendCombinationToXml). Wzorzec routingu pp_routes rozszerzony do [0-9_-]+ w Helpers::htacces (oba warianty: seo_link i fallback p-id-name). LayoutEngine konwertuje "_" -> "|" przed wywolaniem ProductRepository::findCached — format DB pozostaje "|". Partial product-attribute.php preselectuje wartosc z permutation_hash URL (forced_value_id), co poprawia UX wejscia z linka feedu. Suita: 834 -> 841 testow (+7), 2330 assertions. Wymagane akcje na produkcji po deployu: regeneracja pp_routes (Helpers::htacces), wyczyszczenie klucza pp_routes:all w Redis, regeneracja google-feed.xml, resubmit feedu w GMC. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
123 lines
4.6 KiB
Markdown
123 lines
4.6 KiB
Markdown
# 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.
|
|
|
|
## 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.
|
|
|
|
## Current State
|
|
|
|
| Attribute | Value |
|
|
|-----------|-------|
|
|
| Version | 0.333 |
|
|
| Status | Production |
|
|
| Last Updated | 2026-04-30 |
|
|
|
|
## 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] 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] Szybka edycja custom_label_0..4 na liscie produktow admina (toggle sesyjny + autocomplete)
|
|
- [x] Poprawna kalkulacja kosztu transportu na /koszyk-podsumowanie (fix delivery_free bez uwzglednienia progu)
|
|
- [x] Linki produktów z permutacją w feedzie Google działają (separator `_` w URL, konwersja `_`→`|` w warstwie front, regex `[0-9_-]+` w pp_routes)
|
|
|
|
### Active (In Progress)
|
|
|
|
- [ ] [Do zdefiniowania podczas planowania]
|
|
|
|
### Planned (Next)
|
|
|
|
- [ ] [Do zdefiniowania podczas planowania]
|
|
|
|
### Out of Scope
|
|
|
|
- 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
|
|
|
|
**Secondary:** Klient końcowy sklepu
|
|
- Przegląda produkty, dodaje do koszyka, składa zamówienia
|
|
|
|
## Context
|
|
|
|
**Technical Context:**
|
|
- PHP 7.4+ (produkcja: PHP < 8.0)
|
|
- Medoo ORM (`$mdb`), Redis caching
|
|
- Domain-Driven Design z Dependency Injection
|
|
- 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
|
|
- Redis wymagany dla cache
|
|
|
|
### Business Constraints
|
|
- 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 |
|
|
| `id` w tabbed FormEdit przez `hiddenFields` | Zapobiega insert zamiast update przy edycji encji | 2026-04-18 | Active |
|
|
| Inline custom labels w product list przez sesyjny toggle | Szybszy workflow dla Google XML bez wejscia w edycje produktu | 2026-04-19 | Active |
|
|
| Kalkulacja kosztu transportu na /koszyk-podsumowanie w kontrolerze (nie w szablonie) | Spojnosc logiki progu darmowej dostawy miedzy /koszyk i /koszyk-podsumowanie | 2026-04-20 | Active |
|
|
| Separator URL permutacji `_` zamiast `/` (DB pozostaje `|`) | Jeden segment URL dopasowywalny przez pp_routes; konwersja `_`→`|` w warstwie front | 2026-04-30 | Active |
|
|
|
|
## Success Metrics
|
|
|
|
| Metric | Target | Current | Status |
|
|
|--------|--------|---------|--------|
|
|
| Testy | >800 | 841 | On track |
|
|
| Pokrycie architektury DDD | 100% | 100% | Achieved |
|
|
|
|
## Tech Stack
|
|
|
|
| Layer | Technology | Notes |
|
|
|-------|------------|-------|
|
|
| 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) |
|
|
| Auth | Sesje PHP | CSRF, XSS protection |
|
|
| Testy | PHPUnit 9.6 | phpunit.phar |
|
|
|
|
## Specialized Flows
|
|
|
|
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
|
|
|
|
---
|
|
*PROJECT.md - Updated when requirements or context change*
|
|
*Last updated: 2026-04-30 after Phase 18*
|