# DB_SCHEMA

## Scope

Dokument opisuje praktyczny schema map dla `shopPRO`:
- najwazniejsze tabele i relacje,
- grupowanie po domenach biznesowych,
- kluczowe kolumny i indeksy, ktore maja znaczenie runtime,
- mapowanie tabela -> warstwa Domain.

Pelna lista tabel i historyczne notki migracyjne:
`docs/DATABASE_STRUCTURE.md` (source of truth dla detali kolumnowych).

## Konwencje globalne

- ORM: Medoo (`$mdb`)
- Prefix tabel: `pp_`
- Primary key: najczesciej `id` (INT AUTO_INCREMENT)
- Jezyki/translations: zwykle tabele `*_langs` z kluczem `lang_id`
- Wiele-do-wielu: tabele lacznikowe `*_products`, `*_payment_methods`, itp.

## Core commerce

### Produkty

- `pp_shop_products`
  - core produktu i wariantu (`parent_id` dla kombinacji)
  - ceny (`price_brutto`, `price_brutto_promo`), stany (`quantity`)
  - flagi (`status`, `archive`, `promoted`)
- `pp_shop_products_langs`
  - nazwy/opisy per jezyk
- `pp_shop_products_images`
  - obrazy produktu
- `pp_shop_products_categories`
  - przypisania produkt-kategoria
- `pp_shop_products_attributes`
  - przypisania wariantu do wartosci cech
- `pp_shop_products_custom_fields`
  - dodatkowe pola produktu

Warstwa: `Domain\Product\ProductRepository`, `Domain\Attribute\AttributeRepository`.

### Kategorie

- `pp_shop_categories`
  - drzewo kategorii (`parent_id`), status, kolejnosc
- `pp_shop_categories_langs`
  - tresci SEO i opisy kategorii

Warstwa: `Domain\Category\CategoryRepository`.

### Zamowienia

- `pp_shop_orders`
  - dane klienta "w momencie zakupu", summary, status/platnosc, daty
  - kluczowe pole integracyjne: `updated_at` (polling API)

Warstwa: `Domain\Order\OrderRepository`, `Domain\Order\OrderAdminService`.

### Klienci

- `pp_shop_clients`
  - konto klienta i dane adresowe/logowania (uzywane przez ClientRepository)

Warstwa: `Domain\Client\ClientRepository`.

## Slowniki i checkout

### Platnosci

- `pp_shop_payment_methods`
  - status, opis, mapowanie Apilo
  - limity kwotowe: `min_order_amount`, `max_order_amount`
  - COD flag: `is_cod`

Warstwa: `Domain\PaymentMethod\PaymentMethodRepository`.

### Transport

- `pp_shop_transports`
  - koszt, status, limity, mapowanie Apilo
- `pp_shop_transport_payment_methods`
  - relacja transport <-> platnosc (N:M)

Warstwa: `Domain\Transport\TransportRepository`.

### Statusy zamowien

- `pp_shop_statuses`
  - statusy predefiniowane, kolor, mapowanie Apilo

Warstwa: `Domain\ShopStatus\ShopStatusRepository`.

## Marketing i merch

### Promocje i kupony

- `pp_shop_promotion`
  - reguly promocji, daty aktywnosci, warunki i zakresy (JSON categories)
- `pp_shop_coupon`
  - kupony, licznik uzyc, ograniczenia

Warstwa: `Domain\Promotion\PromotionRepository`, `Domain\Coupon\CouponRepository`.

### Producenci

- `pp_shop_producer`
- `pp_shop_producer_lang`

Warstwa: `Domain\Producer\ProducerRepository`.

### Zestawy produktow

- `pp_shop_product_sets`
- `pp_shop_product_sets_products`

Warstwa: `Domain\ProductSet\ProductSetRepository`.

### Cechy i wartosci

- `pp_shop_attributes`
- `pp_shop_attributes_langs`
- `pp_shop_attributes_values`
- `pp_shop_attributes_values_langs`

Warstwa: `Domain\Attribute\AttributeRepository`.

## CMS i frontend content

### Artykuly

- `pp_articles`
- `pp_articles_langs`
- `pp_articles_pages`
- `pp_articles_images`
- `pp_articles_files`

Warstwa: `Domain\Article\ArticleRepository`.

### Strony i layouty

- `pp_pages`
- `pp_layouts`
- `pp_layouts_pages`
- `pp_layouts_categories`

Warstwa: `Domain\Pages\PagesRepository`, `Domain\Layouts\LayoutsRepository`.

### Banery i kontenery statyczne

- `pp_banners`
- `pp_banners_langs`
- `pp_scontainers`
- `pp_scontainers_langs`

Warstwa: `Domain\Banner\BannerRepository`, `Domain\Scontainers\ScontainersRepository`.

## Ustawienia i system

### Ustawienia aplikacji

- `pp_settings`
  - klucze globalne (w tym `api_key` dla REST API)
- `pp_shop_apilo_settings`
- `pp_shop_shoppro_settings`

Warstwa: `Domain\Settings\SettingsRepository`, `Domain\Integrations\IntegrationsRepository`.

### Jezyki i tlumaczenia

- `pp_langs`
- `pp_langs_translations`

Warstwa: `Domain\Languages\LanguagesRepository`.

### Uzytkownicy admina

- `pp_users`
  - login, hash hasla, status
  - pola 2FA (`twofa_*`)

Warstwa: `Domain\User\UserRepository`.

## Routing i URL mapping

- `pp_routes`
  - regex `pattern` -> `destination` query string
  - obsluguje trasy encji oraz trasy systemowe
  - cache Redis: `pp_routes:all`

Runtime wykorzystanie:
- `index.php`
- `Shared\Helpers\Helpers::htacces()`
- repozytoria encji generujace/odswiezajace trasy.

## Kolejka cron

- `pp_cron_jobs`
  - status processing pipeline (`pending`, `processing`, `completed`, `failed`, `cancelled`)
  - retry/backoff: `attempts`, `max_attempts`, `scheduled_at`
  - indeksy:
    - `(status, priority, scheduled_at)`
    - `(job_type)`
    - `(status)`
- `pp_cron_schedules`
  - harmonogramy okresowe (`interval_seconds`, `next_run_at`)
  - indeks `(enabled, next_run_at)`

Warstwa: `Domain\CronJob\CronJobRepository`, `Domain\CronJob\CronJobProcessor`.

## Najwazniejsze relacje (FK logiczne)

- Produkt glowny -> wariant: `pp_shop_products.parent_id -> pp_shop_products.id`
- Produkt -> tlumaczenia: `pp_shop_products_langs.product_id -> pp_shop_products.id`
- Produkt -> kategoria: `pp_shop_products_categories.product_id -> pp_shop_products.id`
- Kategoria -> tlumaczenia: `pp_shop_categories_langs.category_id -> pp_shop_categories.id`
- Zamowienie -> klient: `pp_shop_orders.client_id -> pp_shop_clients.id` (opcjonalne)
- Transport <-> platnosc: `pp_shop_transport_payment_methods`
- Cecha -> wartosci -> warianty: `attributes -> values -> shop_products_attributes`
- Producent -> tlumaczenia: `pp_shop_producer_lang.producer_id -> pp_shop_producer.id`
- Kontener -> tlumaczenia: `pp_scontainers_langs.container_id -> pp_scontainers.id`

## Uwaga operacyjna

Ten dokument jest skrotem architektonicznym.
Przy zmianach SQL/migracji zawsze aktualizuj rownolegle:
1. `docs/DATABASE_STRUCTURE.md` (detal techniczny)
2. `.paul/docs/DB_SCHEMA.md` (mapa domenowa i impact runtime)
