Skip to content

Atraxion Middleware

A Symfony 8.0 (PHP 8.4+) middleware application that sits between Odoo (ERP) and a webshop, providing intelligent data synchronization with smart change detection.

Problem Statement

Odoo's API sends complete records on every update, making it impossible for the webshop to know what changed. This middleware solves four critical problems:

Problem Solution
Full data on updates Odoo sends complete records; middleware computes field-level diffs and exposes only changedFields
Partner hierarchy Preserves Odoo's hierarchy (Main > Billing > Delivery > Contacts) with self-referencing relationships
Stock performance Efficient storage and querying for 2800+ products using bulk upserts
Price update explosion Extracts prices into a separate table; only flags items where the price actually changed (vs 128k false positives)

Architecture Overview

Odoo (ERP) ──POST──> Middleware ──GET──> Webshop
                          |
                        MySQL
                     (state + diffs)

Inbound flow (Odoo -> Middleware): Odoo pushes full records via POST endpoints. The middleware stores the data, computes field-level diffs against the previous version, extracts prices and purchase orders into separate tables, and marks records as pending.

Outbound flow (Middleware -> Webshop): The webshop polls GET endpoints to retrieve only records that have changed, including a changedFields array describing exactly which fields were modified. After processing, the webshop acknowledges each record via DELETE or ACK endpoints.

Reverse sync (Middleware -> Odoo): Sale orders created from the webshop side are queued in the OutboundQueue and asynchronously synced back to Odoo via XML-RPC using Symfony Messenger.

Tech stack:

  • PHP 8.4+ with Symfony 8.0 (MicroKernel)
  • MySQL 8.0 (Doctrine ORM with attribute-based mapping)
  • Symfony Messenger with Doctrine transport (async queues)
  • Twig for admin templates
  • Nelmio ApiDocBundle for OpenAPI/Swagger documentation