Update: 2026-08-07 02:58:47
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
-- 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`;
|
||||
Reference in New Issue
Block a user