Installation
composer require xlabs/ordertrackerbundle
Add to config/app.php under providers:
Xlabs\OrderTrackerBundle\OrderTrackerServiceProvider::class,
Publish the config:
php artisan vendor:publish --provider="Xlabs\OrderTrackerBundle\OrderTrackerServiceProvider" --tag="config"
First Use Case
use Xlabs\OrderTrackerBundle\Facades\OrderTracker;
public function trackOrder(Request $request) {
$orderId = OrderTracker::createOrder([
'order_id' => 'ORD123',
'status' => 'pending',
'customer_id' => 1,
'items' => [['product_id' => 1, 'quantity' => 2]],
]);
return response()->json(['order_id' => $orderId]);
}
$status = OrderTracker::getOrderStatus('ORD123');
Key Configs
Review config/ordertracker.php for:
pending, shipped, delivered).OrderStatusUpdated).order_tracker).Order Lifecycle Management
OrderTracker::createOrder() or OrderTracker::updateOrderStatus().
OrderTracker::updateOrderStatus('ORD123', 'shipped', ['carrier' => 'FedEx']);
OrderTracker::updateStatusForOrders() for batch updates (e.g., "mark all pending orders as shipped").Event-Driven Extensions
// In EventServiceProvider
protected $listen = [
'Xlabs\OrderTrackerBundle\Events\OrderStatusUpdated' => [
'App\Listeners\SendShippingNotification',
],
];
event(new \App\Events\CustomOrderEvent($orderData));
API Integration
Route::get('/orders/{id}/status', [OrderTrackerController::class, 'getStatus']);
OrderStatusUpdated events to push updates to external systems (e.g., ERP, CRM).Reporting
$history = OrderTracker::getOrderHistory('ORD123');
$reports = \Xlabs\OrderTrackerBundle\Models\Order::where('status', 'delivered')
->with('customer')
->get();
order_tracker table matches the bundle’s migrations (customize via php artisan migrate).OrderTracker facade’s validation rules by overriding the validateOrderData() method in a service.OrderTrackerTestCase trait for unit/feature tests:
use Xlabs\OrderTrackerBundle\Tests\OrderTrackerTestCase;
class OrderTest extends OrderTrackerTestCase { ... }
Status Transitions
pending → shipped → delivered). Bypassing this (e.g., pending → delivered) requires custom logic or extending the StatusTransition class.OrderTracker::forceUpdateStatus() sparingly (logs a warning).Event Order
\Xlabs\OrderTrackerBundle\Models\Order.Performance
select() or with() to limit columns:
$order = Order::with(['items' => function($query) {
$query->select('id', 'product_id', 'quantity');
}])->find($id);
Config Overrides
config/ordertracker.php under statuses before first use. Dynamic additions aren’t supported.config/ordertracker.php to log all status changes to storage/logs/ordertracker.log.DB::enableQueryLog() to inspect complex queries (e.g., bulk updates).Custom Fields
order_tracker table via migrations, then extend the Order model:
class Order extends \Xlabs\OrderTrackerBundle\Models\Order {
protected $casts = ['custom_field' => 'array'];
}
Status Logic
status_transitions.php config:
'transitions' => [
'pending' => ['shipped', 'cancelled'],
'shipped' => ['delivered', 'returned'], // Custom addition
],
Notifications
OrderStatusUpdated event listener to add SMS/email alerts:
class CustomNotificationListener {
public function handle(OrderStatusUpdated $event) {
if ($event->newStatus === 'delivered') {
Notification::route('mail', $event->order->customer->email)
->notify(new OrderDelivered($event->order));
}
}
}
API Responses
OrderTrackerController or using middleware to transform responses:
Response::macro('customOrderResponse', function ($order) {
return response()->json([
'id' => $order->order_id,
'status' => $order->status,
'metadata' => $order->custom_fields ?? [],
]);
});
How can I help you explore Laravel packages today?