Files
Siro/backend/migrations/2026_08_07_leak_detection.sql
T

51 lines
3.0 KiB
SQL
Raw 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_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`;