Update Saqel Platform: 2026-09-04 02:04:43

This commit is contained in:
Hamza-Ayed
2026-09-04 02:04:43 +03:00
parent 58c3c48f69
commit 1fe97bf3eb
16 changed files with 5996 additions and 183 deletions
+114 -7
View File
@@ -54,25 +54,131 @@ CREATE TABLE IF NOT EXISTS `auth_identities` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ------------------------------------------------------------------------------
-- 2. Table: schools (المدارس الخاصة، مدارس الثقافة العسكرية، والمراكز الشريكة)
-- 2. Table: directorates (المظلات المركزية: مديرية الثقافة العسكرية ومجمعات المدارس)
-- ------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `schools` (
CREATE TABLE IF NOT EXISTS `directorates` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`uuid` CHAR(36) NOT NULL UNIQUE,
`code` VARCHAR(50) NOT NULL UNIQUE,
`name` VARCHAR(255) NOT NULL,
`type` ENUM('military_culture', 'private', 'public', 'center') NOT NULL DEFAULT 'private',
`director_name` VARCHAR(255) DEFAULT NULL,
`type` ENUM('military_culture', 'private_group', 'ministry') NOT NULL DEFAULT 'military_culture',
`commander_name` VARCHAR(255) DEFAULT NULL,
`phone` VARCHAR(50) DEFAULT NULL,
`city` VARCHAR(100) DEFAULT 'Amman',
`total_schools` INT UNSIGNED NOT NULL DEFAULT 43,
`total_students` INT UNSIGNED NOT NULL DEFAULT 19000,
`total_teachers` INT UNSIGNED NOT NULL DEFAULT 800,
`annual_contract_value` DECIMAL(10, 2) NOT NULL DEFAULT 20000.00,
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
`subscription_status` ENUM('active', 'trial', 'expired') NOT NULL DEFAULT 'active',
`contract_expires_at` TIMESTAMP NULL DEFAULT NULL,
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ------------------------------------------------------------------------------
-- 3. Table: schools (المدارس والفروع التابعة مع تصنيف الوزن والموقع الجغرافي)
-- ------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `schools` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`uuid` CHAR(36) NOT NULL UNIQUE,
`directorate_id` BIGINT UNSIGNED DEFAULT NULL,
`code` VARCHAR(50) NOT NULL UNIQUE,
`name` VARCHAR(255) NOT NULL,
`type` ENUM('military_culture', 'private', 'public', 'center') NOT NULL DEFAULT 'military_culture',
`weight_tier` ENUM('tier_a_small', 'tier_b_medium', 'tier_c_large') NOT NULL DEFAULT 'tier_b_medium',
`student_count` INT UNSIGNED NOT NULL DEFAULT 450,
`teacher_count` INT UNSIGNED NOT NULL DEFAULT 25,
`director_name` VARCHAR(255) DEFAULT NULL,
`phone` VARCHAR(50) DEFAULT NULL,
`city` VARCHAR(100) DEFAULT 'Amman',
`governorate` VARCHAR(100) DEFAULT 'العاصمة',
`latitude` DECIMAL(10, 8) DEFAULT 31.9539,
`longitude` DECIMAL(11, 8) DEFAULT 35.9106,
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
`subscription_status` ENUM('active', 'trial', 'expired') NOT NULL DEFAULT 'active',
`annual_fee` DECIMAL(8, 2) NOT NULL DEFAULT 450.00,
`contract_expires_at` TIMESTAMP NULL DEFAULT NULL,
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_schools_directorate` (`directorate_id`),
CONSTRAINT `fk_school_directorate` FOREIGN KEY (`directorate_id`) REFERENCES `directorates` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ------------------------------------------------------------------------------
-- 4. Table: field_recorded_lessons (الحصص الميدانية المرئية المصورة عبر تطبيق المشرف)
-- ------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `field_recorded_lessons` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`uuid` CHAR(36) NOT NULL UNIQUE,
`school_id` BIGINT UNSIGNED NOT NULL,
`teacher_id` BIGINT UNSIGNED NOT NULL,
`subject` VARCHAR(100) NOT NULL,
`grade_level` VARCHAR(50) NOT NULL,
`lesson_title` VARCHAR(255) NOT NULL,
`video_path` VARCHAR(500) NOT NULL,
`file_size_mb` DECIMAL(8, 2) NOT NULL DEFAULT 350.00,
`duration_minutes` INT UNSIGNED NOT NULL DEFAULT 45,
`ai_alignment_score` DECIMAL(5, 2) DEFAULT NULL,
`teacher_talk_ratio` DECIMAL(5, 2) DEFAULT NULL,
`pedagogical_report_json` JSON DEFAULT NULL,
`socratic_checkpoints_json` JSON DEFAULT NULL,
`status` ENUM('pending_ai', 'under_supervisor_review', 'approved', 'rejected') NOT NULL DEFAULT 'pending_ai',
`recorded_by_name` VARCHAR(255) NOT NULL,
`recorded_by_role` ENUM('principal', 'supervisor') NOT NULL DEFAULT 'principal',
`recorded_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_recorded_school` (`school_id`),
KEY `idx_recorded_teacher` (`teacher_id`),
CONSTRAINT `fk_recorded_school` FOREIGN KEY (`school_id`) REFERENCES `schools` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ------------------------------------------------------------------------------
-- 5. Table: unified_exams (الامتحانات الموحدة بنكهة التوجيهي الوزاري)
-- ------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `unified_exams` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`uuid` CHAR(36) NOT NULL UNIQUE,
`directorate_id` BIGINT UNSIGNED NOT NULL,
`code` VARCHAR(50) NOT NULL UNIQUE,
`title` VARCHAR(255) NOT NULL,
`subject` VARCHAR(100) NOT NULL,
`grade_level` VARCHAR(50) NOT NULL,
`scheduled_at` DATETIME NOT NULL,
`duration_minutes` INT UNSIGNED NOT NULL DEFAULT 60,
`form_a_json` JSON NOT NULL,
`form_b_json` JSON NOT NULL,
`answer_key_json` JSON NOT NULL,
`status` ENUM('draft', 'scheduled', 'in_progress', 'completed') NOT NULL DEFAULT 'scheduled',
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_unified_directorate` (`directorate_id`),
CONSTRAINT `fk_unified_directorate` FOREIGN KEY (`directorate_id`) REFERENCES `directorates` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ------------------------------------------------------------------------------
-- 6. Table: exam_school_sessions (جلسات الامتحان في كل مدرسة ومكافحة الغش)
-- ------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `exam_school_sessions` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`unified_exam_id` BIGINT UNSIGNED NOT NULL,
`school_id` BIGINT UNSIGNED NOT NULL,
`total_students` INT UNSIGNED NOT NULL DEFAULT 0,
`completed_count` INT UNSIGNED NOT NULL DEFAULT 0,
`pushed_to_lab` TINYINT(1) NOT NULL DEFAULT 0,
`pushed_to_lab_at` DATETIME DEFAULT NULL,
`speed_anomalies_count` INT UNSIGNED NOT NULL DEFAULT 0,
`error_clustering_count` INT UNSIGNED NOT NULL DEFAULT 0,
`panoramic_video_path` VARCHAR(500) DEFAULT NULL,
`panoramic_size_mb` DECIMAL(8, 2) DEFAULT 0.00,
`status` ENUM('ready', 'in_progress', 'submitted', 'flagged_investigation') NOT NULL DEFAULT 'ready',
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_exam_school` (`unified_exam_id`, `school_id`),
CONSTRAINT `fk_session_exam` FOREIGN KEY (`unified_exam_id`) REFERENCES `unified_exams` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_session_school` FOREIGN KEY (`school_id`) REFERENCES `schools` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ------------------------------------------------------------------------------
-- 3. Table: school_rosters (كشوفات المدارس المعتمدة بالرقم الوطني والربط التلقائي)
-- ------------------------------------------------------------------------------
@@ -244,6 +350,7 @@ CREATE TABLE IF NOT EXISTS `lessons` (
`markdown_content` LONGTEXT DEFAULT NULL COMMENT 'محتوى الدرس النصي بصيغة Markdown و LaTeX',
`cheat_sheet_markdown` LONGTEXT DEFAULT NULL COMMENT 'ملخص الدرس السريع (Cheat Sheet)',
`socratic_quiz_json` JSON DEFAULT NULL COMMENT 'الفحص السقراطي الذكي (سؤال وجواب)',
`interactive_lab_json` JSON DEFAULT NULL COMMENT 'المختبر التفاعلي المسبق التجهيز (أمثلة الكتاب الوزاري + التمارين الذكية المخبوزة)',
`is_free_preview` TINYINT(1) NOT NULL DEFAULT 0,
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,