Files
orderPRO/DOCS/ARCHITECTURE.md
Jacek Pyziak c489891d15 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.
2026-03-03 01:32:28 +01:00

7.0 KiB

Architecture

Status

  • Projekt po resecie do trybu users-only.

Moduly aktywne

  • App\Modules\Auth
  • App\Modules\Orders
  • App\Modules\Users
  • App\Modules\Settings

Routing

  • GET /login, POST /login, POST /logout
  • GET /settings/users, POST /settings/users
  • GET /orders (redirect do /orders/list)
  • GET /orders/list
  • GET /orders/{id}
  • GET /users (redirect do /settings/users)
  • POST /users (compat route)
  • GET /settings (redirect do /settings/users)
  • GET /settings/database
  • POST /settings/database/migrate
  • GET /settings/statuses
  • POST /settings/status-groups
  • POST /settings/status-groups/update
  • POST /settings/status-groups/delete
  • POST /settings/status-groups/reorder
  • POST /settings/statuses/create
  • POST /settings/statuses/update
  • POST /settings/statuses/delete
  • POST /settings/statuses/reorder
  • GET /health, GET / (redirect)

Korekta logowania

  • AuthController::showLogin(Request): Response:
    • dla zalogowanego usera redirect na /settings/users (zamiast nieistniejacego /dashboard).
  • AuthController::login(Request): Response:
    • po poprawnym logowaniu redirect na /settings/users.

Kluczowe klasy

  • App\Core\Application
  • App\Modules\Auth\AuthController
  • App\Modules\Auth\AuthService
  • App\Modules\Orders\OrdersController
  • App\Modules\Orders\OrdersRepository
  • App\Modules\Settings\SettingsController
  • App\Modules\Settings\OrderStatusRepository
  • App\Modules\Users\UsersController
  • App\Modules\Users\UserRepository

Przeplyw Zamowienia > Lista zamowien

  • GET /orders/list:
    • OrdersController::index(Request): Response
    • pobiera dane listy przez OrdersRepository::paginate(...),
    • pobiera slowniki filtrow (sourceOptions(), statusOptions()), statystyki (quickStats()), agregaty statusow (statusCounts()) i konfiguracje grup/statusow (statusPanelConfig()),
    • buduje panel statusow z grupami i licznikami (buildStatusPanel(...)) z linkami filtrujacymi po statusie,
    • panel statusow i etykiety statusow sa zgodne z konfiguracja z Ustawienia > Statusy (z fallbackiem Pozostale),
    • renderuje podglad pozycji zamowienia (nazwa, miniatura, ilosc) na bazie order_items,
    • obsluguje modal podgladu zdjecia pozycji po kliknieciu miniatury,
    • normalizuje status techniczny na etykiete biznesowa (bez kodu statusu),
    • renderuje widok resources/views/orders/list.php i komponent tabeli resources/views/components/table-list.php.
  • GET /orders/{id}:
    • OrdersController::show(Request): Response
    • pobiera szczegoly przez OrdersRepository::findDetails(int $orderId), statystyke statusow przez statusCounts() oraz konfiguracje przez statusPanelConfig(),
    • buduje panel statusow z grupami i licznikami (buildStatusPanel(...)),
    • renderuje klikalne taby sekcji i przelaczanie paneli po stronie klienta (JS w orders/show.php),
    • renderuje widok resources/views/orders/show.php z sekcjami:
      • pozycje zamowienia,
      • szczegoly zamowienia,
      • platnosc i wysylka,
      • adresy (customer, invoice, delivery),
      • notatki i historia statusow.
  • Sidebar ma oddzielna grupe nawigacyjna:
    • Zamowienia -> Lista zamowien.

Skrypty techniczne (CLI)

  • bin/fix_status_codes.php
    • naprawa kodow grup/statusow (transliteracja PL -> ASCII, tryb --dry-run, opcja --use-remote).
  • bin/deploy_and_seed_orders.php
    • aplikuje generyczny schema zamowien z database/drafts/20260302_orders_schema_v1.sql,
    • seeduje dane testowe (--count, --append, --use-remote, --profile=default|realistic),
    • profil realistic utrzymuje spojne zaleznosci miedzy:
      • statusem zamowienia,
      • statusem i kwota platnosci,
      • obecnoscia wysylek i dokumentow,
      • historia przejsc statusow (deterministyczne sciezki zamiast losowych przeskokow).

Przeplyw Ustawienia > Statusy

  • GET /settings/statuses:
    • SettingsController::statuses(Request): Response
    • pobiera dane przez OrderStatusRepository::listGroups() i OrderStatusRepository::listStatuses(),
    • renderuje widok resources/views/settings/statuses.php.
  • POST /settings/status-groups:
    • SettingsController::createStatusGroup(Request): Response
    • waliduje CSRF i dane (name, color_hex, is_active),
    • code jest generowany automatycznie z name i nie jest edytowany z UI,
    • zapisuje przez OrderStatusRepository::createGroup(...).
  • POST /settings/status-groups/update:
    • SettingsController::updateStatusGroup(Request): Response
    • waliduje istnienie grupy i aktualizuje rekord przez updateGroup(...),
    • code pozostaje bez zmian (read-only po utworzeniu).
  • POST /settings/status-groups/delete:
    • SettingsController::deleteStatusGroup(Request): Response
    • usuwa grupe przez deleteGroup(...); statusy z tej grupy usuwane sa kaskadowo (FK).
  • POST /settings/status-groups/reorder:
    • SettingsController::reorderStatusGroups(Request): Response
    • zapisuje kolejnosc drag-and-drop grup przez OrderStatusRepository::reorderGroups(...),
    • endpoint jest wywolywany automatycznie po upuszczeniu elementu listy (auto-save).
  • POST /settings/statuses/create:
    • SettingsController::createStatus(Request): Response
    • waliduje grupe, pola statusu i zapisuje przez createStatus(...).
  • POST /settings/statuses/update:
    • SettingsController::updateStatus(Request): Response
    • waliduje dane i aktualizuje status przez updateStatus(...),
    • code pozostaje bez zmian (read-only po utworzeniu).
  • POST /settings/statuses/delete:
    • SettingsController::deleteStatus(Request): Response
    • usuwa status przez deleteStatus(...).
  • POST /settings/statuses/reorder:
    • SettingsController::reorderStatuses(Request): Response
    • zapisuje kolejnosc drag-and-drop statusow w ramach grupy przez OrderStatusRepository::reorderStatusesByGroup(...),
    • endpoint jest wywolywany automatycznie po upuszczeniu elementu listy (auto-save).

Nawigacja ustawien

  • Sidebar (resources/views/layouts/app.php) ma nowy podlink:
    • Statusy (/settings/statuses).

Przeplyw Ustawienia > Baza danych

  • GET /settings/database:
    • SettingsController::database(Request): Response
    • pobiera Migrator::status(), przekazuje statystyki i liste pending migracji do widoku resources/views/settings/database.php.
  • POST /settings/database/migrate:
    • SettingsController::migrate(Request): Response
    • waliduje CSRF,
    • uruchamia Migrator::runPending(),
    • zapisuje wynik do flash (settings_success / settings_error, settings_migrate_logs),
    • wykonuje redirect do GET /settings/database.

Zmiany nawigacji

  • Sidebar ma teraz grupe Ustawienia z podlinkami:
    • Uzytkownicy (/settings/users)
    • Baza danych (/settings/database)
  • UsersController::index(Request): Response ustawia:
    • activeMenu = settings
    • activeSettings = users
  • Usunieto wewnetrzny pasek settings-nav z widokow podstron ustawien.

Zasady aktualizacji

  • Przy kazdej zmianie dopisz:
    • nowe klasy i metody (sygnatury + odpowiedzialnosc),
    • zmiany przeplywu request -> controller -> repository,
    • kontrakty wejscia/wyjscia istotnych metod.