From ef1240b13047bb2430fcf1be5dd9e60ed07a60e5 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Mon, 27 Jul 2026 01:14:26 +0300 Subject: [PATCH] =?UTF-8?q?=D8=AA=D8=B5=D8=AD=D9=8A=D8=AD=20=D9=85=D9=81?= =?UTF-8?q?=D8=AA=D8=A7=D8=AD=20Redis=20=D9=84=D9=85=D9=88=D9=82=D8=B9=20?= =?UTF-8?q?=D8=A7=D9=84=D8=B3=D8=A7=D8=A6=D9=82:=20driver:location=20?= =?UTF-8?q?=E2=86=90=20driver:public?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit الموضعان كانا يقرآن مفتاحاً لا يُكتب في أي مكان في المشروع: $redisLocation->hGetAll("driver:location:$driverId") الكاتب الفعلي هو معالج الدفعات في loction_server/driver_socket.php، وهو يكتب hmset على driver:profile:{id} و driver:public:{id} معاً بنفس الحقول (lat/lng/heading/speed/status/updated_at). و driver:public له TTL 86400 بينما driver:profile له 900 فقط، فالعام هو الأنسب للقراءة. الأثر: كانت حمولة القبول تصل الراكب بلا إحداثيات أولية للسائق، فلا يظهر الماركر إلا بعد أول تحديث موقع من السوكيت أو الـ polling. أحد الموضعين ملف getRideOrderID.php الذي أضفته في f66db7db — نسخت النمط من acceptRide.php فنقلت الخطأ معه. مثبَّت على الإنتاج: redis-cli --scan --pattern 'driver:*' أرجع driver:public: فقط، ولا شيء باسم driver:location. Co-Authored-By: Claude Opus 5 --- backend/ride/rides/acceptRide.php | 7 ++++++- backend/ride/rides/getRideOrderID.php | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/backend/ride/rides/acceptRide.php b/backend/ride/rides/acceptRide.php index c01e0a74..7d0746ef 100644 --- a/backend/ride/rides/acceptRide.php +++ b/backend/ride/rides/acceptRide.php @@ -177,7 +177,12 @@ try { if (isset($redisLocation) && $redisLocation) { try { - $driverLoc = $redisLocation->hGetAll("driver:location:$driverId"); + // ‏المفتاح الصحيح driver:public — و driver:location لا يُكتب في أي + // ‏مكان إطلاقاً فكانت القراءة ترجع فارغة دائماً، فيصل الراكب بلا + // ‏إحداثيات أولية للسائق. الكاتب driver_socket.php في معالج + // ‏الدفعات (hmset على driver:profile و driver:public معاً، بحقول + // ‏lat/lng/heading نفسها، وTTL أربعٍ وعشرين ساعة للعام). + $driverLoc = $redisLocation->hGetAll("driver:public:$driverId"); if (!empty($driverLoc)) { $driverInfo['lat'] = (float)($driverLoc['lat'] ?? 0); $driverInfo['lng'] = (float)($driverLoc['lng'] ?? 0); diff --git a/backend/ride/rides/getRideOrderID.php b/backend/ride/rides/getRideOrderID.php index 69c207fd..2c1f4442 100644 --- a/backend/ride/rides/getRideOrderID.php +++ b/backend/ride/rides/getRideOrderID.php @@ -148,7 +148,9 @@ try { // ── 3. آخر موقع للسائق من Redis (اختياري) ────────────────────── if (isset($redisLocation) && $redisLocation) { try { - $driverLoc = $redisLocation->hGetAll("driver:location:$driverId"); + // ‏المفتاح driver:public هو ما يكتبه driver_socket.php فعلاً + // ‏(driver:location لا وجود له — كان خطأً منسوخاً من acceptRide.php). + $driverLoc = $redisLocation->hGetAll("driver:public:$driverId"); if (!empty($driverLoc)) { $driverInfo['lat'] = (float)($driverLoc['lat'] ?? 0); $driverInfo['lng'] = (float)($driverLoc['lng'] ?? 0);