Files
orderPRO/.paul/phases/45-shoppro-status-push/45-01-SUMMARY.md
Jacek Pyziak 957fddaf84 feat(v1.7): orderPRO -> shopPRO status push sync
Implement bidirectional status sync for shopPRO integrations.
When direction is set to orderpro_to_shoppro, cron pushes manual
status changes to shopPRO via PUT API with reverse status mapping.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:54:57 +01:00

5.3 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
45-shoppro-status-push 01 integration
shoppro
status-sync
cron
curl-put
api
phase provides
shoppro-integrations ShopproApiClient, ShopproIntegrationsRepository, order_status_mappings, integration_order_sync_state
Bidirectional status sync between orderPRO and shopPRO
ShopproApiClient::updateOrderStatus() PUT method
Reverse status mapping (orderpro -> shoppro)
added patterns
reverse-status-mapping
cursor-based-push-sync
created modified
database/migrations/20260327_000071_add_last_status_pushed_at_to_sync_state.sql
src/Modules/Settings/ShopproApiClient.php
src/Modules/Settings/ShopproStatusSyncService.php
src/Modules/Settings/ShopproOrderSyncStateRepository.php
src/Modules/Cron/CronHandlerFactory.php
Refactor: wydzielenie executeRequest() z requestJson() dla reuse GET/PUT
Push only change_source=manual to prevent sync loops
Fallback 24h when last_status_pushed_at is null
Reverse mapping: orderpro_status_code -> shoppro_status_code (first match wins)
Cursor-based push: last_status_pushed_at tracks sync progress per integration
15min 2026-03-27T00:00:00Z 2026-03-27T00:15:00Z

Phase 45 Plan 01: ShopPRO Status Push Summary

Implementacja synchronizacji statusow zamowien orderPRO -> shopPRO przez cron z reverse mapping i PUT API

Performance

Metric Value
Duration ~15min
Tasks 3 completed
Files modified 7

Acceptance Criteria Results

Criterion Status Notes
AC-1: API Client obsluguje PUT change_status Pass updateOrderStatus() wysyla PUT z JSON body {status_id, send_email}
AC-2: Push kierunek dziala w cron sync Pass syncPushDirection() query manual changes, reverse map, API call, cursor update
AC-3: Brak mapowania nie blokuje synca Pass Brak mapowania = $skipped++, kontynuacja petli

Accomplishments

  • ShopproApiClient::updateOrderStatus() — metoda PUT do /api.php?endpoint=orders&action=change_status
  • ShopproStatusSyncService::syncPushDirection() — pelna logika push: reverse mapping, query order_status_history (tylko change_source=manual), wywolanie API, aktualizacja kursora
  • Refactor ShopproApiClient — wydzielenie executeRequest() z requestJson() dla reuse GET/PUT (eliminacja duplikacji SSL/curl logic)
  • Kursor last_status_pushed_at w integration_order_sync_state z defensywnym sprawdzaniem istnienia kolumny

Files Created/Modified

File Change Purpose
database/migrations/20260327_000071_*.sql Created Migracja: kolumna last_status_pushed_at
src/Modules/Settings/ShopproApiClient.php Modified Nowa metoda updateOrderStatus() + refactor na executeRequest()
src/Modules/Settings/ShopproStatusSyncService.php Modified Implementacja push direction z reverse mapping
src/Modules/Settings/ShopproOrderSyncStateRepository.php Modified Metody getLastStatusPushedAt(), updateLastStatusPushedAt()
src/Modules/Cron/CronHandlerFactory.php Modified Nowe zaleznosci dla ShopproStatusSyncService, reuse instancji repo
DOCS/DB_SCHEMA.md Modified Dokumentacja kolumny last_status_pushed_at
DOCS/ARCHITECTURE.md Modified Opis push direction i nowej metody API
DOCS/TECH_CHANGELOG.md Modified Wpis chronologiczny

Decisions Made

Decision Rationale Impact
Refactor requestJson() na executeRequest() Eliminacja duplikacji SSL/curl logic miedzy GET i PUT Latwiejsze dodawanie kolejnych metod HTTP
Push tylko change_source=manual Zapobieganie petli synchronizacji (import->push->import) Bezpieczna dwukierunkowa synchronizacja
Fallback 24h dla null cursor Przy pierwszym uruchomieniu nie pushowac calej historii Ograniczenie zakresu pierwszego synca
send_email=false w push Sync nie powinien generowac maili do klientow Brak niechcianych powiadomien

Deviations from Plan

Summary

Type Count Impact
Auto-fixed 1 Minimal

Total impact: Essential refactor, no scope creep

Auto-fixed Issues

1. Refactor: duplikacja curl logic

  • Found during: Task 1
  • Issue: Plan sugerowal zduplikowanie SSL opts lub wydzielenie buildCurlHandle(). Duplikacja bylaby nieoptymalna.
  • Fix: Wydzielono executeRequest() z pelna logika curl (GET/PUT), requestJson() i requestJsonPut() sa teraz thin wrappers.
  • Files: ShopproApiClient.php
  • Verification: php -l pass

Deferred Items

None

Issues Encountered

None

Next Phase Readiness

Ready:

  • Push direction w pelni funkcjonalny — po uruchomieniu migracji i restarcie crona, statusy beda synchronizowane
  • Istniejace mapowania statusow (skonfigurowane w UI) beda uzywane w obu kierunkach

Concerns:

  • Migracja 000071 musi byc uruchomiona na serwerze produkcyjnym
  • Nalezy zweryfikowac mapowania statusow w konfiguracji integracji shopPRO (czy pokrywaja wszystkie uzywane statusy)

Blockers: None


Phase: 45-shoppro-status-push, Plan: 01 Completed: 2026-03-27