Add Orders and Order Status repositories with pagination and management features

- Implemented OrdersRepository for handling order data with pagination, filtering, and sorting capabilities.
- Added methods for retrieving order status options, quick stats, and detailed order information.
- Created OrderStatusRepository for managing order status groups and statuses, including CRUD operations and sorting.
- Introduced a bootstrap file for test environment setup and autoloading.
This commit is contained in:
2026-03-03 01:32:28 +01:00
parent d1576bc4ab
commit c489891d15
106 changed files with 11669 additions and 5091 deletions

View File

@@ -1,119 +1,79 @@
# Struktura bazy danych (orderPRO)
# DB Schema
## Cel pliku
- Ten dokument opisuje aktualny schemat bazy danych na podstawie migracji w `database/migrations`.
- Aktualizuj ten plik przy każdej zmianie schematu (nowa tabela, kolumna, indeks, klucz obcy).
## Status
- Projekt po resecie do trybu `users-only`.
- Aktualizuj ten plik przy kazdej zmianie migracji/schematu.
- 2026-03-02: Przywrocenie UI `Ustawienia > Baza danych` nie wprowadza zmian w schemacie.
- 2026-03-02: Dodano tabele statusow (grupy + statusy) dla nowej zakladki `Ustawienia > Statusy`.
- 2026-03-02: Przygotowano draft generycznego schematu zamowien (bez aktywnej migracji) w `database/drafts/20260302_orders_schema_v1.sql`.
- 2026-03-03: Wdrozono generyczne tabele zamowien na bazie docelowej skryptem `bin/deploy_and_seed_orders.php` (bez migratora SQL).
- 2026-03-03: Dodano UI `Zamowienia > Lista zamowien` - bez zmian schematu (wykorzystuje istniejace tabele domeny zamowien).
- 2026-03-03: Dodano UI `Zamowienia > Szczegoly zamowienia` (`GET /orders/{id}`) - bez zmian schematu.
## Tabele i przeznaczenie
## Tabele
### `users`
- Uzytkownicy panelu.
- Klucz unikalny: `email`.
### `products`
- Glowna tabela produktow lokalnych.
- Najwazniejsze pola: `type`, `sku`, `ean`, `status`, `promoted`, `vat`, `weight`, `price_*`, `quantity`.
- Pola shopPRO: `new_to_date`, `additional_message`, `additional_message_required`, `additional_message_text`.
- Dodatkowe: `producer_id`, `producer_name`, `product_unit_id`, `custom_fields_json`.
- Soft delete: `deleted_at`.
### `order_status_groups`
- Grupy statusow zamowien zarzadzane z UI.
- Kolumny:
- `id` (PK, int unsigned, AI),
- `name` (varchar 120),
- `code` (varchar 64, UNIQUE),
- `color_hex` (char 7, domyslnie `#64748b`),
- `sort_order` (int, domyslnie `0`),
- `is_active` (tinyint(1), domyslnie `1`),
- `created_at`, `updated_at`.
- Indeksy:
- `order_status_groups_code_unique` (UNIQUE: `code`),
- `order_status_groups_sort_order_idx` (`sort_order`).
### `product_translations`
- Globalne tresci produktu per jezyk (`lang`).
- Najwazniejsze pola: `name`, `short_description`, `description`, SEO, `security_information`.
- Unikalnosc: `(product_id, lang)`.
### `order_statuses`
- Statusy przypisane do grup statusow.
- Kolumny:
- `id` (PK, int unsigned, AI),
- `group_id` (FK -> `order_status_groups.id`),
- `name` (varchar 120),
- `code` (varchar 64, UNIQUE),
- `sort_order` (int, domyslnie `0`),
- `is_active` (tinyint(1), domyslnie `1`),
- `created_at`, `updated_at`.
- Indeksy:
- `order_statuses_code_unique` (UNIQUE: `code`),
- `order_statuses_group_sort_idx` (`group_id`, `sort_order`, `id`).
- Klucze obce:
- `order_statuses_group_fk`: `group_id` -> `order_status_groups.id` (`ON DELETE CASCADE`, `ON UPDATE CASCADE`).
### `product_integration_translations`
- Nadpisania tresci produktu per integracja shopPRO.
- Pola: `name`, `short_description`, `description` (NULL = fallback do `product_translations`).
- Unikalnosc: `(product_id, integration_id)`.
### Domena zamowien (generyczna)
- Wdrozone tabele:
- `orders`
- `order_addresses`
- `order_items`
- `order_payments`
- `order_shipments`
- `order_documents`
- `order_notes`
- `order_status_history`
- `order_tags_dict`
- `order_tag_links`
- `integration_order_sync_state`
- Charakterystyka:
- schema neutralna wzgledem dostawcy API (pola `source_*`, `external_*`),
- kolekcje zamowienia rozdzielone na osobne tabele 1:N,
- `payload_json` dostepne dla diagnostyki/replay,
- historia zmian statusow utrzymywana w `order_status_history`.
### `product_images`
- Obrazy produktu (`storage_path`, `is_main`, `sort_order`).
## Zasady aktualizacji
- Po kazdej migracji dopisz:
- nowe/zmienione tabele i kolumny,
- indeksy i klucze obce,
- wplyw na dane i kompatybilnosc wsteczna.
### `product_categories`
- Relacja M:N produkt-kategoria (lokalna).
### `attributes`
- Definicje atrybutow wariantow.
### `attribute_translations`
- Tlumaczenia nazw atrybutow per jezyk.
### `attribute_values`
- Wartosci atrybutow (np. kolor, rozmiar), z opcjonalnym `impact_on_price`.
### `attribute_value_translations`
- Tlumaczenia wartosci atrybutow per jezyk.
### `product_variants`
- Warianty produktu.
- Najwazniejsze pola: `permutation_hash`, `sku`, `ean`, `status`, `price_*`, `weight`, `stock_0_buy`.
- Unikalnosc: `sku`, `(product_id, permutation_hash)`.
### `product_variant_attributes`
- Relacja wariant -> (atrybut, wartosc).
- Klucz glowny: `(variant_id, attribute_id)`.
### `product_change_log`
- Log zmian produktow (audyt JSON: `before_json`, `after_json`).
### `sales_channels`
- Slownik kanalow sprzedazy (`shoppro`, `allegro`, `erli`, ...).
### `product_channel_map`
- Mapowanie lokalnego produktu do kanalu/integracji i ID zewnetrznych.
- Najwazniejsze pola: `integration_id`, `external_product_id`, `external_variant_id`, `sync_state`, `link_type`, `link_status`, `confidence`.
- Pola audytowe powiazania: `linked_at`, `linked_by_user_id`, `unlinked_at`, `unlinked_by_user_id`, `sync_meta_json`.
### `channel_offers`
- Cache ofert zewnetrznych dla integracji.
- Najwazniejsze pola: `external_product_id`, `external_variant_id`, `external_offer_id`, `name` (tytul oferty), `sku`, `ean`, `offer_status`, `last_seen_at`, `payload_json`.
- Unikalnosc: `(integration_id, external_product_id, external_variant_id)`.
### `product_link_events`
- Historia zdarzen na powiazaniach (`product_channel_map`).
### `integrations`
- Konfiguracja instancji integracji (obecnie shopPRO).
- Najwazniejsze pola: `type`, `name`, `base_url`, `api_key_encrypted`, `timeout_seconds`, `is_active`.
### `integration_test_logs`
- Historia testow polaczen integracji.
### `cron_jobs`
- Kolejka jobow crona.
### `cron_schedules`
- Harmonogramy okresowych jobow.
- Aktualnie zawiera m.in.:
- `product_links_health_check`
- `shoppro_offer_titles_refresh` (odswiezanie tytulow ofert; domyslnie co 30 dni)
### `product_link_alerts`
- Alerty zdrowia powiazan produktu.
### `app_settings`
- Ustawienia aplikacyjne key-value.
- Przykładowe klucze: `cron_run_on_web`, `cron_web_limit`, `gs1_*`, `products_sku_format`.
## Relacje (skrot)
- `product_translations.product_id -> products.id`
- `product_integration_translations.product_id -> products.id`
- `product_integration_translations.integration_id -> integrations.id`
- `product_images.product_id -> products.id`
- `product_variants.product_id -> products.id`
- `product_variant_attributes.variant_id -> product_variants.id`
- `product_variant_attributes.attribute_id -> attributes.id`
- `product_variant_attributes.value_id -> attribute_values.id`
- `product_channel_map.product_id -> products.id`
- `product_channel_map.channel_id -> sales_channels.id`
- `product_channel_map.integration_id -> integrations.id`
- `channel_offers.integration_id -> integrations.id`
- `channel_offers.channel_id -> sales_channels.id`
- `product_link_events.product_channel_map_id -> product_channel_map.id`
- `product_link_alerts.product_channel_map_id -> product_channel_map.id`
## Jak utrzymywac dokument
1. Po dodaniu migracji zaktualizuj sekcje tabel/kolumn/relacji.
2. Gdy dodajesz nowe klucze do `app_settings`, dopisz je tu.
3. Przy zmianach harmonogramu crona zaktualizuj liste jobow w `cron_schedules`.
## Drafty (nieaktywne)
- `database/drafts/20260302_orders_schema_v1.sql`:
- propozycja normalizacji domeny zamowien pod integracje zewnetrzne (`orders`, `order_items`, `order_status_history`, platnosci, wysylki, dokumenty, notatki, tagi, sync-state),
- plik nie jest odpalany przez obecny migrator (`database/migrations/*.sql`).
- `bin/deploy_and_seed_orders.php`:
- techniczny skrypt wdrozeniowy, ktory aplikuje schema z draftu i opcjonalnie seeduje dane testowe.