Files
tripz-llc/backend/migrations/2026_08_07_driver_cancel_compensation_primary.sql
2026-08-09 16:56:13 +03:00

60 lines
4.9 KiB
SQL
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 2026_08_07_driver_cancel_compensation.sql
--
-- ‏تعويض السائق عند عدم حضور الراكب (إلغاء السائق بعد الوصول والانتظار).
-- ‏النموذج: التعويض = مسافة الاقتراب إلى الراكب × سعر الكيلومتر لنوع السيارة
-- ‏ + دقائق الانتظار الفعلية × سعر الدقيقة حسب وقت اليوم.
-- ‏يُخصم من محفظة الراكب ويُضاف لمحفظة السائق. الأسعار من kazan نفسه الذي
-- ‏تُسعَّر به الرحلة، عبر ride/pricing/pricing_helper.php.
--
-- ‏يستبدل هذا الملف مقاربة "الرسم الثابت" السابقة: المبلغ لم يعد يُقرأ من
-- ‏طلب العميل (كان filterRequest("penalty_fee") بلا سقف ولا تحقق)، ولم يعد
-- ‏رقماً ثابتاً — صار محسوباً من بيانات مسجَّلة على الخادم.
--
-- ⚠️ ‏هذا الملف لقاعدة primary (jorSiroDB) حصراً. الملف التوأم _ride.sql يُنفَّذ على قاعدة الرحلات (intaleq-ridesDB).
-- ══════════════════════════════════════════════════════════════
-- ١) سياسة التعويض لكل دولة (قاعدة primary فقط — kazan يُقرأ عبر $con)
-- ══════════════════════════════════════════════════════════════
ALTER TABLE `kazan`
ADD COLUMN `cancelCompensationCap` VARCHAR(10)
CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
NOT NULL DEFAULT '0'
COMMENT 'سقف تعويض عدم حضور الراكب بعملة الدولة. 0 = التعويض معطّل بالكامل'
AFTER `startPrice`,
ADD COLUMN `cancelMinWaitMinutes` TINYINT UNSIGNED
NOT NULL DEFAULT 5
COMMENT 'أقل دقائق انتظار بعد الوصول قبل أن يستحق السائق تعويضاً'
AFTER `cancelCompensationCap`;
-- ══════════════════════════════════════════════════════════════
-- ٢) بيانات الوصول والاقتراب (قاعدتا primary و ride)
--
-- ‏هذان العمودان للتوثيق النهائي فقط ولا يُكتبان أثناء الرحلة: القيمتان
-- ‏تعيشان في هاش Redis نفسه الذي يستخدمه السوكِت لحالة الرحلة
-- ‏(ride:$id:state، الحقول pickup_approach_km و driver_arrived_at)،
-- ‏وتُثبَّتان هنا كتابةً واحدة مدمجة في جملة تحديث الحالة عند الإلغاء.
-- ‏أي: صفر كتابات إضافية على المسار الحار (القبول والوصول).
-- ══════════════════════════════════════════════════════════════
ALTER TABLE `ride`
ADD COLUMN `driverArrivedAt` DATETIME NULL DEFAULT NULL
COMMENT 'لحظة تأكيد وصول السائق لنقطة الالتقاط — يختمها الخادم بعد تحقق الموقع',
ADD COLUMN `pickupApproachKm` FLOAT NOT NULL DEFAULT 0
COMMENT 'المسافة من موقع السائق لحظة القبول إلى نقطة الالتقاط (كم)';
-- ══════════════════════════════════════════════════════════════
-- ٣) تطبيق الإيقاف على الخادم (قاعدتا primary و ride)
-- ‏كان الإيقاف يُكتب في تخزين تطبيق السائق وحده، فيُفكّ بإعادة التثبيت.
--
-- ‏مسار الفحص في acceptRide.php هو مفتاح Redis بـ TTL (driver:$id:blocked)
-- ‏فينتهي الإيقاف تلقائياً بلا كرون تنظيف وبلا استعلام على كل قبول.
-- ‏هذا العمود سجل دائم للمراجعة الإدارية، يُكتب في الإلغاء الثالث فقط.
-- ══════════════════════════════════════════════════════════════
ALTER TABLE `driver`
ADD COLUMN `blockedUntil` DATETIME NULL DEFAULT NULL
COMMENT 'إيقاف استقبال الرحلات حتى هذا الوقت (إلغاءات متكررة). NULL = غير موقوف';
-- ‏للتراجع:
-- ALTER TABLE `kazan` DROP COLUMN `cancelCompensationCap`, DROP COLUMN `cancelMinWaitMinutes`;
-- ALTER TABLE `ride` DROP COLUMN `driverArrivedAt`, DROP COLUMN `pickupApproachKm`;
-- ALTER TABLE `driver` DROP COLUMN `blockedUntil`;