51 lines
3.0 KiB
SQL
51 lines
3.0 KiB
SQL
-- 2026_08_07_leak_detection.sql
|
||
--
|
||
-- كشف التسرب خارج المنصة — سجل خادمي مستقل عن بلاغ التطبيق.
|
||
--
|
||
-- الموجود اليوم: جدول driver_ride_scam يملؤه **تطبيق السائق عن نفسه**
|
||
-- (map_driver_controller.dart:823). نسخة معدّلة من التطبيق ببساطة لا
|
||
-- ترسل البلاغ، فالكشف يعتمد على تعاون من نريد كشفه. ويبقى مفيداً كإشارة
|
||
-- إضافية، لذلك لا نلمسه.
|
||
--
|
||
-- الجديد: الخادم يستنتج النمط بنفسه من بيانات لا يملك السائق تزويرها —
|
||
-- قَبِل، ثم أُلغيت، ولم تبدأ الرحلة قط. وتكرار نفس زوج (سائق، راكب) هو
|
||
-- الإشارة عالية الثقة: صدفةً مرة، ونمطاً مرتين.
|
||
--
|
||
-- ⚠️ يُنفَّذ على قاعدة primary (jorSiroDB) وحدها.
|
||
|
||
CREATE TABLE IF NOT EXISTS `driver_leak_events` (
|
||
`id` INT NOT NULL AUTO_INCREMENT,
|
||
`driver_id` VARCHAR(100) NOT NULL,
|
||
`passenger_id` VARCHAR(100) NOT NULL,
|
||
`ride_id` VARCHAR(20) NOT NULL,
|
||
`cancel_status` VARCHAR(40) NOT NULL
|
||
COMMENT 'الحالة التي انتهت بها الرحلة (CancelFromDriverAfterApply / cancelled_by_passenger)',
|
||
`pair_repeat` SMALLINT UNSIGNED NOT NULL DEFAULT 1
|
||
COMMENT 'كم مرة تكرر نفس زوج (سائق، راكب) بهذا النمط خلال النافذة',
|
||
`app_reported` TINYINT(1) NOT NULL DEFAULT 0
|
||
COMMENT 'هل بلّغ تطبيق السائق أيضاً (driver_ride_scam)؟ تطابقهما يرفع الثقة',
|
||
`confidence` DECIMAL(4,3) NOT NULL DEFAULT 0
|
||
COMMENT 'درجة الثقة 0..1 — يحسبها bot/cron_leak_detection.php',
|
||
`reviewed_by` VARCHAR(100) NULL DEFAULT NULL
|
||
COMMENT 'معرّف الإداري الذي راجع الحالة. NULL = لم تُراجع بعد',
|
||
`review_note` VARCHAR(255) NULL DEFAULT NULL,
|
||
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (`id`),
|
||
-- يمنع الكرون من تسجيل نفس الرحلة مرتين عند كل مرور
|
||
UNIQUE KEY `uniq_ride` (`ride_id`),
|
||
KEY `idx_driver` (`driver_id`, `created_at`),
|
||
KEY `idx_pair` (`driver_id`, `passenger_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||
COMMENT='أحداث تسرب مشتبهة يستنتجها الخادم — لا يبلّغ عنها التطبيق';
|
||
|
||
-- driver_orders يُقرأ في هذا الكشف بالانضمام على order_id و driver_id،
|
||
-- وهو اليوم بلا أي فهرس غير المفتاح الأساسي (id). الفحص كان سيمسح
|
||
-- الجدول كاملاً عند كل مرور.
|
||
ALTER TABLE `driver_orders`
|
||
ADD INDEX `idx_order` (`order_id`),
|
||
ADD INDEX `idx_driver_created` (`driver_id`, `created_at`);
|
||
|
||
-- للتراجع:
|
||
-- DROP TABLE `driver_leak_events`;
|
||
-- ALTER TABLE `driver_orders` DROP INDEX `idx_order`, DROP INDEX `idx_driver_created`;
|