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

64 lines
3.2 KiB
SQL

-- 2026_08_07_safety_incidents.sql
--
-- ‏غرفة عمليات السلامة — أثر يمكن مراجعته لواقعة حقيقية.
--
-- ‏الوضع اليوم: زر SOS في تطبيق الراكب ينتهي عند رسالة واتساب لجهة اتصال
-- ‏شخصية خزّنها الراكب بنفسه (ui_interactions_controller.dart:145). لا نداء
-- ‏API، لا سجل، لا تنبيه لأحد داخل الشركة. لو وقعت حادثة فعلية، الشركة لا
-- ‏تعرف بها ولا تملك دليلاً عنها ولا تستطيع التدخل.
--
-- ‏هذا الجدول هو الأثر المفقود. رسالة الواتساب تبقى كما هي — تُرسل بالتوازي
-- ‏لا بدلاً، لأنها الأسرع وصولاً لمن يهمّه الأمر فعلاً.
--
-- ⚠️ ‏يُنفَّذ على قاعدة primary (jorSiroDB) وحدها.
CREATE TABLE IF NOT EXISTS `safety_incidents` (
`id` INT NOT NULL AUTO_INCREMENT,
-- ‏من أبلغ ولماذا
`reporter_type` VARCHAR(20) NOT NULL
COMMENT 'passenger | driver — من ضغط الزر',
`reporter_id` VARCHAR(100) NOT NULL,
`trigger_type` VARCHAR(30) NOT NULL DEFAULT 'sos_button'
COMMENT 'sos_button | shake | route_deviation | long_stop | overtime',
-- ‏سياق الواقعة
`ride_id` VARCHAR(20) NULL DEFAULT NULL,
`driver_id` VARCHAR(100) NULL DEFAULT NULL,
`passenger_id` VARCHAR(100) NULL DEFAULT NULL,
`lat` DECIMAL(10,7) NULL DEFAULT NULL,
`lng` DECIMAL(10,7) NULL DEFAULT NULL,
`note` VARCHAR(500) NULL DEFAULT NULL,
-- ‏لقطة الحالة وقت الواقعة، مجمّدة كما كانت.
-- ‏الرحلة تتغيّر بعد الحادثة (تُلغى، تُنهى، يُصفَّر السائق) فقراءتها لاحقاً
-- ‏لا تصف اللحظة. هذه اللقطة هي الدليل.
`snapshot` JSON NULL DEFAULT NULL,
-- ‏دورة المعالجة
`status` VARCHAR(20) NOT NULL DEFAULT 'open'
COMMENT 'open | acknowledged | resolved | false_alarm',
`acknowledged_by` VARCHAR(100) NULL DEFAULT NULL,
`acknowledged_at` DATETIME NULL DEFAULT NULL,
`resolution_note` VARCHAR(500) NULL DEFAULT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_status_created` (`status`, `created_at`),
KEY `idx_ride` (`ride_id`),
KEY `idx_driver` (`driver_id`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
COMMENT='بلاغات السلامة — السجل الوحيد القابل للمراجعة لواقعة';
-- ‏تجميد إسناد الرحلات للسائق حتى المراجعة.
-- ‏منفصل عن blockedUntil (عقوبة الإلغاءات المتكررة): ذاك مؤقت بساعات
-- ‏وينتهي وحده، وهذا يبقى حتى يرفعه إنسان.
ALTER TABLE `driver`
ADD COLUMN `safetyHoldIncidentId` INT NULL DEFAULT NULL
COMMENT 'رقم بلاغ السلامة الذي جمّد هذا السائق. NULL = غير مجمّد';
-- ‏للتراجع:
-- DROP TABLE `safety_incidents`;
-- ALTER TABLE `driver` DROP COLUMN `safetyHoldIncidentId`;