Files
orderPRO/.paul/phases/46-allegro-status-push/46-01-SUMMARY.md
2026-03-28 15:04:35 +01:00

133 lines
6.0 KiB
Markdown

---
phase: 46-allegro-status-push
plan: 01
subsystem: api
tags: [allegro, status-sync, cron, mappings]
requires:
- phase: 45-shoppro-status-push
provides: orderPRO to external marketplace status push pattern
provides:
- Allegro status push from orderPRO manual status changes
- Active orderPRO_to_allegro direction in integration settings
- Unit coverage for core push scenarios
affects: [settings, cron, integrations]
tech-stack:
added: []
patterns: [reverse status mapping, push cursor tracking, api retry on 401]
key-files:
created:
- .paul/phases/46-allegro-status-push/46-01-SUMMARY.md
- tests/Unit/AllegroStatusSyncServiceTest.php
modified:
- src/Modules/Settings/AllegroStatusSyncService.php
- src/Modules/Settings/AllegroApiClient.php
- src/Modules/Settings/AllegroStatusMappingRepository.php
- src/Modules/Settings/AllegroOrderSyncStateRepository.php
- src/Modules/Cron/CronHandlerFactory.php
- resources/views/settings/allegro.php
- resources/lang/pl.php
- DOCS/ARCHITECTURE.md
- DOCS/TECH_CHANGELOG.md
key-decisions:
- "Push only manual status changes (change_source=manual) to avoid sync loops."
- "Reuse integration_order_sync_state with last_status_pushed_at cursor for incremental push."
- "Retry once after token refresh on ALLEGRO_HTTP_401."
patterns-established:
- "First-match-wins reverse mapping: orderpro_status_code -> allegro_status_code."
- "Per-order push result aggregation: pushed, skipped, failed."
duration: ~4h
started: 2026-03-28T12:20:50+01:00
completed: 2026-03-28T13:20:00+01:00
---
# Phase 46 Plan 01: Allegro Status Push Summary
orderPRO to Allegro status synchronization was implemented end-to-end and enabled in UI, with tests and documentation updates.
## Performance
| Metric | Value |
|--------|-------|
| Duration | ~4h |
| Started | 2026-03-28T12:20:50+01:00 |
| Completed | 2026-03-28T13:20:00+01:00 |
| Tasks | 3 completed |
| Files modified | 10 |
## Acceptance Criteria Results
| Criterion | Status | Notes |
|-----------|--------|-------|
| AC-1: Cron pushes orderPRO manual status changes to Allegro | Pass | Implemented in AllegroStatusSyncService with API call, counters, and cursor updates. |
| AC-2: Missing mapping does not stop processing | Pass | Unmapped statuses are counted as skipped; batch continues. |
| AC-3: orderPRO -> Allegro direction active in UI | Pass | Disabled flag removed, option is selectable and persisted by existing settings flow. |
## Verification Results
| Command | Result |
|--------|--------|
| `php -l src/Modules/Settings/AllegroStatusSyncService.php` | PASS |
| `php -l src/Modules/Settings/AllegroApiClient.php` | PASS |
| `php -l src/Modules/Settings/AllegroStatusMappingRepository.php` | PASS |
| `php -l src/Modules/Settings/AllegroOrderSyncStateRepository.php` | PASS |
| `php -l src/Modules/Cron/CronHandlerFactory.php` | PASS |
| `php -l tests/Unit/AllegroStatusSyncServiceTest.php` | PASS |
| `C:/xampp/php/php.exe vendor/bin/phpunit --filter AllegroStatusSyncServiceTest --testdox` | PASS (4 tests, 39 assertions) |
| `sonar-scanner` | PASS (analysis successful; Quality Gate failed due existing/new issues tracked in DOCS/todo.md) |
## Accomplishments
- Implemented real push path `orderpro_to_allegro` in sync service.
- Added Allegro API fulfillment status update method and integrated it into cron flow.
- Added reverse status mapping and push cursor support.
- Enabled the direction in Allegro settings UI and adjusted PL hint text.
- Added unit tests for success, skipped, failure, and 401 retry behavior.
- Updated architecture and technical changelog docs.
## Files Created/Modified
| File | Change | Purpose |
|------|--------|---------|
| `src/Modules/Settings/AllegroStatusSyncService.php` | Modified | Added orderPRO->Allegro push execution and result aggregation. |
| `src/Modules/Settings/AllegroApiClient.php` | Modified | Added PUT fulfillment status endpoint wrapper. |
| `src/Modules/Settings/AllegroStatusMappingRepository.php` | Modified | Added reverse map builder for push direction. |
| `src/Modules/Settings/AllegroOrderSyncStateRepository.php` | Modified | Added read/write support for `last_status_pushed_at`. |
| `src/Modules/Cron/CronHandlerFactory.php` | Modified | Injected dependencies for new push logic and shared sync state repository. |
| `resources/views/settings/allegro.php` | Modified | Enabled orderPRO->Allegro direction option. |
| `resources/lang/pl.php` | Modified | Updated direction hint text (no "soon" wording). |
| `tests/Unit/AllegroStatusSyncServiceTest.php` | Created | Added tests for key push flow behaviors. |
| `DOCS/ARCHITECTURE.md` | Modified | Documented active push direction and API client method. |
| `DOCS/TECH_CHANGELOG.md` | Modified | Logged technical change and rationale. |
## Deviations from Plan
| Type | Count | Impact |
|------|-------|--------|
| Scope additions | 1 | Low |
| Deferred | 1 | Low |
- Scope addition: `src/Modules/Cron/CronHandlerFactory.php` was updated to wire dependencies for the new service behavior (not listed as a direct plan file, but required to activate runtime flow).
- Plan file listed `src/Modules/Settings/AllegroIntegrationController.php` as a target, but no code change was needed there because existing save flow already persisted `allegro_status_sync_direction`.
- Deferred: Sonar Quality Gate remediation intentionally postponed; full issue list captured in `DOCS/todo.md`.
## Key Patterns and Decisions
| Decision | Rationale | Impact |
|----------|-----------|--------|
| Manual-only push (`change_source=manual`) | Prevent import/sync feedback loops | Safe bidirectional architecture |
| Cursor-based push (`last_status_pushed_at`) | Incremental processing and bounded batches | Better cron performance and idempotence |
| Retry once on 401 after token refresh | Recover from expired access token | Improved operational resilience |
## Next Phase Readiness
Ready:
- v1.8 milestone scope delivered for phase 46.
- Operational status push path to Allegro can be validated in production cron logs.
Concerns:
- Sonar issues remain open and are tracked in `DOCS/todo.md`.
Blockers:
- None.