Phase 02 plans 02-01, 02-02, 02-03: - fix(02-01): dead condition in AllegroShipmentService ZPL page size Both ternary branches returned 'A6'; ZPL now correctly returns 'ZPL' - fix(02-02): add last_status_checked_at cursor to AllegroStatusSyncService New migration adds orders.last_status_checked_at DATETIME NULL with composite index (source, source_updated_at). findOrdersNeedingStatusSync() filters by cursor; markOrderStatusChecked() records timestamp on success. - fix(02-03): replace AllegroOrderSyncStateRepository in ShopproOrdersSyncService New ShopproOrderSyncStateRepository (same table, correct class name). Application.php wires correct repository to correct service. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4.7 KiB
4.7 KiB
phase, plan, subsystem, tags, requires, provides, affects, tech-stack, key-files, key-decisions, patterns-established, duration, started, completed
| phase | plan | subsystem | tags | requires | provides | affects | tech-stack | key-files | key-decisions | patterns-established | duration | started | completed | |||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 02-bug-fixes | 02 | database, cron |
|
|
|
cron-status-sync, allegro-order-import |
|
|
|
|
~30min | 2026-03-13T00:00:00Z | 2026-03-13T00:00:00Z |
Phase 02 Plan 02: Kursor last_status_checked_at w AllegroStatusSyncService
Dodano kursor czasowy do sync statusów Allegro — zamówienia nie są re-importowane gdy status nie zmienił się.
Performance
| Metric | Value |
|---|---|
| Duration | ~30min |
| Started | 2026-03-13 |
| Completed | 2026-03-13 |
| Tasks | 2/2 completed |
| Files modified | 2 |
Acceptance Criteria Results
| Criterion | Status | Notes |
|---|---|---|
| AC-1: Zamówienia z aktualnym timestampem pomijane | Pass | source_updated_at > last_status_checked_at |
| AC-2: Zamówienia bez sprawdzenia uwzględniane | Pass | last_status_checked_at IS NULL |
| AC-3: Timestamp zapisywany po sukcesie | Pass | markOrderStatusChecked() w try, nie w catch |
| AC-4: Migracja bez destrukcji danych | Pass | NULL DEFAULT NULL — istniejące wiersze = NULL |
Accomplishments
- Migracja SQL dodaje kolumnę
orders.last_status_checked_at DATETIME NULL findOrdersNeedingStatusSync()filtruje tylko zamówienia gdzie status mógł się zmienićmarkOrderStatusChecked()aktualizuje timestamp po każdym sukcesie importu- Code review poprawił indeks: kompozytowy
(source, source_updated_at)zamiast bezużytecznego single-column
Files Created/Modified
| File | Change | Purpose |
|---|---|---|
database/migrations/20260312_000047_add_last_status_checked_at_to_orders.sql |
Created | Migracja: nowa kolumna + indeks kompozytowy |
src/Modules/Settings/AllegroStatusSyncService.php |
Modified | Kursor + markOrderStatusChecked() |
Decisions Made
| Decision | Rationale | Impact |
|---|---|---|
Indeks kompozytowy (source, source_updated_at) |
Code review: single-column na last_status_checked_at nieużywany przez zapytanie z source = ? |
Lepsza wydajność zapytania kursorowego |
markOrderStatusChecked() swallows Throwable |
Błąd zapisu timestampu nie może przerywać pętli synchronizacji | Degradacja graceful — zamówienie zostanie ponowione |
Deviations from Plan
Auto-fixed Issues
1. Indeks SQL — zmiana z single-column na kompozytowy
- Found during: Code review po implementacji
- Issue: Plan zakładał
ADD INDEX orders_status_check_idx (last_status_checked_at)— bezużyteczny dla zapytania z wiodącym filtremsource = ? - Fix: Zamieniony na
ADD INDEX orders_source_updated_idx (source, source_updated_at) - Files:
database/migrations/20260312_000047_add_last_status_checked_at_to_orders.sql - Verification: Logika zapytania potwierdza, że MySQL użyje indeksu z wiodącą kolumną
source
Deferred Items
- Duplikacja kodu
AllegroOrderSyncStateRepository/ShopproOrderSyncStateRepository(brak abstrakcji) — poza zakresem planu 02-03, do rozważenia w osobnym planie
Issues Encountered
None.
Skill Audit
| Skill | Status | Notes |
|---|---|---|
| /code-review | ✓ | Wywołany — wykazał błąd indeksu, naprawiony |
| sonar-scanner | ✓ | Uruchomiony — brak nowych issues w zmienionych plikach |
Next Phase Readiness
Ready:
- Kursor
last_status_checked_atgotowy po uruchomieniu migracji na bazie - Migracja idempotentna (nullable column, nie psuje istniejących danych)
Concerns:
- Migracja musi być uruchomiona ręcznie lub przez migrator przed pierwszym cron run
- AllegroStatusSyncService nadal ma problem wydajności — każde zamówienie = pełny re-import z API (oddzielny concern w CONCERNS.md)
Blockers: None
Phase: 02-bug-fixes, Plan: 02 Completed: 2026-03-13