Project Overview
What is Logidav?
Logidav is the logistics ERP and middleware that manages the complete order lifecycle for the group's brands (Menzzo, etc.). It acts as the central hub between the e-commerce storefront, internal systems, marketplaces, and carriers — importing sales, managing stock, generating shipments, processing refunds, and synchronizing product data across all channels.
System connection map
Responsibilities
| Domain | What Logidav does |
|---|---|
| Sales Import | Fetches orders from Magento and marketplaces, normalizes them, persists to DB |
| Stock Management | Tracks quantities, mutates stock on import and shipment, syncs across channels |
| Shipments | Generates carrier labels, tracks parcels, sends notifications |
| SAV / Refunds | Processes returns, handles partial and full refunds |
| Product Sync | Pushes product data, prices, and stock levels to marketplaces |
| Queue Orchestration | Manages async task execution via a SQL-backed + RabbitMQ queue system |
Tech stack
| Component | Technology |
|---|---|
| Framework | Symfony 3.3 (PHP 7.3) |
| ORM | Doctrine |
| Queues | SQL-backed queue tables + RabbitMQ |
| Testing | PHPUnit |
| Static Analysis | PHPStan |
| Code Style | PHP-CS-Fixer (PSR-2/PSR-12) |
Execution model
Logidav runs primarily through cronjobs on a dedicated production server. Each cronjob executes a Symfony console command that:
- Reads data from Magento, a marketplace, or another external source
- Normalizes and transforms the data
- Persists changes via Doctrine
- Triggers side effects (stock mutations, notifications, queue entries)
Queues complement cronjobs for asynchronous processing. Where a cronjob runs on a fixed schedule, a queue entry is processed as soon as a worker picks it up. This is used for tasks that need near-real-time execution or that are spawned dynamically by other processes.
# Run the queue processor
php bin/console meduse:queue:processor --action=runQueues
:::info How cronjobs and queues work together A cronjob might import 500 orders from Magento and enqueue a stock-check task for each one. The queue processor then handles each stock-check independently and at its own pace. This keeps the import fast while ensuring every follow-up task is completed. :::
Key numbers
| Metric | Value |
|---|---|
| Active cron entries | 164 |
| Unique Symfony commands | 115 |
| Critical-risk commands | 46 |
| High-risk commands | 40 |
:::warning Critical commands The 46 critical-risk commands handle sales, payments, and stock. Changes to these commands require extra review and testing. See the Cronjob Reference for the full list. :::