Update: 2026-07-14 00:34:22
This commit is contained in:
@@ -252,6 +252,54 @@ function transitDropEnrollment(int $orgId, string $passengerId): void
|
||||
$redisLocation->sRem("transit:org_members:{$orgId}", $passengerId);
|
||||
}
|
||||
|
||||
// ── كاش السائق في Redis ($redis الرئيسي — بادئة siro:) ──────────
|
||||
// جدول transit_drivers صغير، لكن endpoints الرحلات تستعلم عنه بكثرة
|
||||
// (today, start, end, delay, board_passenger, stop_passengers) — خصوصاً
|
||||
// board_passenger أثناء مسح تذاكر الصعود. نمط read-through: نقرأ من Redis
|
||||
// أولاً، وإن لم يوجد نستعلم القاعدة ونخزّن. المفتاح بـ main_driver_id
|
||||
// (المعرّف الآتي من JWT). نبطل الكاش عند أي تغيير حالة (تفعيل/تعليق).
|
||||
//
|
||||
// نخزّن فقط السائقين النشطين (status='active'). أي سجل غير نشط لا يُكاش
|
||||
// حتى لا نحتاج إبطالاً عند التفعيل — أول استعلام بعد التفعيل يبني الكاش.
|
||||
|
||||
function transitResolveDriver(string $mainDriverId): ?array
|
||||
{
|
||||
global $redis, $transit_con;
|
||||
if (!$mainDriverId) return null;
|
||||
|
||||
$key = "transit:driver:{$mainDriverId}";
|
||||
|
||||
if ($redis) {
|
||||
$cached = $redis->hGetAll($key);
|
||||
if (!empty($cached) && isset($cached['id'])) {
|
||||
return ['id' => (int)$cached['id'], 'org_id' => (int)$cached['org_id']];
|
||||
}
|
||||
}
|
||||
|
||||
if (!$transit_con) $transit_con = Database::get('transit');
|
||||
$st = $transit_con->prepare(
|
||||
"SELECT id, org_id FROM transit_drivers WHERE main_driver_id=? AND status='active' LIMIT 1"
|
||||
);
|
||||
$st->execute([$mainDriverId]);
|
||||
$driver = $st->fetch();
|
||||
if (!$driver) return null;
|
||||
|
||||
$resolved = ['id' => (int)$driver['id'], 'org_id' => (int)$driver['org_id']];
|
||||
|
||||
if ($redis) {
|
||||
$redis->hMSet($key, $resolved);
|
||||
$redis->expire($key, 3600); // ساعة — طبقة حماية إن فات إبطالٌ ما
|
||||
}
|
||||
|
||||
return $resolved;
|
||||
}
|
||||
|
||||
function transitInvalidateDriverCache(string $mainDriverId): void
|
||||
{
|
||||
global $redis;
|
||||
if ($redis && $mainDriverId) $redis->del("transit:driver:{$mainDriverId}");
|
||||
}
|
||||
|
||||
// ── days_mask helpers ────────────────────────────────────────
|
||||
// bit0=Sun … bit6=Sat | 62 = 0b0111110 = الأحد–الخميس
|
||||
|
||||
|
||||
Reference in New Issue
Block a user