Files
Hamza-AyedandClaude Opus 5 92dc6b3641 chore: استيراد أولي من سيرو (ecfe7568) — بلا أي تعديل
نسخة كاملة من مستودع سيرو عند ecfe7568 لتكون أساس تطبيق «انطلق».
نُسخ المتعقَّب في git فقط (12,509 ملفاً / 302 م.ب) بـ git archive، لا
`cp -r` — فاستُثنيت تلقائياً مخلفات البناء (build · node_modules ·
.dart_tool · .gradle · Pods ≈ 10.7 غ.ب) وكل ما يستثنيه .gitignore.

هذا الكوميت **بلا أي تعديل عمداً** حتى يكون كل ما يليه فرقاً مقروءاً
مقابل سيرو الأصلي. سيرو نفسه لم يُمسّ.

⚠️ لا يبني بعد: `.env` و`lib/env/env.g.dart` غير متعقَّبين في سيرو (وهذا
صحيح — أسرار لكل مستأجر). كل تطبيق فلاتر هنا يحتاج .env خاصاً بانطلق ثم
توليد env.g.dart عبر build_runner. لا تُنسخ أسرار سيرو.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 05:10:29 +03:00

1.5 KiB

Redis State Cache Plan

New Redis Keys

  • ride:{id}:state (Hash) → status, driver_id, passenger_id, carType, updated_at
  • ride:{id}:driver (Hash) → driver_name, car_model, car_plate, rating, phone (cached)

Changes Per File

acceptRide.php

After MySQL lock succeeds:

$redis->hmset("ride:$rideId:state", [
    'status'      => $status,
    'driver_id'   => $driverId,
    'passenger_id'=> $passengerIdValue,
    'carType'     => $carType,
    'updated_at'  => time()
]);
$redis->expire("ride:$rideId:state", 86400);

$redis->hmset("ride:$rideId:driver", $driverInfo);
$redis->expire("ride:$rideId:driver", 86400);

$redis->publish("ride:state_changes", json_encode([
    'ride_id' => $rideId, 'status' => 'accepted',
    'driver_id' => $driverId, 'passenger_id' => $passengerIdValue
]));

start_ride.php

$redis->hmset("ride:$rideId:state", ['status' => 'Begin', 'updated_at' => time()]);
$con_ride->prepare("UPDATE ride SET status = ?, rideTimeStart = NOW() WHERE id = ?")->execute([$status, $ride_id]);
$redis->publish("ride:state_changes", [...]);

arrive_ride.php, cancel_ride_*.php

Same pattern: Redis update first (or after), then MySQL, then Pub/Sub.

finish_ride_updates.php

No change to Redis state (keep MySQL transaction as-is).

Socket Server Changes (loction_server/driver_socket.php)

  • Subscribe to Redis ride:state_changes channel
  • On message: update in-memory state, emit to passenger room
  • Read from ride:{id}:state hash instead of MySQL queries