64 lines
2.9 KiB
PHP
64 lines
2.9 KiB
PHP
<?php
|
|
// cron_cleanup_waiting.php
|
|
// مسار الاتصال بقاعدة البيانات
|
|
require_once __DIR__ . '/../../get_connect.php';
|
|
|
|
// تسجيل في اللوج لبداية العملية
|
|
error_log("⏰ [Cleanup Cron] Started cleaning old waiting rides...");
|
|
|
|
try {
|
|
// المدة المسموحة بالدقائق
|
|
$minutesLimit = 15;
|
|
|
|
// =========================================================
|
|
// الخطوة 1: تحديث الحالة في الجدول الرئيسي (الأرشيف)
|
|
// =========================================================
|
|
// نقوم بتحديث حالة الرحلات التي ستُحذف ليعلم الراكب أنها انتهت (Time Out)
|
|
// بدلاً من أن تبقى 'waiting' للأبد في سجلات الراكب
|
|
|
|
$sqlUpdate = "UPDATE ride
|
|
SET status = 'timeout'
|
|
WHERE id IN (
|
|
SELECT id FROM waitingRides
|
|
WHERE created_at < DATE_SUB(NOW(), INTERVAL $minutesLimit MINUTE)
|
|
) AND status = 'waiting'"; // نتأكد أننا نحدث ما هو معلق فقط
|
|
|
|
$stmtUpdate = $con->prepare($sqlUpdate);
|
|
$stmtUpdate->execute();
|
|
$updatedCount = $stmtUpdate->rowCount();
|
|
|
|
// =========================================================
|
|
// الخطوة 2: الحذف من جدول الانتظار (تنظيف Hot Data)
|
|
// =========================================================
|
|
|
|
$sqlDelete = "DELETE FROM waitingRides
|
|
WHERE created_at < DATE_SUB(NOW(), INTERVAL $minutesLimit MINUTE)";
|
|
|
|
$stmtDelete = $con->prepare($sqlDelete);
|
|
$stmtDelete->execute();
|
|
$deletedCount = $stmtDelete->rowCount();
|
|
|
|
// =========================================================
|
|
// الخطوة 3: (اختياري) تنظيف الريدز
|
|
// =========================================================
|
|
// بما أنك تستخدم Redis، المفترض أن تحذفها منه أيضاً.
|
|
// لكن بما أن الريدز يعتمد على TTL (Expire) أو سيتم تحديثه عند الطلب القادم،
|
|
// فالحذف من الـ MySQL يكفي لأن getRideWaiting سيفحص MySQL ولن يجدها.
|
|
|
|
// تقرير العملية
|
|
if ($deletedCount > 0) {
|
|
$msg = "✅ [Cleanup Cron] Success: Timed out $updatedCount rides in Main DB, and Deleted $deletedCount rides from Waiting DB.";
|
|
error_log($msg);
|
|
echo json_encode(["status" => "success", "message" => $msg]);
|
|
} else {
|
|
$msg = "💤 [Cleanup Cron] No expired rides found.";
|
|
error_log($msg);
|
|
echo json_encode(["status" => "success", "message" => "Nothing to clean."]);
|
|
}
|
|
|
|
} catch (PDOException $e) {
|
|
$errorMsg = "❌ [Cleanup Cron] Error: " . $e->getMessage();
|
|
error_log($errorMsg);
|
|
echo json_encode(["status" => "failure", "message" => $e->getMessage()]);
|
|
}
|
|
?>
|