Skip to main content

Event System

Logidav uses Symfony's EventDispatcher for domain events. Events are defined in src/EventBundle/Events/.

Event Flow

Event Catalog

Sale Events

EventTriggerSide Effects
AfterSaleCreatedEventNew sale persistedQueue marketplace notifications, initialize sale log
AfterSaleUpdatedEventSale data changedSync status with Magento, recalculate totals
AfterSaleCanceledEventSale canceledRevert stock reservations, notify marketplace, update Magento
AfterSaleAddressUpdateEventShipping address changedUpdate carrier data, recalculate shipping

SaleProduct Events

EventTriggerSide Effects
AfterSaleProductCreatedEventNew line item addedReserve stock, calculate availability
AfterSaleProductUpdatedEventLine item data changedRecalculate totals, update shipping
AfterSaleProductCanceledEventLine item canceledRelease stock, adjust sale totals
AfterSaleProductShippedEventLine item shippedUpdate tracking, notify customer
AfterSaleProductDeliveredEventLine item deliveredUpdate sale status, trigger review request
AfterSaleProductReturnedEventLine item returnedProcess return, initiate refund

Shipping Events

EventTriggerSide Effects
AfterShipmentCreatedEventShipment record createdSend tracking to customer, notify marketplace
AfterShipmentUpdatedEventTracking data updatedSync tracking with carrier
AfterShipmentDeliveredEventDelivery confirmedUpdate sale product status
AfterTrackingUpdatedEventCarrier tracking changedSync with ShipmentTrackingSynchronizer
AfterRdvCreatedEventDelivery appointment setNotify customer, update carrier schedule

Product Events

EventTriggerSide Effects
AfterProductCreatedEventNew product in catalogSync to Magento, initialize stock
AfterProductUpdatedEventProduct data changedSync updates to Magento and Meduse
AfterProductStockChangedEventStock quantity mutatedLog to ProductQtyLog, update availability

Calculation Events

EventTriggerSide Effects
CalculateSaleProductShippingAmountEventShipping cost neededCalculate carrier-specific shipping amount

Event Subscriber Pattern

All event subscribers in Logidav follow the Symfony EventSubscriberInterface pattern:

class SaleEventSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
AfterSaleCreatedEvent::class => 'onSaleCreated',
AfterSaleCanceledEvent::class => 'onSaleCanceled',
];
}
}

:::warning Side effect ordering Subscribers execute in priority order. Be cautious when adding new subscribers to existing events, as order of execution may affect data consistency. :::

See also