Files
orderPRO/.paul/phases/02-bug-fixes/02-02-SUMMARY.md
Jacek Pyziak 87203c4321 fix(02-bug-fixes): fix 3 known bugs from CONCERNS.md
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>
2026-03-13 00:26:07 +01:00

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
allegro
status-sync
cursor
migration
phase provides
02-bug-fixes Plan 02-01 (dead code fix in AllegroShipmentService)
Kolumna orders.last_status_checked_at z indeksem (source, source_updated_at)
Kursor kursorowy w findOrdersNeedingStatusSync()
Zapis timestampu po sukcesie importu (markOrderStatusChecked)
cron-status-sync, allegro-order-import
added patterns
cursor-based-sync
timestamp-marker
created modified
database/migrations/20260312_000047_add_last_status_checked_at_to_orders.sql
src/Modules/Settings/AllegroStatusSyncService.php
Indeks kompozytowy (source, source_updated_at) zamiast single-column (last_status_checked_at) — code review wykazał że single-column jest bezużyteczny dla zapytania
markOrderStatusChecked() ciche Throwable — nie przerywać pętli sync z powodu błędu logu
Cursor pattern: last_status_checked_at NULL OR source_updated_at > last_status_checked_at
~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 filtrem source = ?
  • 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_at gotowy 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