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>
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
# 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:
|
||||
```php
|
||||
$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
|
||||
```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
|
||||
Reference in New Issue
Block a user