Update: 2026-07-06 18:23:46
This commit is contained in:
@@ -36,6 +36,29 @@ try {
|
||||
$stmtMainRide = $con->prepare("UPDATE ride SET status = ?, rideTimeStart = NOW() WHERE id = ?");
|
||||
$stmtMainRide->execute([$status, $ride_id]);
|
||||
|
||||
// 🆕 Immutable Fare Lock: Save agreed fixed price in Redis
|
||||
try {
|
||||
$stmtRideInfo = $con->prepare("SELECT price, car_type FROM ride WHERE id = ? LIMIT 1");
|
||||
$stmtRideInfo->execute([$ride_id]);
|
||||
$rideInfo = $stmtRideInfo->fetch(PDO::FETCH_ASSOC);
|
||||
if ($rideInfo) {
|
||||
$agreedPrice = floatval($rideInfo['price']);
|
||||
$carTypeStr = $rideInfo['car_type'] ?? 'Fixed Price';
|
||||
$fixedPriceTypes = ['Speed', 'Fixed Price', 'Awfar Car'];
|
||||
if (in_array($carTypeStr, $fixedPriceTypes)) {
|
||||
global $redis;
|
||||
if ($redis) {
|
||||
$redis->setex("ride_locked_price_{$ride_id}", 86400, $agreedPrice);
|
||||
error_log("[start_ride] Locked Fixed Price for ride {$ride_id}: {$agreedPrice}");
|
||||
} else {
|
||||
error_log("[start_ride] Failed to lock price: Global Redis instance not available.");
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
error_log("[start_ride] Redis Error (locking price): " . $e->getMessage());
|
||||
}
|
||||
|
||||
// تحديث أو إدخال في جدول Driver Orders
|
||||
$checkSql = "SELECT `order_id` FROM `driver_orders` WHERE `order_id` = ?";
|
||||
$checkStmt = $con->prepare($checkSql);
|
||||
@@ -61,21 +84,22 @@ try {
|
||||
// 2.5 تصفير الدين من Redis عند بدء الرحلة (كما طلبت)
|
||||
if ($passenger_id) {
|
||||
try {
|
||||
$redis = new Redis();
|
||||
$redis->connect('127.0.0.1', 6379);
|
||||
$redisKey = "passenger_debt_" . $passenger_id;
|
||||
|
||||
// قراءة الدين الحالي من Redis قبل الحذف (إن لزم الأمر للتسجيل مستقبلاً)
|
||||
$currentDebt = (float) $redis->get($redisKey);
|
||||
|
||||
// تصفير / حذف الدين
|
||||
$redis->del($redisKey);
|
||||
|
||||
// يمكنك هنا أيضاً إدراج حركة معاكسة في جدول passengerWallet إذا أردت تسوية قاعدة البيانات
|
||||
if ($currentDebt < 0) {
|
||||
$positiveOffset = abs($currentDebt);
|
||||
$stmtWallet = $con->prepare("INSERT INTO `passengerWallet` (passenger_id, balance) VALUES (?, ?)");
|
||||
$stmtWallet->execute([$passenger_id, $positiveOffset]);
|
||||
global $redis;
|
||||
if ($redis) {
|
||||
$redisKey = "passenger_debt_" . $passenger_id;
|
||||
|
||||
// قراءة الدين الحالي من Redis قبل الحذف (إن لزم الأمر للتسجيل مستقبلاً)
|
||||
$currentDebt = (float) $redis->get($redisKey);
|
||||
|
||||
// تصفير / حذف الدين
|
||||
$redis->del($redisKey);
|
||||
|
||||
// يمكنك هنا أيضاً إدراج حركة معاكسة في جدول passengerWallet إذا أردت تسوية قاعدة البيانات
|
||||
if ($currentDebt < 0) {
|
||||
$positiveOffset = abs($currentDebt);
|
||||
$stmtWallet = $con->prepare("INSERT INTO `passengerWallet` (passenger_id, balance) VALUES (?, ?)");
|
||||
$stmtWallet->execute([$passenger_id, $positiveOffset]);
|
||||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
error_log("Redis Error (zeroing debt): " . $e->getMessage());
|
||||
|
||||
Reference in New Issue
Block a user