This commit is contained in:
2026-03-28 15:04:35 +01:00
parent c1d0d7762f
commit 2ab0d0e90e
44 changed files with 3027 additions and 493 deletions

View File

@@ -1,5 +1,67 @@
# Tech Changelog
## 2026-03-28 (Public HTTPS cron endpoint)
- Dodano publiczny endpoint triggera crona:
- `GET /cron?token=<CRON_PUBLIC_TOKEN>`
- dodatkowo kompatybilny wariant sciezki: `GET /cron/token=<CRON_PUBLIC_TOKEN>`.
- Token jest walidowany przez `hash_equals` i pochodzi z nowej zmiennej srodowiskowej `CRON_PUBLIC_TOKEN`.
- Endpoint uruchamia `CronRunner` z limitem z ustawienia `cron_web_limit`.
- `Application::maybeRunCronOnWeb(...)` ignoruje teraz sciezki `/cron` i `/cron/*`, aby uniknac podwojnego triggera.
- Zaktualizowano `.env.example` o `CRON_PUBLIC_TOKEN`.
## 2026-03-28 (Hotfix - Apaczka pickup day fallback)
- `ApaczkaShipmentService`:
- dodano automatyczny retry `order_send` dla bledu API `Pickup not available for selected day`,
- rozszerzono detekcje bledu o wariant komunikatu: `We're sorry, you can't place an order today. Change its date to another working day.`,
- fallback dotyczy tylko `pickup.type=COURIER`,
- kazdy retry przesuwa `pickup.date` na kolejny dzien roboczy (`normalizeCourierPickupDate`) i ponawia wysylke,
- limit fallbacku: do 7 kolejnych dni, potem zwracany jest oryginalny blad API.
## 2026-03-28 (Phase 49 - Automation History Tab, Plan 01 - rozszerzenie akcji)
- Rozszerzono automatyzacje o nowy typ akcji `update_order_status` (UI: `Zmiana statusu zamowienia`).
- `AutomationController`:
- `ALLOWED_ACTION_TYPES` zawiera `update_order_status`,
- waliduje i parsuje `order_status_code` tylko do aktywnych statusow z `order_statuses`.
- `AutomationRepository`:
- nowa metoda `listActiveOrderStatuses()` zwracajaca aktywne statusy (`code`, `name`) sortowane rosnaco po nazwie.
- `resources/views/automation/form.php` i `public/assets/js/modules/automation-form.js`:
- nowa opcja akcji z wyborem docelowego statusu zamowienia.
- `AutomationService`:
- nowy handler `handleUpdateOrderStatus(...)`,
- wykonanie zmiany przez `OrdersRepository::updateOrderStatus(...)` z aktorem systemowym `Automatyzacja: <nazwa reguly>`,
- fallback log aktywnosci `automation_order_status_failed` gdy zmiana nie powiedzie sie.
## 2026-03-28 (Phase 49 - Automation History Tab, Plan 01)
- `Ustawienia > Zadania automatyczne` (`/settings/automation`) rozdzielone na 2 taby:
- `Ustawienia` - obecne zarzadzanie regulami,
- `Historia` - log wykonan automatyzacji z filtrowaniem i paginacja.
- Dodano migracje `20260328_000072_create_automation_execution_logs_table.sql`:
- nowa tabela `automation_execution_logs` (event, regula, order, status, wynik, context, timestamp),
- indeksy pod filtry historii,
- seed harmonogramu crona `automation_history_cleanup` (co 24h).
- Nowe klasy backend:
- `AutomationExecutionLogRepository` - zapis/listowanie/paginacja/licznik historii + purge retencji,
- `AutomationHistoryCleanupHandler` - usuwanie wpisow starszych niz konfigurowalna liczba dni (domyslnie 30).
- `AutomationService::trigger(...)` zapisuje wpis historii per wykonana regula:
- `success` po poprawnym wykonaniu akcji,
- `failed` przy wyjatku w wykonaniu reguly.
- `AutomationController::index(...)` obsluguje filtry historii (`history_*`) i paginacje (`history_page`), zachowujac kompatybilnosc listy regul.
- UI historii wykorzystuje kompaktowy formularz filtrow i paginacje z zachowaniem aktywnych parametrow.
## 2026-03-28 (Phase 48 - Email Template Shipment Variables, Plan 01)
- Email templates (`/settings/email-templates`):
- dodano zmienne `{{przesylka.numer}}` i `{{przesylka.link_sledzenia}}` w `EmailTemplateController::VARIABLE_GROUPS`,
- rozszerzono `SAMPLE_DATA` do preview o przykladowy numer i URL sledzenia.
- `VariableResolver`:
- otrzymuje zaleznosc `ShipmentPackageRepository`,
- pobiera najnowsza paczke (`findLatestByOrderId(order_id)`),
- mapuje `przesylka.numer` i `przesylka.link_sledzenia`,
- link jest liczony przez `DeliveryStatus::trackingUrl(provider, tracking_number, carrier_id)`.
- DI:
- `routes/web.php` i `CronHandlerFactory` przekazuja `ShipmentPackageRepository` do `VariableResolver`.
- Zachowanie brzegowe:
- brak paczki lub brak numeru trackingowego nie psuje renderu - zmienne przesylki zwracaja pusty string.
## 2026-03-28 (Phase 47 - Shipment Creation Automation, Plan 01)
- Automatyzacja:
- dodano nowe zdarzenie `shipment.created` (UI: `Utworzenie przesylki`),
@@ -739,3 +801,4 @@