Files
shopPRO/docs/DATABASE_STRUCTURE.md
Jacek Pyziak d83d0ecdea feat: eliminate htaccess.conf, move all URL routes to pp_routes (v0.329-0.330)
- Add category_id, page_id, article_id, type columns to pp_routes (migration 0.329)
- Move routing block in index.php before checkUrlParams() with Redis cache
- Routes for categories, pages, articles now stored in pp_routes instead of .htaccess
- Delete category/page/article routes on entity delete in respective repositories
- Eliminate libraries/htaccess.conf: generate .htaccess content entirely from PHP
- Move 32 static system routes (koszyk, logowanie, newsletter, AJAX modules, etc.)
  plus dynamic language/producer routes to pp_routes with type='system'
- Invalidate pp_routes Redis cache on every htacces() regeneration

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 22:06:33 +01:00

28 KiB

Struktura bazy danych shopPRO

Plik aktualizowany na bieżąco przy zmianach w kodzie. ORM: Medoo ($mdb), prefix tabel: pp_

pp_shop_products

Główna tabela produktów.

Kolumna Opis
id PK
parent_id FK do produktu nadrzędnego (kombinacje) - NULL dla produktów głównych
price_brutto Cena brutto
price_brutto_promo Cena promocyjna brutto
quantity Stan magazynowy
status Status: 1 = aktywny, 0 = nieaktywny
archive Archiwum: 1 = zarchiwizowany, 0 = aktywny
promoted Czy promowany
vat Stawka VAT
ean Kod EAN
sku Kod SKU
apilo_product_id ID produktu w Apilo
apilo_product_name Nazwa produktu w Apilo

Używane w: Domain\Product\ProductRepository, admin\factory\ShopProduct, admin\Controllers\ShopProductController

pp_shop_products_langs

Tłumaczenia produktów (per język).

Kolumna Opis
id PK
product_id FK do pp_shop_products
lang_id ID języka (np. 'pl')
name Nazwa produktu

Używane w: Domain\Product\ProductRepository::getName()

pp_shop_products_images

Zdjęcia produktów.

Kolumna Opis
id PK
product_id FK do pp_shop_products
src Ścieżka do pliku
alt Tekst alternatywny

pp_shop_products_custom_fields

Dodatkowe pola produktów (custom fields).

Kolumna Opis
id_additional_field PK
id_product FK do pp_shop_products
name Nazwa pola
type Typ pola (VARCHAR 30)
is_required Czy wymagane (0/1)

pp_shop_products_categories

Przypisanie produktów do kategorii.

Kolumna Opis
product_id FK do pp_shop_products

Używane w: admin\factory\ShopProduct::product_delete(), Domain\Product\ProductRepository::getProductsByCategory()

Aktualizacja 2026-02-15 (ver. 0.274): akcje /admin/shop_product/mass_edit/* korzystają z Domain\Product\ProductRepository przez admin\Controllers\ShopProductController.

pp_shop_categories

Kategorie sklepu.

Kolumna Opis
id PK
parent_id FK do kategorii nadrzednej (NULL dla root)
status 1 = aktywna, 0 = nieaktywna
o Kolejnosc wyswietlania
sort_type Typ sortowania produktow w kategorii
view_subcategories Czy wyswietlac podkategorie

Uzywane w: Domain\Category\CategoryRepository, admin\Controllers\ShopCategoryController.

pp_shop_categories_langs

Tlumaczenia kategorii (per jezyk).

Kolumna Opis
category_id FK do pp_shop_categories
lang_id ID jezyka (np. pl, en)
title Nazwa kategorii
text Opis kategorii
text_hidden Rozwiniecie opisu kategorii
seo_link Link SEO kategorii
meta_title Meta title
meta_description Meta description
meta_keywords Meta keywords
noindex Flaga noindex
category_title Naglowek H1 kategorii
additional_text Dodatkowy tekst nad lista produktow

Uzywane w: Domain\Category\CategoryRepository, admin\Controllers\ShopCategoryController.

Aktualizacja 2026-02-15 (ver. 0.275): modul /admin/shop_category/* korzysta z Domain\Category\CategoryRepository przez admin\Controllers\ShopCategoryController; usunieto legacy admin\controls/factory/view\ShopCategory.

pp_shop_orders

Zamówienia sklepu (źródło danych dla list i szczegółów klientów w panelu admin).

Kolumna Opis
id PK
client_id FK do pp_shop_clients (NULL dla gościa)
client_name Imię klienta z zamówienia
client_surname Nazwisko klienta z zamówienia
client_email E-mail klienta z zamówienia
client_phone Telefon klienta
client_city Miasto klienta
summary Wartość zamówienia
date_order Data złożenia zamówienia
payment_method Nazwa metody płatności
transport Nazwa transportu
message Wiadomość klienta
updated_at Data ostatniej modyfikacji (polling API)

Używane w: Domain\Client\ClientRepository::listForAdmin(), Domain\Client\ClientRepository::ordersForClient(), Domain\Client\ClientRepository::totalsForClient(), Domain\Order\OrderRepository::listForApi(), Domain\Order\OrderRepository::findForApi().

Aktualizacja 2026-02-15 (ver. 0.274): moduł /admin/shop_clients/* korzysta z Domain\Client\ClientRepository przez admin\Controllers\ShopClientsController.

Aktualizacja 2026-02-15 (ver. 0.276): moduł /admin/shop_order/* korzysta z Domain\Order\OrderRepository przez admin\Controllers\ShopOrderController; usunięto legacy admin\controls\ShopOrder i admin\factory\ShopOrder.

Aktualizacja 2026-02-17 (ver. 0.290): frontend /shop_order/* korzysta z Domain\Order\OrderRepository przez front\Controllers\ShopOrderController; usunięto legacy front\controls\ShopOrder, front\factory\ShopOrder, front\view\ShopOrder. Callery (ShopBasketController, ClientRepository, shop\Order, cron-turstmate) przepięte na OrderRepository.

pp_banners

Banery.

Kolumna Opis
id PK
name Nazwa banera
status 0/1
date_start Data rozpoczęcia
date_end Data zakończenia
home_page Czy na stronie głównej 0/1

Używane w: Domain\Banner\BannerRepository, front\Views\Banners

Aktualizacja 2026-02-16 (ver. 0.281): metody frontendowe banners(), mainBanner() dodane do Domain\Banner\BannerRepository. Fasady front\factory\Banners i front\view\Banners deleguja do repo/Views.

pp_banners_langs

Tłumaczenia banerów.

Kolumna Opis
id PK
id_banner FK do pp_banners
id_lang ID języka
src Ścieżka do grafiki
url URL docelowy
html Kod HTML
text Tekst

Używane w: Domain\Banner\BannerRepository, front\Views\Banners

pp_articles

Artykuły.

Kolumna Opis
id PK
status -1 = archiwum, 0 = nieaktywny, 1 = aktywny

Używane w: admin\Controllers\ArticlesArchiveController, Domain\Article\ArticleRepository::find(), Domain\Article\ArticleRepository::listArchivedForAdmin()

pp_articles_pages

Strony artykułów.

Kolumna Opis
article_id FK do pp_articles
page_id FK do strony (pp_pages)
o Kolejność

Używane w: Domain\Article\ArticleRepository::find(), Domain\Article\ArticleRepository::deleteNonassignedImages()

pp_articles_langs

Tłumaczenia artykułów.

Kolumna Opis
article_id FK do pp_articles
lang_id ID języka (np. 'pl')
title Tytuł artykułu
seo_link Link SEO artykułu

Używane w: Domain\Article\ArticleRepository::find(), Domain\Article\ArticleRepository::deleteNonassignedFiles()

pp_articles_images

Zdjęcia artykułów.

Kolumna Opis
article_id FK do pp_articles
src Ścieżka do pliku
o Kolejność
id PK (używane też do sortowania DESC)

Używane w: Domain\Article\ArticleRepository::find()

pp_articles_files

Pliki artykułów.

Kolumna Opis
id PK
article_id FK do pp_articles
src Ścieżka do pliku
name Nazwa wyświetlana załącznika (opcjonalna)
to_delete Flaga miękkiego usuwania (0/1)
o Kolejność załączników (używana przez sortowanie drag&drop w adminie)

Używane w: Domain\Article\ArticleRepository::find(), Domain\Article\ArticleRepository::saveFilesOrder()

pp_units

Jednostki/slowniki (np. jednostki produktu).

Kolumna Opis
id PK

Używane w: Domain\Dictionaries\DictionariesRepository, admin\controls\ShopProduct

pp_units_langs

Tlumaczenia jednostek (per jezyk).

Kolumna Opis
id PK
unit_id FK do pp_units
lang_id ID jezyka (np. 'pl')
text Nazwa jednostki

Używane w: Domain\Dictionaries\DictionariesRepository

pp_users

Uzytkownicy panelu administratora.

Kolumna Opis
id PK
login Login / e-mail uzytkownika
password Hash hasla (legacy: md5)
status Status konta: 1 = aktywny, 0 = zablokowany
admin Flaga dostepu do panelu admin
error_logged_count Licznik nieudanych logowan
last_logged Data ostatniego poprawnego logowania
last_error_logged Data ostatniej nieudanej proby logowania
twofa_enabled Czy wlaczone 2FA (0/1)
twofa_email E-mail do wysylki kodu 2FA
twofa_code_hash Hash aktualnego kodu 2FA
twofa_expires_at Data waznosci kodu 2FA
twofa_sent_at Data ostatniej wysylki kodu 2FA
twofa_failed_attempts Liczba nieudanych prob 2FA

Uzywane w: Domain\User\UserRepository, admin\Controllers\UsersController, admin\factory\Users

Aktualizacja 2026-02-12: uzycia pp_users sa prowadzone przez Domain\\User\\UserRepository (legacy admin\\factory\\Users usunieto).

pp_langs

Jezyki panelu i frontendu.

Kolumna Opis
id PK (2-literowe ID jezyka, np. pl, en)
name Nazwa jezyka
status 1 = aktywny, 0 = nieaktywny
start 1 = domyslny jezyk
o Kolejnosc

Uzywane w: Domain\\Languages\\LanguagesRepository, admin\\Controllers\\LanguagesController, front\\factory\\Languages

pp_langs_translations

Slownik tlumaczen panelu/frontendu.

Kolumna Opis
id PK
text Klucz/tekst bazowy
<lang_id> Kolumny dynamiczne per jezyk (np. pl, en)

Uzywane w: Domain\\Languages\\LanguagesRepository, admin\\Controllers\\LanguagesController, front\\factory\\Languages

Aktualizacja 2026-02-12: modul jezykow i tlumaczen (pp_langs, pp_langs_translations) obslugiwany przez Domain\\Languages\\LanguagesRepository.

pp_layouts

Szablony layoutow (HTML/CSS/JS + flagi domyslne).

Kolumna Opis
id PK
name Nazwa szablonu
html Kod HTML
css Kod CSS
js Kod JS
m_html Kod HTML mobilny
m_css Kod CSS mobilny
m_js Kod JS mobilny
status Domyslny layout stron (0/1)
categories_default Domyslny layout kategorii (0/1)

Uzywane w: Domain\\Layouts\\LayoutsRepository, admin\\Controllers\\LayoutsController, front\\factory\\Layouts

pp_layouts_pages

Przypisanie layoutow do stron CMS.

Kolumna Opis
layout_id FK do pp_layouts
page_id FK do pp_pages

Uzywane w: Domain\\Layouts\\LayoutsRepository, front\\factory\\Layouts

pp_layouts_categories

Przypisanie layoutow do kategorii sklepu.

Kolumna Opis
layout_id FK do pp_layouts
category_id FK do pp_shop_categories

Uzywane w: Domain\\Layouts\\LayoutsRepository, front\\factory\\Layouts

Aktualizacja 2026-02-12 (ver. 0.256): modul /admin/layouts korzysta z Domain\\Layouts\\LayoutsRepository (DI kontroler + fasada legacy).

pp_newsletter

Adresy e-mail zapisane do newslettera.

Kolumna Opis
id PK
email Adres e-mail subskrybenta
hash Hash potwierdzenia/wypisu
status 1 = potwierdzony, 0 = oczekujacy

Uzywane w: Domain\\Newsletter\\NewsletterRepository, front\\Controllers\\NewsletterController

pp_newsletter_send

Kolejka wysylki newslettera.

Kolumna Opis
id PK
email Adres docelowy
dates Zakres dat artykulow (tekst)
id_template FK do pp_newsletter_templates (NULL gdy brak szablonu)

Uzywane w: Domain\\Newsletter\\NewsletterRepository

pp_newsletter_templates

Szablony tresci e-maili (uzytkownik + administracyjne/systemowe).

Kolumna Opis
id PK
name Nazwa/klucz szablonu
text Tresc HTML szablonu
is_admin 1 = szablon administracyjny/systemowy, 0 = szablon uzytkownika

Uzywane w: Domain\\Newsletter\\NewsletterRepository, admin\\Controllers\\NewsletterController

Aktualizacja 2026-02-12 (ver. 0.257): modul /admin/newsletter korzysta z Domain\\Newsletter\\NewsletterRepository (DI kontroler + fasada legacy).

Aktualizacja 2026-02-16 (ver. 0.279): front\\factory\\Newsletter usunięta — logika przeniesiona do NewsletterRepository. Frontend korzysta z front\\Controllers\\NewsletterController (DI).

pp_scontainers

Kontenery statyczne (modul /admin/scontainers).

Kolumna Opis
id PK
status 1 = aktywny, 0 = nieaktywny
show_title 1 = pokaz tytul, 0 = ukryj tytul

Uzywane w: Domain\Scontainers\ScontainersRepository, admin\Controllers\ScontainersController, front\factory\Scontainers

pp_scontainers_langs

Tlumaczenia kontenerow statycznych (per jezyk).

Kolumna Opis
id PK
container_id FK do pp_scontainers
lang_id ID jezyka (np. pl, en)
title Tytul kontenera
text Tresc HTML kontenera

Uzywane w: Domain\Scontainers\ScontainersRepository, front\factory\Scontainers

Aktualizacja 2026-02-12 (ver. 0.259): modul /admin/scontainers korzysta z Domain\Scontainers\ScontainersRepository (DI kontroler + fasada legacy).

Aktualizacja 2026-02-12 (ver. 0.260): modul /admin/articles_archive korzysta z Domain\Article\ArticleRepository (listArchivedForAdmin, restore, deletePermanently) przez admin\Controllers\ArticlesArchiveController.

pp_shop_attributes

Cechy produktu (modul /admin/shop_attribute).

Kolumna Opis
id PK
status Status: 1 = aktywny, 0 = nieaktywny
type Typ cechy: 0 = tekst, 1 = kolor, 2 = wzor
o Kolejnosc wyswietlania

Uzywane w: Domain\Attribute\AttributeRepository, admin\Controllers\ShopAttributeController, admin\controls\ShopProduct, admin\factory\ShopProduct

pp_shop_attributes_langs

Tlumaczenia cech produktu (per jezyk).

Kolumna Opis
id PK
attribute_id FK do pp_shop_attributes
lang_id ID jezyka (np. pl, en)
name Nazwa cechy

Uzywane w: Domain\Attribute\AttributeRepository, shop\ProductAttribute

pp_shop_attributes_values

Wartosci cech produktu.

Kolumna Opis
id PK
attribute_id FK do pp_shop_attributes
is_default Czy wartosc domyslna dla cechy (0/1)
impact_on_the_price Wplyw na cene wariantu (NULL = brak)

Uzywane w: Domain\Attribute\AttributeRepository, admin\Controllers\ShopAttributeController, admin\factory\ShopProduct

pp_shop_attributes_values_langs

Tlumaczenia wartosci cech (per jezyk).

Kolumna Opis
id PK
value_id FK do pp_shop_attributes_values
lang_id ID jezyka (np. pl, en)
name Nazwa wyswietlana
value Wewnetrzna wartosc techniczna (opcjonalna)

Uzywane w: Domain\Attribute\AttributeRepository, shop\ProductAttribute

pp_shop_products_attributes

Powiazanie kombinacji produktow z wartosciami cech.

Kolumna Opis
product_id FK do pp_shop_products (kombinacja)
value_id FK do pp_shop_attributes_values

Uzywane w: Domain\Attribute\AttributeRepository::refreshCombinationPricesForValue(), admin\controls\ShopProduct, admin\factory\ShopProduct

Aktualizacja 2026-02-14 (ver. 0.271): modul /admin/shop_attribute korzysta z Domain\Attribute\AttributeRepository przez admin\Controllers\ShopAttributeController. Usunieto legacy klasy admin\controls\ShopAttribute, admin\factory\ShopAttribute, admin\view\ShopAttribute.

pp_shop_coupon

Kody rabatowe sklepu (modul /admin/shop_coupon).

Kolumna Opis
id PK
name Kod kuponu (UNIQUE)
status Status: 1 = aktywny, 0 = nieaktywny
send Czy kupon zostal wyslany (0/1)
used Czy kupon zostal wykorzystany (0/1)
date_used Data wykorzystania kuponu (NULL gdy brak)
used_count Licznik uzyc kuponu
type Typ kuponu (obecnie: 1 = rabat procentowy na koszyk)
amount Wartosc kuponu (np. procent)
one_time Czy kupon jednorazowy (0/1)
include_discounted_product Czy obejmuje rowniez produkty przecenione (0/1)
categories JSON z ID kategorii objetych kuponem (NULL = bez ograniczenia)

Uzywane w: Domain\Coupon\CouponRepository, admin\Controllers\ShopCouponController, front\Controllers\ShopCouponController, shop\Coupon, Domain\Order\OrderRepository

Aktualizacja 2026-02-13 (ver. 0.266): modul /admin/shop_coupon korzysta z Domain\Coupon\CouponRepository przez admin\Controllers\ShopCouponController. Usunieto legacy klasy admin\controls\ShopCoupon i admin\factory\ShopCoupon.

pp_shop_promotion

Promocje sklepu (modul /admin/shop_promotion).

Kolumna Opis
id PK
name Nazwa promocji
status Status: 1 = aktywna, 0 = nieaktywna
condition_type Typ warunku promocji (slownik w shop\Promotion::$condition_type)
discount_type Typ rabatu (slownik w shop\Promotion::$discount_type)
amount Wartosc rabatu (np. procent)
date_from Data startu promocji (NULL = aktywna od razu)
date_to Data konca promocji (NULL = bez daty konca)
categories JSON z ID kategorii grupy I
condition_categories JSON z ID kategorii grupy II
include_coupon Czy laczyc z kuponami rabatowymi (0/1)
include_product_promo Czy uwzgledniac produkty przecenione (0/1)
min_product_count Minimalna liczba produktow (dla wybranych warunkow)
price_cheapest_product Cena najtanszego produktu (dla wybranych warunkow)

Uzywane w: Domain\Promotion\PromotionRepository, admin\Controllers\ShopPromotionController, shop\Promotion, front\factory\ShopPromotion

Aktualizacja 2026-02-13: modul /admin/shop_promotion korzysta z Domain\Promotion\PromotionRepository przez admin\Controllers\ShopPromotionController. Usunieto legacy klasy admin\controls\ShopPromotion i admin\factory\ShopPromotion.

Aktualizacja 2026-02-13 (ver. 0.265): dodano obsluge date_from (repozytorium, formularz admin, lista admin, filtr aktywnych promocji na froncie) oraz poprawke zapisu edycji promocji po id.

pp_shop_payment_methods

Metody platnosci sklepu (modul /admin/shop_payment_method).

Kolumna Opis
id PK
name Nazwa metody platnosci
description Opis metody platnosci (wyswietlany m.in. w checkout)
status Status: 1 = aktywna, 0 = nieaktywna
apilo_payment_type_id ID typu platnosci Apilo (NULL gdy brak mapowania)
min_order_amount Minimalna kwota zamowienia (DECIMAL(10,2), NULL = brak limitu)
max_order_amount Maksymalna kwota zamowienia (DECIMAL(10,2), NULL = brak limitu)
sellasist_payment_type_id DEPRECATED (integracja Sellasist usunieta w ver. 0.263)

Uzywane w: Domain\PaymentMethod\PaymentMethodRepository, admin\Controllers\ShopPaymentMethodController, front\factory\ShopPaymentMethod, shop\PaymentMethod, admin\controls\ShopTransport, cron.php

Aktualizacja 2026-02-14 (ver. 0.268): modul /admin/shop_payment_method korzysta z Domain\PaymentMethod\PaymentMethodRepository przez admin\Controllers\ShopPaymentMethodController. Usunieto legacy klasy admin\controls\ShopPaymentMethod, admin\factory\ShopPaymentMethod, admin\view\ShopPaymentMethod oraz widok admin/templates/shop-payment-method/view-list.php.

Aktualizacja 2026-02-22 (ver. 0.304): dodano kolumny min_order_amount i max_order_amount — konfigurowalne limity kwotowe metod platnosci. Zastapiono hardcoded warunek PayPo (id=6, 40-1000 PLN) generycznym filtrowaniem na froncie.

pp_shop_transports

Rodzaje transportu sklepu (modul /admin/shop_transport).

Kolumna Opis
id PK
name Nazwa (systemowa, readonly)
name_visible Nazwa widoczna dla klienta
description Opis metody transportu
status Status: 1 = aktywny, 0 = nieaktywny
cost Koszt dostawy (PLN)
max_wp Maksymalna waga paczki (NULL = bez limitu)
default Domyslna forma dostawy (0/1)
delivery_free Czy obsluguje darmowa dostawe (0/1)
apilo_carrier_account_id ID konta przewoznika w Apilo (NULL gdy brak mapowania)
o Kolejnosc wyswietlania

Uzywane w: Domain\Transport\TransportRepository, admin\Controllers\ShopTransportController, front\factory\ShopTransport

pp_shop_transport_payment_methods

Powiazanie metod transportu z metodami platnosci (tabela lacznikowa).

Kolumna Opis
id_transport FK do pp_shop_transports
id_payment_method FK do pp_shop_payment_methods

Uzywane w: Domain\Transport\TransportRepository, Domain\PaymentMethod\PaymentMethodRepository::forTransport()

Aktualizacja 2026-02-14 (ver. 0.269): modul /admin/shop_transport korzysta z Domain\Transport\TransportRepository przez admin\Controllers\ShopTransportController. Usunieto legacy klasy admin\controls\ShopTransport, admin\view\ShopTransport oraz widok admin/templates/shop-transport/view-list.php.

pp_shop_apilo_settings

Ustawienia integracji Apilo (key-value).

Kolumna Opis
id PK
name Klucz ustawienia (np. client-id, access-token)
value Wartosc ustawienia

Uzywane w: Domain\Integrations\IntegrationsRepository, admin\Controllers\IntegrationsController, admin\factory\Integrations

pp_shop_shoppro_settings

Ustawienia integracji ShopPRO (key-value).

Kolumna Opis
id PK
name Klucz ustawienia (np. domain, db_name)
value Wartosc ustawienia

Uzywane w: Domain\Integrations\IntegrationsRepository, admin\Controllers\IntegrationsController, admin\factory\Integrations

Aktualizacja 2026-02-13: modul /admin/integrations/ korzysta z Domain\Integrations\IntegrationsRepository (DI kontroler + fasada legacy). Usunieto integracje Sellasist i Baselinker.

pp_shop_statuses

Statusy zamowien sklepu (modul /admin/shop_statuses). Statusy sa predefiniowane - brak dodawania/usuwania, mozliwa edycja koloru i mapowania Apilo.

Kolumna Opis
id PK (zaczyna sie od 0!)
status Nazwa statusu (read-only)
color Kolor statusu (hex, np. #ff0000)
o Kolejnosc wyswietlania
apilo_status_id ID statusu w Apilo (NULL gdy brak mapowania)
baselinker_status_id DEPRECATED (usuniety w ver. 0.263)
sellasist_status_id DEPRECATED (usuniety w ver. 0.263)

Uzywane w: Domain\ShopStatus\ShopStatusRepository, admin\Controllers\ShopStatusesController, front\factory\ShopStatuses, shop\Order, cron.php

Aktualizacja 2026-02-14 (ver. 0.267): modul /admin/shop_statuses korzysta z Domain\ShopStatus\ShopStatusRepository przez admin\Controllers\ShopStatusesController. Usunieto legacy klasy admin\controls\ShopStatuses i admin\factory\ShopStatuses. front\factory\ShopStatuses dziala jako fasada do repozytorium.

pp_shop_product_sets

Komplety produktow (modul /admin/shop_product_sets).

Kolumna Opis
id PK
name Nazwa kompletu
status Status: 1 = aktywny, 0 = nieaktywny

Uzywane w: Domain\ProductSet\ProductSetRepository, admin\Controllers\ShopProductSetsController, shop\ProductSet, shop\Product

pp_shop_product_sets_products

Powiazanie kompletow z produktami (tabela lacznikowa).

Kolumna Opis
id PK
set_id FK do pp_shop_product_sets
product_id FK do pp_shop_products

Uzywane w: Domain\ProductSet\ProductSetRepository, shop\Product, front\factory\ShopProduct, admin\factory\ShopProduct

Aktualizacja 2026-02-15 (ver. 0.272): modul /admin/shop_product_sets korzysta z Domain\ProductSet\ProductSetRepository przez admin\Controllers\ShopProductSetsController. Usunieto legacy klasy admin\controls\ShopProductSets i admin\factory\ShopProductSet. shop\ProductSet dziala jako fasada do repozytorium.

pp_shop_producer

Producenci produktow (modul /admin/shop_producer).

Kolumna Opis
id PK
name Nazwa producenta
status Status: 1 = aktywny, 0 = nieaktywny
img Sciezka do logo producenta (NULL gdy brak)

Uzywane w: Domain\Producer\ProducerRepository, admin\Controllers\ShopProducerController, front\Controllers\ShopProducerController, shop\Product

pp_shop_producer_lang

Tlumaczenia producentow (per jezyk). FK kaskadowe ON DELETE CASCADE.

Kolumna Opis
id PK
producer_id FK do pp_shop_producer
lang_id ID jezyka (np. pl, en)
description Opis producenta (TEXT)
data Dane producenta (TEXT, HTML)
meta_title Meta title SEO (VARCHAR 255)

Uzywane w: Domain\Producer\ProducerRepository, shop\Product

Aktualizacja 2026-02-15 (ver. 0.273): modul /admin/shop_producer korzysta z Domain\Producer\ProducerRepository przez admin\Controllers\ShopProducerController. Usunieto legacy admin\controls\ShopProducer i admin\factory\ShopProducer. shop\Producer dziala jako fasada do repozytorium.

Aktualizacja 2026-02-17 (ver. 0.291): frontend /shop_producer/* korzysta z Domain\Producer\ProducerRepository przez front\Controllers\ShopProducerController; usunięto legacy front\controls\ShopProducer i shop\Producer.

pp_cron_jobs

Kolejka zadań cron z priorytetami i retry/backoff.

Kolumna Opis
id PK auto increment
job_type Typ zadania (VARCHAR 50) — np. apilo_send_order, price_history
status ENUM: pending, processing, completed, failed, cancelled
priority TINYINT — niższy = ważniejszy (10=krytyczny, 50=wysoki, 100=normalny, 200=niski)
payload JSON z danymi zadania (TEXT NULL)
result JSON z wynikiem (TEXT NULL)
attempts Liczba prób (SMALLINT)
max_attempts Maksymalna liczba prób (SMALLINT, domyślnie 10)
last_error Ostatni błąd (VARCHAR 500)
scheduled_at Kiedy zadanie ma być uruchomione (DATETIME)
started_at Kiedy rozpoczęto przetwarzanie (DATETIME NULL)
completed_at Kiedy zakończono (DATETIME NULL)
created_at Data utworzenia (DATETIME)
updated_at Data ostatniej modyfikacji (DATETIME, ON UPDATE)

Indeksy: idx_status_priority_scheduled (status, priority, scheduled_at), idx_job_type, idx_status

Używane w: Domain\CronJob\CronJobRepository, Domain\CronJob\CronJobProcessor

pp_cron_schedules

Harmonogram cyklicznych zadań cron.

Kolumna Opis
id PK auto increment
job_type Typ zadania (VARCHAR 50, UNIQUE)
interval_seconds Interwał uruchomienia w sekundach
priority Priorytet tworzonych zadań (TINYINT)
max_attempts Maks. prób dla tworzonych zadań (SMALLINT)
payload Opcjonalny payload JSON (TEXT NULL)
enabled Czy harmonogram aktywny (TINYINT 1)
last_run_at Ostatnie uruchomienie (DATETIME NULL)
next_run_at Następne planowane uruchomienie (DATETIME NULL)
created_at Data utworzenia (DATETIME)

Indeksy: idx_enabled_next_run (enabled, next_run_at)

Używane w: Domain\CronJob\CronJobRepository, Domain\CronJob\CronJobProcessor

Dodano w wersji 0.324.

pp_routes

Tabela tras URL — mapowanie wzorców URL (regex) na parametry GET. Zastępuje reguły RewriteRule w .htaccess dla wszystkich URL-i aplikacji: produktów, kategorii, stron, artykułów oraz systemowych (koszyk, logowanie, newsletter, itp.).

Kolumna Opis
id Klucz główny (AUTO_INCREMENT)
product_id ID produktu (INT NULL) — wypełnione dla tras produktów
category_id ID kategorii (INT NULL) — wypełnione dla tras kategorii
page_id ID strony (INT NULL) — wypełnione dla tras stron
article_id ID artykułu (INT NULL) — wypełnione dla tras artykułów
type Typ trasy: NULL = encja (produkt/kategoria/strona/artykuł), 'system' = trasa systemowa (koszyk, logowanie, newsletter, AJAX moduły, itp.)
lang_id ID języka (0 dla tras systemowych niezwiązanych z językiem)
pattern Wyrażenie regularne dopasowywane do REQUEST_URI
destination Docelowy query string, np. index.php?category=5&lang=1

Mechanizm: index.php ładuje wszystkie trasy (z cache Redis pp_routes:all) przed checkUrlParams(), dopasowuje pattern do ścieżki żądania i ustawia $_GET z destination. Obsługuje grupy przechwytujące (np. $1 dla paginacji).

Trasy systemowe: Przy każdym wywołaniu Helpers::htacces() wszystkie rekordy z type='system' są usuwane i wstawiane na nowo (32 statycznych + dynamiczne trasy językowe i producentów). Zarządzane automatycznie — nie edytować ręcznie.

Cache: Redis klucz pp_routes:all, TTL 86400s. Invalidowany automatycznie przy każdym wywołaniu Helpers::htacces().

Używane w: index.php, Shared\Helpers\Helpers::htacces(), Domain\Product\ProductRepository, Domain\Category\CategoryRepository, Domain\Pages\PagesRepository, Domain\Article\ArticleRepository

Dodano w wersji 0.329. Kolumna type i trasy systemowe dodane w wersji 0.330.