with([ 'fromCountry:id,name,iso_code', 'toCountry:id,name,iso_code', 'carrierMappings:id,shipment_id,carrier_code,carrier_tracking_number,booking_number,direction,delivery_status,notes', 'trackingEvents' => fn ($query) => $query->orderBy('event_date', 'desc')->orderBy('event_time', 'desc'), ]) ->first(); if (!$shipment) { return response()->json([ 'success' => false, 'message' => 'مرسوله‌ای با این کد یافت نشد', 'awb_no' => $awb_no, ], 404); } return response()->json([ 'success' => true, 'data' => [ 'shipment' => [ 'awb_no' => $shipment->awb_no, 'direction' => $shipment->direction?->value, 'type' => $shipment->type?->value, 'status' => $shipment->status?->value, 'status_label' => $shipment->status?->label(), 'from_country' => $shipment->fromCountry?->name, 'to_country' => $shipment->toCountry?->name, 'sender_name' => $shipment->sender_name, 'receiver_name' => $shipment->receiver_name, 'weight' => $shipment->weight, 'created_at' => $shipment->created_at?->toIso8601String(), ], 'carrier_mappings' => $shipment->carrierMappings->map(fn ($mapping) => [ 'carrier_code' => $mapping->carrier_code, 'carrier_tracking_number' => $mapping->carrier_tracking_number, 'booking_number' => $mapping->booking_number, 'delivery_status' => $mapping->delivery_status, 'notes' => $mapping->notes, ]), 'tracking_events' => $shipment->trackingEvents->map(fn ($event) => [ 'date' => $event->event_date?->toDateString(), 'time' => $event->event_time ? ($event->event_time instanceof \Carbon\Carbon ? $event->event_time->format('H:i') : $event->event_time) : null, 'location' => $event->location, 'description' => $event->event_description, 'status' => $event->delivery_status, 'source' => $event->source, ]), ], ]); } }